2 链式存储栈

Posted 蜗牛在奔跑

tags:

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

1. 若是栈中元素的数目变化范围较大或不清楚栈元素的数目,就应该考虑使用链式存储结构。人们将用链式存储结构表示的栈称作"链栈"。链栈通常用一个无头结点的单链表表示。

参考文档:

http://blog.csdn.net/hguisu/article/details/7674195

大话数据结构

2. 代码

 1 typedef struct StackNode
 2 {
 3     int data;
 4     struct StackNode *next;
 5 }StackNode,*LinkStackPtr;
 6 
 7 typedef struct LinkStack
 8 {
 9     LinkStackPtr top;
10     int count;
11 }LinkStack;
12 
13 //1. 初始化
14 LinkStack* init_linkStack()
15 {
16     LinkStack *s2=(LinkStack*)malloc(sizeof(LinkStack));
17     s2->top=NULL;
18     s2->count=0;
19     return s2;
20 }
21 
22 //2. 入栈
23 int push_linkStack(LinkStack*s2,int &e)
24 {
25     LinkStackPtr node=(LinkStackPtr )malloc(sizeof(StackNode));
26     node->data=e;
27     node->next=s2->top;
28     s2->top=node;
29     //cout<<s2->count;
30     s2->count++;
31 
32     return 0;
33 }
34 
35 //3. 出栈
36 int pop_linkStack(LinkStack*s2)
37 {
38     LinkStackPtr node=NULL;
39     //cout<<s2->top;
40     //cout<<s2->count;
41     if(s2->count==0)
42         return -1;
43         int a=s2->top->data;
44     s2->top=s2->top->next;
45     s2->count--;
46     
47     
48 
49     return a;
50 }
51 
52 //4. 遍历
53 int print_linkStack(LinkStack*s2)
54 {
55     LinkStack *ss=s2;
56     LinkStackPtr node=ss->top;
57     int k=ss->count;
58     while(k>0)
59     {
60         printf(" %5d",s2->top->data);
61         ss->top=ss->top->next;
62         k--;
63     }
64     return 0;
65 }

3. 测试代码

 

 1 int main()
 2 {
 3     LinkStack *s2;
 4     int elem=0;
 5     int ret=0;
 6     int t1=11;
 7     int t2=12;
 8     int t3=13;
 9     int t4=14;
10     int t5=15;
11 
12     //1. 初始化 LinkStack* init_linkStack()
13     s2=init_linkStack();
14     //cout<<s2->count;
15 
16     //2. 入栈int push_linkStack(LinkStack*s2,int e)
17     printf("\\n入栈:\\n");
18     ret=push_linkStack(s2,t1);
19     printf("%5d",s2->top->data);
20     ret=push_linkStack(s2,t2);
21     printf("%5d",s2->top->data);
22     ret=push_linkStack(s2,t3);
23     printf("%5d",s2->top->data);
24     ret=push_linkStack(s2,t4);
25     printf("%5d",s2->top->data);
26     ret=push_linkStack(s2,t5);
27     printf("%5d",s2->top->data);
28 
29     //cout<<s2->top;
30     //3. 遍历int print_linkStack(LinkStack*s2)
31     //ret=print_linkStack(s2);
32     
33     //4, 出栈 int pop_linkStack(LinkStack*s2,int &e)
34     printf("\\n出栈:\\n");
35     elem=pop_linkStack(s2);
36     printf(" %5d",elem);
37     elem=pop_linkStack(s2);
38     printf(" %5d",elem);
39     elem=pop_linkStack(s2);
40     printf(" %5d",elem);
41     elem=pop_linkStack(s2);
42     printf(" %5d",elem);
43     elem=pop_linkStack(s2);
44     printf(" %5d",elem);
45 
46 
47     cout<<endl<<"hello";
48     system("pause");
49     return 0;
50 }

 

4. 测试结果

 

以上是关于2 链式存储栈的主要内容,如果未能解决你的问题,请参考以下文章

栈的链式存储结构及应用(CJava代码)

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

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

栈的链式存储结构

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

栈的实现(c语言)--- 数据结构