• 顺序栈


    1. #include "stdio.h"
    2. #include "stdlib.h"
    3. #include "math.h"
    4. #include "time.h"
    5. #define OK 1
    6. #define ERROR 0
    7. #define TRUE 1
    8. #define FALSE 0
    9. #define MAXSIZE 20 /* 存储空间初始分配量 */
    10. typedef int Status;
    11. typedef int SElemType; /* SElemType 类型根据实际情况而定,这里假设为 int */
    12. /* 顺序栈结构 */
    13. typedef struct {
    14. SElemType data[MAXSIZE];/* 存放数据的数组 */
    15. int top; /* 用整数来做栈顶指针 */
    16. } SqStack;
    17. /* 访问一个元素 */
    18. Status visit(SElemType c) {
    19. printf("%d ", c);
    20. return OK;
    21. }
    22. /* 构造一个空栈 S */
    23. Status InitStack(SqStack *S) {
    24. /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */
    25. S->top = -1;
    26. return OK;
    27. }
    28. /* 把 S 置为空栈 */
    29. Status ClearStack(SqStack *S) {
    30. S->top = -1;
    31. return OK;
    32. }
    33. /* 若栈 S 为空栈,则返回 TRUE,否则返回 FALSE */
    34. Status StackEmpty(SqStack S) {
    35. if (S.top == -1)
    36. return TRUE;
    37. else
    38. return FALSE;
    39. }
    40. /* 返回 S 的元素个数,即栈的长度 */
    41. int StackLength(SqStack S) {
    42. return S.top + 1;
    43. }
    44. /* 若栈不空,则用 e 返回 S 的栈顶元素,并返回 OK;否则返回 ERROR */
    45. Status GetTop(SqStack S, SElemType *e) {
    46. if (S.top == -1)
    47. return ERROR;
    48. else
    49. *e = S.data[S.top];
    50. return OK;
    51. }
    52. /* 插入元素 e 为新的栈顶元素 */
    53. Status Push(SqStack *S, SElemType e) {
    54. if (S->top == MAXSIZE - 1) /* 栈满 */
    55. {
    56. return ERROR;
    57. }
    58. S->top++;
    59. /* 栈顶指针增加一 */
    60. S->data[S->top] = e; /* 将新插入元素赋值给栈顶空间 */
    61. return OK;
    62. }
    63. /* 若栈不空,则删除 S 的栈顶元素,用 e 返回其值,并返回 OK;否则返回 ERROR */
    64. Status Pop(SqStack *S, SElemType *e) {
    65. if (S->top == -1)
    66. return ERROR;
    67. *e = S->data[S->top];
    68. S->top--;
    69. return OK;
    70. /* 将要删除的栈顶元素赋值给 e */
    71. /* 栈顶指针减一 */
    72. }
    73. /* 从栈底到栈顶依次对栈中每个元素显示 */
    74. Status StackTraverse(SqStack S) {
    75. int i;
    76. i = 0;
    77. while (i <= S.top) {
    78. visit(S.data[i++]);
    79. }
    80. printf(" ");
    81. return OK;
    82. }
    83. int main() {
    84. int j;
    85. SqStack s;
    86. int e;
    87. if (InitStack(&s) == OK)
    88. for (j = 1; j <= 10; j++)
    89. Push(&s, j);
    90. printf("栈中元素依次为:");
    91. StackTraverse(s);
    92. Pop(&s, &e);
    93. printf("弹出的栈顶元素 e=%d ", e);
    94. printf("栈空否:%d(1:空 0:否) ", StackEmpty(s));
    95. GetTop(s, &e);
    96. printf("栈顶元素 e=%d 栈的长度为%d ", e, StackLength(s));
    97. ClearStack(&s);
    98. printf("清空栈后,栈空否:%d(1:空 0:否) ", StackEmpty(s));
    99. return 0;
    100. }





  • 相关阅读:
    oracle job
    mysql与oracle之间的数据类型转换
    Oracle ORA-02069: 此操作的 global_names 参数必须设置为 TRUE
    oracle sequence 详解
    ORA-08004: 序列 SEQ_XXX.NEXTVAL exceeds MAXVALUE 无法实例化
    How to change Hostname / IP for a Grid Infrastructure Oracle Restart Standalone Configuration (SIHA) (文档 ID 1552810.1)
    oracle-1条updata的故事
    ADAPTIVE LOG FILE SYNC 引起的高Log File Sync警示
    oracle 静默创建数据库
    oracle 中文Linux安装乱码问题
  • 原文地址:https://www.cnblogs.com/zhuzhenfeng/p/4626544.html
Copyright © 2020-2023  润新知