数据结构期末复习(に)--链式栈定义及使用

  1 #include <iostream>
  2 using namespace std;
  3 #define MAXSIZE 100  //链式栈存储空间初始分配大小
  4 #define OK 1        //链栈通常用单链表表示,节点结构与单链表相同。
  5 #define ERROR 0
  6 #define OVERFLOW -1
  7 typedef struct StackNode  //链栈结构
  8 {
  9     int data;    //节点数据
 10     struct StackNode *next;    //节点指针,指向下一个节点
 11 }StackNode,*LinkStack;
 12 
 13 //初始化,构造一个空栈
 14 int InitStack(LinkStack &s)
 15 {
 16     s=NULL;   //栈顶指针置空
 17     return 0;
 18 }
 19 
 20 //入栈操作
 21 int PushStack(LinkStack &s,int e)
 22 {
 23     LinkStack p = new StackNode;  //生成新节点
 24     p->data = e;  //将新节点数据域置为e
 25     p->next=s;   //将新节点插入栈顶
 26     s=p;        //修改栈顶指针为p
 27     return 0;
 28 }
 29 
 30 //出栈操作
 31 int PopStack(LinkStack &s)
 32 {
 33     LinkStack p = new StackNode;
 34     if(s==NULL)        //栈空
 35         return -1;
 36     p = s;        //用p临时保存栈顶空间,以备释放
 37     s = s->next;  //修改栈顶指针
 38     delete p;     //释放原栈顶元素的空间
 39     return 0;
 40 }
 41 
 42 //取栈顶元素
 43 int GetTop(LinkStack s)
 44 {
 45     if(s!=NULL)    //栈非空
 46         return s->data; //栈顶指针不变,返回栈顶元素的值
 47 }
 48 
 49 //输出栈
 50 void printstack(LinkStack s)
 51 {
 52     while(s!=NULL)    //栈非空
 53     {
 54         cout << GetTop(s) << " ";
 55         s=s->next;  //不要写成popstack(s),不然输出一次后就栈就空了,
 56                             //没法第二次输出。
 57     }
 58     cout << endl;
 59 }
 60 
 61 int main()
 62 {
 63     LinkStack s;
 64     InitStack(s);
 65     for (int i = 0; i < 10; ++i)
 66     {
 67         PushStack(s, i);
 68     }
 69     int a, b;
 70     cout << "1--print,2--pop,3--push,0--exit\n";
 71     for(int i = 0; i < 4; ++i)
 72     {
 73         cin >> a;
 74         if (a == 1)
 75         {
 76             printstack(s);
 77         }
 78         else if (a == 2)
 79         {
 80             cout << "元栈为:";
 81            printstack(s);
 82             PopStack(s);
 83             cout << "pop后栈为:";
 84             printstack(s);
 85         }
 86         else if (a == 3)
 87         {
 88             cout << "元栈为:";
 89             printstack(s);
 90             cout << "请输入要插入的数:";
 91             cin >> b;
 92             PushStack(s, b);
 93             cout << "插入后栈为:";
 94             printstack(s);
 95         }
 96         else if (a == 0)
 97         {
 98             return 0;
 99         }
100     }
101     return 0;
102 }
103                     

猜你喜欢

转载自www.cnblogs.com/DSYR/p/9163050.html