数据结构-栈和队列
一、定义(区别:栈和队列的插入、删除运算的限定不同)
(1)栈:
后进先出:最后进的元素,最先出来。
(注:a1为表头)
(2)队列:队列主要用在和时间有关的地方
先进先出:先进的元素,先出来。
只允许一段进行插入,另一端进行删除
二、栈(详细内容)
(1)栈:主要用在函数调用和返回,数字转字符,表达式求值,走迷宫等等。
后进先出:最后进的元素,最先出来。
(注:a1为表头)
1.栈的存储方式:
栈的本质是线性表:因此分为顺序存储和链式存储
2.栈的元素:
开始时:栈中没有元素时,栈顶就是栈底
push入元素:栈顶栈底分离,整个栈的容量最大
元素出栈pop:栈顶下移。
3.栈的实现分类:
栈分为数组栈和链表栈。
数组栈:使用数组进行功能的模拟,实现较为快速和便利。
链表栈:使用链表的思路,较为麻烦,但稳定。
链表栈分为动态链表栈与静态链表栈
静态链表栈:给定了链表栈的大小
动态链表栈:自己开辟存储空间
(2)数组(顺序)栈:用一段连续的存储空间来存储栈中的数据元素
1.指针
顺序栈需要两个指针(栈顶指针base和栈顶指针top)
栈顶指针:指向栈顶元素的上一个元素(指向空)
栈底指针:首地址/基地址
(3)链表栈(链栈)
1.结构
结点:
还有一个永远指向栈头的指针top和一个计数器count
2.入栈
找到top所指向的空间
创建一个新的结点
将新的结点的next指针指向top指针指向的空间
再将top指针转移,并且指向新的结点
3.出栈
必须要在栈不为空的情况下才可以!!!!
三、队列
(1)链式队列(无法估算队列长度时使用)
(2)循环队列:(可以估算长度时使用)
front和rear相互追赶(即进队和出队)
(1)front=(rear+1)%MAXSIZE
(2)当(rear+1)%MAXSIZE=front时,队列满了。