链栈(C语言实现)_Mr
- #include<stdio.h>
- #include<stdlib.h>
- #include<stdbool.h>
- typedef int DataType;
- typedef struct SNode
- {
- DataType data;
- struct SNode * next;
-
- }*LinkStack;
-
- bool Init_Stack(LinkStack * Top); // 栈初始化(不带头结点)
- bool Push_Stack(LinkStack * Top, DataType x); // 入栈
- bool Pop_Stack(LinkStack * Top, DataType * x); // 出栈
- int GetTop_Stack(LinkStack Top); // 获取栈顶元素
- bool Destroy_Stack(LinkStack * Top); // 销毁栈
- bool Traverse_Stack(LinkStack Top); // 遍历栈
- bool Empty_Stack(LinkStack Top); // 判栈空
-
- int main()
- {
- DataType x;
- LinkStack S;
-
- if(Init_Stack(&S))
- printf("链栈初始化成功!
");
- else
- printf("链栈初始化失败!
");
-
- Push_Stack(&S,1);
- Push_Stack(&S,4);
- Push_Stack(&S,7);
- Push_Stack(&S,2);
- Push_Stack(&S,5);
- Push_Stack(&S,8);
- Push_Stack(&S,3);
- Push_Stack(&S,6);
- Push_Stack(&S,9);
- printf("遍历链栈:");
- Traverse_Stack(S);
- printf("
");
-
- printf("栈顶元素:%%d
",GetTop_Stack(S));
-
- if(Pop_Stack(&S, &x))
- {
- printf("出栈成功!
");
- printf("您出栈的元素:%%d
",x);
- }
- else
- printf("出栈失败!
");
- printf("遍历链栈:");
- Traverse_Stack(S);
- printf("
");
-
- if(Destroy_Stack(&S))
- printf("销毁成功!
");
- else
- printf("销毁失败!
");
- printf("遍历链栈:");
- Traverse_Stack(S);
-
- return 0;
- }
-
- // 注意防止产生空指针
- bool Init_Stack(LinkStack * Top)
- {
- *Top = NULL; // 空栈时,栈顶指针指向空
- return true;
- }
-
- // 注意防止产生空指针
- bool Push_Stack(LinkStack * Top, DataType x)
- {
- printf("入栈元素:%%d
",x);
- LinkStack p = (LinkStack)malloc(sizeof(struct SNode));
- if(!p)
- {
- printf("申请空间失败!
");
- exit(-1);
- }
-
- p->data = x;
- p->next = *Top;
- *Top = p;
- return true;
- }
-
- // 注意防止产生空指针
- bool Pop_Stack(LinkStack * Top, DataType * x)
- {
- if(Empty_Stack(*Top))
- return false;
-
- LinkStack p = *Top;
- *x = p->data;
- *Top = p->next;
- free(p);
- p = NULL;
-
- return true;
- }
-
- int GetTop_Stack(LinkStack Top)
- {
- if(Empty_Stack(Top))
- return false;
-
- return Top->data;
- }
-
- // 注意防止产生空指针
- bool Destroy_Stack(LinkStack * Top)
- {
- LinkStack p = *Top;
-
- while(*Top)
- {
- p = p->next;
- free(*Top);
- *Top = p;
- }
-
- return true;
- }
-
- bool Traverse_Stack(LinkStack Top)
- {
- LinkStack p = Top;
-
- while(p)
- {
- printf("%%3d",p->data);
- p = p->next;
- }
- return true;
- }
-
-
- bool Empty_Stack(LinkStack Top)
- {
- if(Top==NULL)
- return true;
- else
- return false;
- }
推荐阅读