会飞的蝌蚪君

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

栈和队列

栈:限定仅在表尾进行插入和删除操作的线性表。

栈又称为后进先出的线性表。简称LIFO结构

基本概念:栈顶(top)、栈底(bottom)、

栈的插入(push)操作又称作 进栈 也称作 压栈、入栈

栈的删除 (pop) 操作又称作 出栈 也称作 弹栈


栈的存储结构


栈的顺序存储结构

进栈、出栈 的操作 时间复杂度均为O(1)

两栈共享空间(前提:相同的数据类型的栈)

top1+1=top2

 

栈的链式存储结构

 

链栈不需要头结点

栈顶放在单链表的头部。

空栈:top = NULL

进栈、出栈 的时间复杂度均为O(1)

 对于链栈来说,基本不存在栈满的情况。一旦出现,计算机操作系统将面临死机崩溃。

================================

 

栈的作用----递归。。。。。

 

 

================================

栈的应用---四则运算表达式求值

中缀表达式,,即我们一般使用的计算式,,运算符号在数字之间

-----------------------
后缀表达式 ,,即数字在前,运算符在后,,计算机喜好的表达方式。。。

规则:数字进栈,遇到符号(符号前的两个栈顶数字)出栈计算,得到的结果进栈,依次进行。。。。

--------------------------------
中缀表达式到 后缀表达式的转换:

规则:从左到右遍历中缀表达式中的每个字符和数字,数字则输出,若是符号,则判断其与栈顶符号的优先级,

           若是右括号或优先级低于栈顶符号(加减低于乘除)的,则栈顶元素出栈并输出,并将当前符号进栈,一直到最后输出后缀表达式为止。。。。

 


===========================================


队列


队列:只允许在一端(队尾)进行插入操作,在另一端(队头)进行删除操作的线性表。

先进先出(FIFO)


---------------------


顺序队列基本概念:front rear

front指向对头元素,rear 指向队尾元素的下一个位置。

front = rear 时为空队列。。

假溢出问题,即队尾占满,队头有剩余空间。。。造成浪费,于是有了循环队列。。。

-----------------------

循环队列:把顺序队列头尾相接的顺序结构存储结构称之为 循环队列。。。

使得原本的顺序队列的删除和插入操作的时间复杂度由O(n)变为了O(1)。

 

两点:1)判断循环队列的空满问题

                 a。设置flag标志变量,

                      front = rear , flag = 0 空队列;

                      front = rear , flag = 1 满队列。

                 b。(rear+1)%QueueSize == front


           2)队列的长度问题

                 a。rear > front

                      (rear - front)%QueueSize

                 b。rear < front

                      (rear - front + QueueSize)%QueueSize

 

-----------------------------

队列的链式存储结构

简称:链队列

队头指针指向链队列的头结点

入队、出队


========================

总的来说,在可以确定队列长度最大值的情况下,建议使用循环队列,如果无法预估队列的长度的时候,建议使用链式队列。。。。

 


 

posted on 2017-10-30 23:34  会飞的蝌蚪  阅读(193)  评论(0)    收藏  举报