100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 数据结构(严蔚敏)之四——链栈之c语言实现

数据结构(严蔚敏)之四——链栈之c语言实现

时间:2021-02-18 12:25:46

相关推荐

数据结构(严蔚敏)之四——链栈之c语言实现

编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:

(1)初始化链栈

(2)链栈置空

(3)入栈

(4)出栈

(5)取栈顶元素

(6)遍历链栈

链栈的功能实现:

#include <stdio.h>#include <malloc.h>#define ERROR 0#define OK 1#define TRUE 1#define FALSE 0typedef int ElemType;typedef int Status;typedef struct node{ElemType data;struct node *next;}StackNode;typedef struct{StackNode *top;}LinkStack;//初始化 void InitStack(LinkStack *s){s->top = NULL;puts("链栈初始化完成!");}//将链栈置空Status SetEmpty(LinkStack *s){StackNode *p = s->top;while(p){s->top = p->next;free(p);p = s->top;}puts("链栈已置空!");return OK;}//压栈Status Push(LinkStack *s, ElemType e){StackNode *p;p = (StackNode *)malloc(sizeof(StackNode));p->data = e;p->next = s->top;//把要压入的元素内存单元的next指针指向栈顶s->top = p;//栈顶指向新压入的元素内存单元return OK;}//弹栈Status Pop(LinkStack *s, ElemType *e){StackNode *p = s->top;if(s->top == NULL){puts("栈空, 不能进行弹栈操作!");return ERROR;}s->top = p->next;//让栈顶指针指向前一个元素,*e = p->data;free(p);//释放栈顶元素内存空间return OK;}Status GetTop(LinkStack *s, ElemType *e){if(s->top == NULL){puts("栈空, 无栈顶元素!");return ERROR;}*e = s->top->data;return OK;}//打印栈 Status PrintStack(LinkStack *s){StackNode *p;p = s->top;while(p){printf("%d ", p->data);p = p->next;}puts("");return OK;}

测试代码段

int main(){LinkStack s;InitStack(&s);int n, e;printf("请输入链栈长度:\n");scanf("%d", &n);puts("请输入要录入的数据:");while(n--){int x;scanf("%d", &x);Push(&s, x);}PrintStack(&s);GetTop(&s, &e);printf("栈顶元素为:%d\n",e);puts("8入栈后:");Push(&s,8);PrintStack(&s);Pop(&s, &e);printf("弹栈元素是:%d\n", e);puts("弹栈后:");PrintStack(&s);SetEmpty(&s);return 0;}

运行结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。