栈的表示和实现
Posted xiaoqiz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的表示和实现相关的知识,希望对你有一定的参考价值。
栈是仅能在表尾(栈顶)进行插入或删除操作的 线性表 后进后出
基本操作: 初始化,判断是否为空栈,取栈顶元素,插入新的栈顶元素。
非空栈中栈顶指针始终在栈顶元素的下一个位置
分为顺序栈:
#include<stdio.h> #include<stdlib.h> typedef struct{ int *base; int *top; int stacksize; }sqstack; void initial(sqstack &s){ s.base=(int *)malloc(10*sizeof(int)); if(s.base==0) exit(0); s.top =s.base; s.stacksize=10; } void push(sqstack &s){ int n,i=0; scanf("%d",&n); do{ scanf("%d",s.top++); i++; }while(i<n); } void pop(sqstack &s,int &e){ if(s.top==s.base) exit(0); e=*--s.top; } main(){ sqstack s; int e; initial(s); push(s); while(s.top-s.base>0){ //判断是否为空栈 pop(s,e); printf("%d",e);} }
链栈:
#include<stdio.h> #include<stdlib.h> typedef struct Lnode{ int data; struct Lnode *next; }Lnode, *Linkstack; // 链栈的结点定义和单链表一样,只不过它只能在栈顶操作 void initial(Linkstack s){ s=NULL; } void push(Linkstack &s, int e){ Linkstack p; p=(Linkstack)malloc(sizeof(Lnode)); p->data = e; p->next =s; s=p; } void pop(Linkstack &s,int &e){ Linkstack p; if(s->next==NULL) exit(0); p=s; e=p->data; s=s->next; free(p); } main(){ int e,n,i; Linkstack s; initial(s); scanf("%d",&n); while(n--){ scanf("%d",&i); push(s,i);} while(s->next!=NULL){ pop(s,e); printf("%d",e); } printf("\n"); }
链栈最后运行是有一个bug
以上是关于栈的表示和实现的主要内容,如果未能解决你的问题,请参考以下文章