3.栈的实现

Posted 喵小喵~

tags:

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

1.stack.h

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 
 4 #define N 100
 5 
 6 struct stack
 7 {
 8     int data[N];
 9     int top;//标识栈顶
10 };
11 
12 typedef struct stack Stack;//stack别名
13 
14 void init(Stack *p);//初始化
15 int isempty(Stack *p);//判断栈是否空
16 int isfull(Stack *p);//判断栈溢出
17 int gettop(Stack *p);//获取栈顶
18 void push(Stack *p, int key);//插入数据
19 void pop(Stack *p);//弹出一个数据
20 void show(Stack *p);//显示出来

2.stack.c

 1 #include "stack.h"
 2 
 3 void init(Stack *p)
 4 {
 5     p->top = -1;//代表为空
 6     memset(p->data, 0, sizeof(int)*N);//数据清零
 7 }
 8 
 9 int isempty(Stack *p)
10 {
11     if (p->top == -1)
12     {
13         return 1;//1为空
14     }
15     else
16     {
17         return 0;//0不为空
18     }
19 }
20 
21 int isfull(Stack *p)
22 {
23     if (p->top == N - 1)
24     {
25         return 1;//溢出
26     }
27     else
28     {
29         return 0;//没满
30     }
31 }
32 
33 int gettop(Stack *p)
34 {
35     return p->data[p->top];//获取栈顶
36 }
37 
38 void push(Stack *p, int key)
39 {
40     if (isfull(p) == 1)
41     {
42         return;
43     }
44     else
45     {
46         p->top += 1;
47         p->data[p->top] = key;
48     }
49 }
50 
51 
52 void pop(Stack *p)
53 {
54     if (isempty(p) == 1)
55     {
56         return;
57     }
58     else
59     {
60         p->top -= 1;
61     }
62 }
63 
64 void show(Stack *p)
65 {
66     if (isempty(p) == 1)
67     {
68         return;
69     }
70     else
71     {
72         printf("\n栈的数据是:\n");
73         for (int i = 0; i <= p->top; i++)
74         {
75             printf("%4d", p->data[i]);//打印栈的数据
76         }
77         printf("\n");
78     }
79 }

main.c

 1 #include "stack.h"
 2 
 3 void main()
 4 {
 5     int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 6 
 7     Stack mystack;
 8 
 9     init(&mystack);
10     
11     for (int i = 0; i < 10; i++)
12     {
13         push(&mystack, a[i]);
14     }
15     while (!isempty(&mystack))
16     {
17         printf("%d", gettop(&mystack));
18         pop(&mystack);
19     }
20 
21     system("pause");
22 }

 

以上是关于3.栈的实现的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

数据结构:栈-C语言实现(有图详讲带注解,适合入门学习)

Android Fragment 回栈的问题

python数据结构之栈的实现