- 链式栈
-
- 定义:用链式存储结构实现的栈
- 实现:单链表(通常)
- 结点类型:同单链表结点
- 操作在栈顶,常不设头结点
-
- 链栈操作
-
- 运算受限的单链表
- 易于实现,不作详细讨论
-
- 特点
-
- 链栈无栈满问题
- 链表头在栈顶
- 源代码:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define ElemType char typedef struct Node//定义栈存储结构 { ElemType data; Node *next; }node, *pnode; //定义栈结构 typedef struct Nstack //定义栈的维护结构 { pnode Top;//栈顶 pnode Bottom;//栈底 }Stack, *pStack; //初始化栈 void Nstack_Init(pStack s) { s->Top = (pnode)malloc(sizeof(node)); if (s->Top == NULL) { printf("栈创建失败\n"); } s->Top->next = NULL; s->Bottom = s->Top; printf("%p %p\n", s->Bottom, s->Top); } //入栈 void push_stack(pStack s, ElemType n) { pnode pnew = (pnode)malloc(sizeof(Node)); if (pnew == NULL){ exit(-1); } pnew->data = n; pnew->next = s->Top; s->Top = pnew; } //遍历栈并统计元素个数 void pop_stack(pStack s) { int c = 0; pnode pnew = s->Top; if (pnew->next == NULL)printf("栈为空\n"); while (pnew != s->Bottom) { printf("%c\n", pnew->data); pnew = pnew->next; c++; } printf("栈中现在共有元素: %d\n", c); } //移除栈顶元素 void delete_elem(pStack s) { if (s->Bottom == s->Top){ printf("空栈\n"); } pnode fg = s->Top; printf("移除的栈顶元素为:%c\n", fg->data); s->Top=s->Top->next; printf("当前元素位:%c\n",s->Top->data); /*pnode fgs = s->Top->next; printf("当前栈顶元素为:%c\n", fgs->data);*/ } //查找链栈元素 void seek_elem(pStack s, ElemType m) { if (s->Bottom == s->Top){ printf("空栈\n"); } pnode seek = s->Top; while(seek->data!=m) { seek= seek->next; } printf("找到元素 %c\n",seek->data); } Stack ss; int main() { Nstack_Init(&ss); push_stack(&ss, '1'); push_stack(&ss, '2'); push_stack(&ss, '3'); push_stack(&ss, '4'); pop_stack(&ss); delete_elem(&ss); pop_stack(&ss); seek_elem(&ss, '2'); system("pause"); return 0; }
-
C/C++语言之链栈(初始化,入栈,遍历,查找)
猜你喜欢
转载自blog.csdn.net/qq_39016425/article/details/84032319
今日推荐
周排行