#include <iostream> using namespace std; #define MAXSIZE 100 //链式栈存储空间初始分配大小 #define OK 1 //链栈通常用单链表表示,节点结构与单链表相同。 #define ERROR 0 #define OVERFLOW -1 typedef struct StackNode //链栈结构 { int data; //节点数据 struct StackNode *next; //节点指针,指向下一个节点 }StackNode,*LinkStack; //初始化,构造一个空栈 int InitStack(LinkStack &s) { s=NULL; //栈顶指针置空 return 0; } //入栈操作 int PushStack(LinkStack &s,int e) { LinkStack p = new StackNode; //生成新节点 p->data = e; //将新节点数据域置为e p->next=s; //将新节点插入栈顶 s=p; //修改栈顶指针为p return 0; } //出栈操作 int PopStack(LinkStack &s) { LinkStack p = new StackNode; if(s==NULL) //栈空 return -1; p = s; //用p临时保存栈顶空间,以备释放 s = s->next; //修改栈顶指针 delete p; //释放原栈顶元素的空间 return 0; } //取栈顶元素 int GetTop(LinkStack s) { if(s!=NULL) //栈非空 return s->data; //栈顶指针不变,返回栈顶元素的值 } //输出栈 void printstack(LinkStack s) { while(s!=NULL) //栈非空 { cout << GetTop(s) << " "; s=s->next; //不要写成popstack(s),不然输出一次后就栈就空了,没法第二次输出。 } cout << endl; } int main() { LinkStack s; InitStack(s); for (int i = 0; i < 10; ++i) { PushStack(s, i); } int a, b; cout << "1--print,2--pop,3--push,0--exit\n"; for(int i = 0; i < 4; ++i) { cin >> a; if (a == 1) { printstack(s); } else if (a == 2) { cout << "元栈为:"; printstack(s); PopStack(s); cout << "pop后栈为:"; printstack(s); } else if (a == 3) { cout << "元栈为:"; printstack(s); cout << "请输入要插入的数:"; cin >> b; PushStack(s, b); cout << "插入后栈为:"; printstack(s); } else if (a == 0) { return 0; } } return 0; }
数据结构期末复习(に)--链式栈的定义及使用
猜你喜欢
转载自blog.csdn.net/qq_41684261/article/details/80640471
今日推荐
周排行