栈的顺序存储结构和链式存储结构的实现

Posted 2015-16

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的顺序存储结构和链式存储结构的实现相关的知识,希望对你有一定的参考价值。

偷个懒,整合一下书上代码就得到了

顺序存储:

 1 #include<iostream>
 2 #include<cstdlib>
 3 #define MaxSize 30
 4 
 5 using namespace std;
 6 
 7 struct SqStack {
 8     int data[MaxSize];
 9     int top;
10 }; 
11 
12 void InitStack(SqStack *& s) {
13     s = (SqStack *)malloc(sizeof(SqStack));
14     s->top = -1;
15 }
16 
17 void DestroyStack(SqStack *& s) {
18     free(s);
19 }
20 
21 bool StackEmpty(SqStack * s) {
22     return (s->top == -1);
23 }
24 
25 bool Push(SqStack *& s,int e) {
26     if(s->top == MaxSize - 1)
27         return false;
28     s->top++;
29     s->data[s->top] = e;
30     return true;
31 }
32 
33 bool Pop(SqStack *& s,int & e) {
34     if(s->top == -1)
35         return false;
36     e = s->data[s->top];
37     s->top--;
38     return true;
39 }
40 
41 bool GetTop(SqStack *& s,int & e) {
42     if(s->top == -1)
43         return false;
44     e = s->data[s->top];
45     return true;
46 }
47 
48 int main()
49 {
50     SqStack * s;
51     int e = 9;
52     InitStack(s);
53     cout<<StackEmpty(s)<<endl;
54     cout<<Push(s,5)<<endl;
55     cout<<GetTop(s,e)<<endl;
56     cout<<Pop(s,e)<<" "<<e<<endl;
57     DestroyStack(s);
58     return 0;
59 } 

链式存储:

 1 #include<iostream>
 2 #include<cstdlib>
 3 #define MaxSize 30
 4 
 5 using namespace std;
 6 
 7 struct LiStack {
 8     int data;
 9     struct LiStack * next;
10 }; 
11 
12 void InitStack(LiStack *& s) {
13     s = (LiStack *)malloc(sizeof(LiStack));
14     s->next = NULL;
15 }
16 
17 void DestroyStack(LiStack *& s) {
18     LiStack * p = s,* q = s->next;
19     while(q != NULL) {
20         free(p);
21         p = q;
22         q = p->next;
23     } 
24     free(p);
25 }
26 
27 bool StackEmpty(LiStack * s) {
28     return (s->next == NULL);
29 }
30 
31 void Push(LiStack *& s,int e) {
32     LiStack * p;
33     p = (LiStack *)malloc(sizeof(LiStack));
34     p->data = e;
35     p->next = s->next;
36     s->next = p;
37 }
38 
39 bool Pop(LiStack *& s,int & e) {
40     LiStack * p; 
41     if(s->next == NULL)
42         return false;
43     p = s->next;
44     e = p->data;
45     s->next = p->next;
46     free(p); 
47     return true;
48 }
49 
50 bool GetTop(LiStack *& s,int & e) {
51     if(s->next == NULL)
52         return false;
53     e = s->next->data;
54     return true;
55 }
56 
57 int main()
58 {
59     LiStack * s;
60     int e = 9;
61     InitStack(s);
62     cout<<StackEmpty(s)<<endl;
63     Push(s,5);
64     cout<<GetTop(s,e)<<endl;
65     cout<<Pop(s,e)<<" "<<e<<endl;
66     DestroyStack(s);
67     return 0;
68 } 

2020-05-25

以上是关于栈的顺序存储结构和链式存储结构的实现的主要内容,如果未能解决你的问题,请参考以下文章

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

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

C/C++数据结构-完整代码栈(栈的顺序存储,栈的链式存储,就近匹配,中缀表达式和后缀表达式)

数据结构&算法08-栈概念&源码

数据结构3. 栈和队列

栈的顺序结构和链式结构实现