数据结构期末复习(に)--链式栈定义及使用
生活随笔
收集整理的這篇文章主要介紹了
数据结构期末复习(に)--链式栈定义及使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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
?
轉載于:https://www.cnblogs.com/DSYR/p/9163050.html
總結
以上是生活随笔為你收集整理的数据结构期末复习(に)--链式栈定义及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate初探之单表映射——Hi
- 下一篇: 非常详尽的 Shiro 架构解析