1. #define ElemType int
    2. #include"LinkStNode.h"
    3. int main(){
    4. int i;
    5. LinkStNode * S;
    6. ElemType e;
    7. ElemType a[10] = {10,9,8,7,6,5,4,3,2,1};
    8. InitStack(&S);// 这里一定要有初始化
    9. for (i = 0; i < 10; i++)
    10. {
    11. Push(&S,a[i]);
    12. }
    13. for (i = 0; i < 10; i++)
    14. {
    15. Pop(&S,&e);
    16. printf("%d\t",e);
    17. }
    18. printf("\n");
    19. return 0;
    20. }
    1. //链式栈
    2. #include <stdlib.h>
    3. #include <stdio.h>
    4. typedef struct LinkNode{
    5. ElemType data;
    6. struct LinkNode * next;
    7. } LinkStNode;
    8. //1.初始化
    9. void InitStack(LinkStNode **S)
    10. {
    11. (*S) = (LinkStNode *)malloc(sizeof(LinkStNode));
    12. (*S)->next = NULL;
    13. }
    14. //2.销毁顺序表
    15. void DestroyStack(LinkStNode **S)
    16. {
    17. LinkStNode * pre = *S, * p = (*S)->next;
    18. while(p != NULL){
    19. free(pre);
    20. pre = (*S);
    21. p = pre->next;
    22. }
    23. free(pre);
    24. }
    25. //3.push
    26. void Push(LinkStNode **S, ElemType e)
    27. {
    28. LinkStNode * p = (LinkStNode *)malloc(sizeof(LinkStNode));
    29. p->data = e;
    30. p->next = (*S)->next;
    31. (*S)->next = p;
    32. }
    33. //4.pop
    34. int Pop(LinkStNode ** S, ElemType *e)
    35. {
    36. LinkStNode * p = (*S)->next;
    37. if ((*S)->next == NULL)
    38. {
    39. printf("栈为空");
    40. return 0;
    41. }
    42. *e = p->data;
    43. (*S)->next = p->next;
    44. free(p);
    45. return 1;
    46. }
    47. //5.GetTop
    48. int GetTop(LinkStNode ** S,ElemType * e){
    49. if ((*S)->next == NULL)
    50. {
    51. printf("栈为空");
    52. return 0;
    53. }
    54. *e = (*S)->next->data;
    55. return 1;
    56. }