数据结构与算法要点总结(3):栈、队列、优先队列

目录

1、总体概述

2、栈

合法出栈序列种数:

栈的应用:表达式的计算

中缀转后缀:

 应用后缀表示计算表达式的值:

3、队列

定义:

特性:先进先出(FIFO)

队列的数组存储表示 —— 顺序队列

非循环队列: 

 循环队列:

队列的链接表示 —— 链式队列

4、优先级队列 


1、总体概述

栈、队列也是线性结构,但是它们与线性表不同,区别在于:它们 限制存取位置

2、栈

最主要特点:后进先出(LIFO)

栈的数组表示——顺序栈

栈的链接表示——链式栈

关键其实就是实现top(), pop(), top(), empty()等操作。

合法出栈序列种数:

栈的应用:表达式的计算

算术表达式有三种表示:
中缀(infix)表示           <操作数> <操作符> <操作数>,如 A+B;

前缀(prefix)表示        <操作符> <操作数> <操作数>,如 +AB;

后缀(postfix)表示      <操作数> <操作数> <操作符>,如 AB+;

笔试需要学会三种表达式的相互转换:尤其是中缀转后缀

中缀转后缀:

先对中缀表达式按运算优先次序加上括号,再把操作符后移到右括号的后面并以就近移动为原则,最后将所有括号消去。

 应用后缀表示计算表达式的值:

从左向右顺序地扫描表达式,并用一个栈暂存扫描到的操作数或计算结果。

扫描中遇操作数则压栈;遇操作符则从栈中退出两个操作数,计算后将结果压入栈。

最后计算结果在栈顶。 

3、队列

定义:

队列是只允许在一端删除,在另一端插入的顺序表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear)。

特性:先进先出(FIFO)

队列的数组存储表示 —— 顺序队列

非循环队列: 

注意 rear 和 front 的位置

空队列:front==rear;

队满时:rear==maxSize - 1; (假溢出)

进队:新元素在rear处,rear++;

出队:取下标为front的元素,front++;

 循环队列:

解决假溢出的办法之一:将队列元素存放数组首尾相接,形成循环(环形)队列

队头、队尾指针加1时从maxSize-1直接进到0,可用语言的取模(余数)运算实现。

队头指针进1:  front = (front+1) % maxSize;
队尾指针进1:  rear = (rear+1) % maxSize;
队列初始化:front = rear = 0;
队空条件:front == rear;
队满条件:(rear+1) % maxSize == front;

队满实际是空了一格的:

队列的链接表示 —— 链式队列

注意rear指向的位置,与前面的顺序队列区分。

4、优先级队列 

优先级队列: 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。优先权是根据问题而定的,出现相同的优先级的元素时,按FIFO的方式处理。
 

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值