1. #include<stdio.h>
    2. #include<stdbool.h>
    3. #include<stdlib.h>
    4. #define TYPE int
    5. //#define TYPE biTree*
    6. //#define TYPE char
    7. //#define TYPE Recursion
    8. struct biTree {
    9. char data;
    10. struct biTree *lchild;
    11. struct biTree *rchild;
    12. };
    13. struct Recursion {
    14. int no;
    15. int val;
    16. };
    17. struct Stack
    18. {
    19. TYPE* arr; //内存首地址
    20. int len; //栈的容量
    21. int top; //栈的下标
    22. };
    23. /* --------------以下为实现函数--------------------*/
    24. //创建一个栈
    25. Stack *createStack(int size) {
    26. struct Stack *stack = (struct Stack*)malloc(sizeof(struct Stack));//给栈分配空间
    27. stack->arr = (TYPE *)malloc(sizeof(TYPE)*size);//给内存首地址分配空间,大小用户指定
    28. stack->len = size;//栈容量
    29. stack->top = -1;//栈顶下标,当前无元素,故为-1
    30. return stack;
    31. }
    32. //判断栈满
    33. bool full(Stack *stack) {
    34. return stack->top + 1 >= stack->len;
    35. }
    36. //判断栈空
    37. bool empty(Stack *stack) {
    38. return stack->top == -1;
    39. }
    40. //入栈
    41. bool push(Stack *stack, TYPE p) {
    42. if (full(stack)) return false;
    43. *(stack->arr + ++stack->top) = p;
    44. return true;
    45. }
    46. //出栈
    47. bool pop(Stack *stack) {
    48. if (empty(stack)) return false;
    49. stack->top--;
    50. return true;
    51. }
    52. //查看栈顶元素
    53. TYPE top(Stack *stack) {
    54. if (empty(stack)) return NULL;
    55. return *(stack->arr + stack->top);
    56. }
    57. //销毁
    58. void destory(Stack *stack) {
    59. free(stack->arr);
    60. free(stack);
    61. }
    62. //判断是否含有某个元素
    63. bool contain(Stack *stack, TYPE r) {
    64. if (empty(stack)) return false;
    65. for (int i = stack->top; i >= 0; i--) {
    66. if (r == *(stack->arr + i) ){//疯了,我居然把==写成了=
    67. return true;
    68. }
    69. }
    70. return false;
    71. }