首页  

数据结构第三章栈和队列     所属分类 DS 浏览量 763
栈(Stack)
只允许在一端进行插入或删除操作的线性表

栈顶(Top)允许进行插入和删除的那一端
栈底(Bottom)不允许进行插入和删除的另一端
LIFO(Last In First Out)

顺序栈
顺序存储 
顺序栈的操作
判空 进栈 出栈 读取栈顶元素

共享栈
顺序栈的存储空间大小需要事先开辟好,
每个栈各自单独开辟存储空间的利用率不高

各个栈的存储空间共享


链式栈
1.链栈一般不存在栈满的情况
2.空栈的判定条件通常定为top==NULL

队列
只允许在一端进行插入,而在另一端进行删除的线性表
队头(Front):允许删除的一端,又称为队首
队尾(Rear): 允许插入的一端。
先进先出 First In First Out FIFO

顺序队列
用数组来实现  队首放在数组下标为0的位置

循环队列
把数组“掰弯”,形成一个环  首尾相连的顺序存储的队列 
入队  rear=(rear+1)%MaxSize
出队  front=(front+1)%MaxSize
 
入队  出队
如何判断队列是空还是满 
方法一
设置标志位flag,当flag=0且rear等于front时为队列空,当flag=1且rear等于front时为队列满

方法二
把front=rear 作为队空的判定条件
队列满时,数组中仍然保留一个空余单元 

链式队列
线性表的单链表,增加限制,只能表尾插入元素,表头删除元素
分别设置队头指针和队尾指针,队头指针指向头结点,队尾指针指向尾结点
链式队列的操作
1.入队
只能从队尾插入元素,队头删除元素
于是入队就是在队尾指针进行插入结点操作
链队的插入操作和单链表的插入操作是一致的

2.出队
出队就是头结点的后继结点出队,然后将头结点的后继改为它后面的结点

双端队列
允许两端都可以进行入队和出队操作的队列


栈的应用 括号匹配 表达式求值 递归 递归最重要的是递归式和递归边界 1.阶乘 时间复杂度:O(NlogN) 2.斐波那契数列 时间复杂度 O(2^n) 中缀表达式转换成后缀表达式 1.按运算符优先级对所有运算符和它的运算数加括号 2.把运算符移到对应的括号后 3.去掉括号

上一篇     下一篇
增广贤文全文及解释

数据结构第一章绪论

数据结构第二章线性表

程序员排行榜

数据结构之树

算法导论第二版中文目录