栈
定义:一种只能在一段进行插入或删除操作的线性表,表中允许进行插入、删除操作的一段称为栈顶,另一端则为栈底。
原则:先进后出
定位:栈顶位置是动态的,当栈中没有数据元素时,称为空栈。
由操作系统自动分配 ,存放函数的参数值,局部变量的值等。
他们通常都是被调用时处于存储空间中,调用完毕立即释放;
图像表示:
实例:假设有四个元素a/b/c/d进栈,那么他们的出栈顺序可以是:
⑴abcd ⑵abdc ⑶acbd ⑷adcb ⑸bacd ⑹dcba ⑺badc
⑻bcad ⑼bcda ⑽bdca ⑾cbad ⑿cbda ⒀cdba ⒁acdb
基本运算:InitStack(&s):初始化一个空栈。
DestroyStack(&s):销毁栈并释放空间
StackEmpty(&s):判断栈是否为空,返回真假
Push(&s,e):进栈,将元素e入栈
Pop(&s,&e):出栈,退出栈顶元素赋予e
GetTop(s,&e):取出栈顶元素。返回当前栈顶元素给e
队列
定义:是有限个同类型数据元素的线性序列,在表的一端(队尾)进行插入,另一端(队首)删除。
原则:先进先出
图像表示:
实例:假设有四个元素a/b/c/d进栈,那么他们的出栈顺序是:a/b/c/d
基本运算:InitQueue(&q):初始化一个空队列。
DestroyQueue(&q):销毁队列并释放空间
QueueEmpty(&q):判断队列是否为空,返回真假
enQueue(q):进队列,将元素e入队列作为队尾元素
deQueue(&q,e):出队列,退出队列并将该元素赋予e
分类:
顺序队列:
顺序队列操作:
循环队列:
出现原因:在队列的入队与出队示意图中,给队列分配的存储空间只有4个,如果abcd全部出队,那么就只有队尾的e和e下面的存储空间,如果新的元素f想要进入,因为e还没有出去,所以f无法进入,但是e下面却剩余了很大的存储空间,即实际空间并没有占满。这种现象就是“假溢出”。而为了解决假溢出,就出现了循环队列。
循环队列操作:
链队列:使用一个带有头结点的单链来表示队列
链队列的操作:
总结:栈和队列的区别是啥? 吃多了拉就是队列;吃多了吐就是栈(在网上找到的精辟回答)