用C语言实现Stack

明天网上数据结构期中考,这个点复习还赶趟吗?

我从栈开始复习,先来说说栈的一些基本情况:

栈就是个容器,用来装东西的(东西指的是数据),它的本质就是:先放进去的东西,被压到底了,最后才能取出,如果它上面还有其它数据,则说明该东西不能被一次性取出来,而最后放进去的东西,最接近外面的世界了,所以可以被快速访问,栈就一个出口。

这好比有一个狭长的山洞,很窄,人是不能并排走的,只能排队,这天,一群人想进去探险,想进去看看里面有什么神奇宝贝,队长排在队伍的最前面,其他人挨个跟在了后面,走了有段时间了,他们最后发现山洞里面啥也没有,走了个寂寞,正在这是有个目光如炬的小伙发现角落里有条蛇,把队长吓得都要尿裤子了,那能怎么办,他最先进去的,又不能第一个出来,而排在队伍最后的小莫可淡定了,因为他离洞口最近,所以说小莫是第一个从山洞里逃出来的,那队长怎么办,哎,自求多福吧!

Stack的相关操作:

Push()    把数据压入栈中,你说压就压?谁啊你?在这步操作前,你要先检查栈满了吗?如果满了的话,就不能硬挤。如果栈没有满,数据可以入栈,并更新top指针(初始化栈,top = -1,更新指针,top++)

Pop()     把数据弹出栈,你说弹就弹?谁啊你?如果里面没有数据,弹什么?弹走鱼尾纹?在这步操作前,你要先检查栈是否为空,如果不为空,则可以弹出数据,然后top--;

Peek()    访回顶层元素,top不用动

IsEmpty()   检查栈是否为空 返回1,说明栈是空的,返回0,说明栈非空

IsFull()    检查栈是否满了,返回1,说明栈已经满了 ,返回0,说明栈还没满

栈是基于数组来实现的,所以说Push和Pop操作的时间复杂度为O(1)

 

栈在生活当中还是很常见的

比如说浏览器页面的前进和后退

反转单词或者数字

表达式在电脑中的计算

递归的实现

 

上代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int count = 0;
 4 #define MAXSIZE 10
 5 
 6 typedef struct stack{
 7      int top;
 8      int contain[MAXSIZE];
 9 }Stack;
10 void CreateEmptyStack(Stack* s)
11 {
12     s -> top = -1;
13 }
14 int IsEmpty(Stack* s)
15 {
16     if (s -> top == -1)
17         return 1;
18     else 
19         return 0;
20 }
21 int IsFull(Stack* s)
22 {
23     if (s -> top == MAXSIZE - 1)
24         return 1;
25     else
26         return 0;
27 }
28 
29 void Push(Stack* s,int value)
30 {
31     if (IsFull(s))
32         printf("Stack is Full!");
33     else
34         {
35             s -> top++;
36             s -> contain[s -> top] = value;
37         }
38     ++count;
39 }
40 
41 void Pop(Stack* s)
42 {
43     if (IsEmpty(s))
44         printf("Stack is Empty!");
45     else
46         {
47             printf("This value will be remove:%d",s -> contain[s -> top]);
48             s -> top--;
49         }
50     --count;
51     printf("\n");
52 }
53 
54 void PrintStack(Stack* s)
55 {
56     printf("Stack:");
57     for (int i = 0; i != count; ++i)
58     {
59         printf("%d ",s -> contain[i]);
60     }
61     printf("\n");
62 }
63 
64 int main()
65 {
66     Stack* s = (Stack*)malloc(sizeof(Stack));
67     CreateEmptyStack(s);
68     Push(s,1);
69     Push(s,3);
70     Push(s,6);
71     Push(s,9);
72     Push(s,2);
73     PrintStack(s);
74     Pop(s);
75     Pop(s);
76     PrintStack(s);
77 
78     return 0;
79 }

用C语言实现了简单的栈操作

最后,想感慨一下时间,好快啊,一个学期就又要结束了,今天看了一下,我申请的这个博客竟然有俩个月了,之前说好的坚持刷题来着,我真是个鸽王啊,王冰冰都没有我鸽

 

 

posted @ 2021-11-25 23:26  越菜越自信  阅读(315)  评论(0)    收藏  举报