用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语言实现了简单的栈操作
最后,想感慨一下时间,好快啊,一个学期就又要结束了,今天看了一下,我申请的这个博客竟然有俩个月了,之前说好的坚持刷题来着,我真是个鸽王啊,王冰冰都没有我鸽
浙公网安备 33010602011771号