链表实现栈

举报
兔老大 发表于 2021/04/19 23:50:50 2021/04/19
【摘要】 栈,是操作受限的线性表,只能在一端进行插入删除。 其实就是带尾指针的链表,尾插 #include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define Status int#define SElemType int//只在头部进行插入和删除(不带头结点)typedef stru...

栈,是操作受限的线性表,只能在一端进行插入删除。

其实就是带尾指针的链表,尾插


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define OK 1
  4. #define ERROR 0
  5. #define Status int
  6. #define SElemType int
  7. //只在头部进行插入和删除(不带头结点)
  8. typedef struct LNode
  9. {
  10. SElemType data;
  11. struct LNode *next;
  12. }LNode, *LinkList;
  13. typedef struct
  14. {
  15. LNode *top;
  16. LNode *base;
  17. int length;
  18. }LinkStack;
  19. Status InitStack(LinkStack &S)
  20. {
  21. S.base = NULL;
  22. S.top = NULL;
  23. S.length = 0;
  24. return OK;
  25. }
  26. Status GetTop(LinkStack S, SElemType &e)
  27. {
  28. if(S.length == 0)
  29. return ERROR;
  30. e = S.top->data ;
  31. return OK;
  32. }
  33. Status Push(LinkStack &S, SElemType e)
  34. {
  35. LNode *newNode = (LNode *)malloc(sizeof(LNode));
  36. newNode->data = e;
  37. newNode->next = S.top;
  38. S.top = newNode;
  39. if(!S.base)
  40. S.base = newNode;
  41. ++S.length;
  42. return OK;
  43. }
  44. Status Pop(LinkStack &S, SElemType &e)
  45. {
  46. LNode *p = S.top;
  47. if(S.length == 0)
  48. return ERROR;
  49. e = S.top->data;
  50. S.top = S.top->next;
  51. free(p);
  52. --S.length;
  53. return OK;
  54. }
  55. void PrintStack(LinkStack S)
  56. {
  57. LNode *p = S.top;
  58. printf("由栈顶到栈底:");
  59. while (p)
  60. {
  61. printf("%d ",p->data);
  62. p = p->next;
  63. }
  64. printf("\n");
  65. }
  66. int main(void)
  67. {
  68. LinkStack LS;
  69. InitStack(LS);
  70. Push(LS,11);
  71. Push(LS,22);
  72. Push(LS,33);
  73. Push(LS,44);
  74. Push(LS,55);
  75. PrintStack(LS);
  76. SElemType e ;
  77. GetTop(LS , e);
  78. printf("栈顶元素是: %d\n",e);
  79. Pop(LS,e);
  80. PrintStack(LS);
  81. Pop(LS,e);
  82. PrintStack(LS);
  83. return 0;
  84. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/83025150

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。