数据结构——链栈及其操作

Posted クトリ・ノタ・セニオリス

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——链栈及其操作相关的知识,希望对你有一定的参考价值。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 typedef int Status;
 5 typedef int ElemType;
 6 #define OK 1
 7 #define ERROR 0
 8 
 9 
10 //链栈的存储结构
11 typedef struct StackNode
12 {
13     ElemType data;                //数据域
14     struct StackNode *next;        //指针域
15 }StackNode,*LinkStack;
16 
17 
18 //初始化,构造一个空栈
19 Status InitStack(LinkStack &S)
20 {
21     S = NULL;
22     return OK;
23 }
24 
25 
26 //入栈
27 //在栈顶插入元素e
28 Status Push(LinkStack &S, ElemType e)
29 {
30     LinkStack p;            //生成新结点
31     p = new StackNode;        
32     p->data = e;
33     p->next = S;            //将新结点插入栈顶
34     S = p;                    //修改栈顶指针为p
35     return OK;
36 }
37 
38 
39 //出栈
40 //删除S的栈顶元素,用e返回其值
41 Status Pop(LinkStack &S, ElemType &e)
42 {
43     LinkStack p;
44     
45     if (S == NULL)        //栈空
46         return ERROR;
47 
48     e = S->data;    //将栈顶元素赋值给e
49     p = S;            //用p临时保存栈顶元素空间,以备释放
50     S = S->next;    //修改栈顶指针
51     delete p;        //释放原栈顶元素的空间
52     return OK;
53 }
54 
55 
56 //取栈顶元素
57 ElemType GetTop(LinkStack S)
58 {
59     if (S != NULL)    //栈非空
60         return S->data;        //返回栈顶元素的值,栈顶指针不变
61     else
62         return ERROR;
63 }
64 
65 
66 int main()
67 {
68     int n, x;
69     LinkStack S;
70 
71     InitStack(S);
72 
73     cout << "请输入链栈的元素个数:" << endl;
74     cin >> n;
75 
76     cout << "请依次输入" << n << "个元素:" << endl;
77 
78     while (n--)
79     {
80         cin >> x;
81         Push(S, x);
82     }
83 
84     cout << "元素依次出栈:" << endl;
85     while (S != NULL)
86     {
87         cout << GetTop(S) << " ";
88         Pop(S, x);
89     }
90 
91     system("pause");
92     return 0;
93 }

 

以上是关于数据结构——链栈及其操作的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第三章栈和队列-第一节:栈基本概念顺序栈和链栈基本操作

数据结构学习笔记——链式存储结构实现栈(链栈)

数据结构学习笔记——链式存储结构实现栈

链栈存储结构和基本运算

数据结构第五篇——栈和队列

数据结构第五篇——栈和队列