数据结构与算法分析-Chapter3

Chapter3-栈和队列

        1.栈和队列是两种常用的线性存储表。

        2.都限定关于插入和删除元素的操作在表的端点进行。栈只能在栈顶进行操作,队列仅能在队首和队尾进行操作。

3.1 栈

3.1.1 栈的基本概念

        1.只允许在一段插入和删除元素的线性表。

        2.允许插入和删除元素的一段成为栈顶top,另一端成为栈底bottom.

        3.遵循后进先出(LIFO)规则。

3.1.2 顺序栈——栈的数组表示

        在实现过程中主要通过向数组中依次插入元素即可(前提是不溢出)。需要注意的是:**因为采用数组的时候必须指定一个特定的大小size,则需要一个技术器count来根据插入和删除元素的情况进行判断是否溢出。同时这也是循序栈的一个缺点。

3.1.3 链式栈

        1.借助链表的方式解决了顺序栈空间不足的问题,可以根据实际需求进行动态扩容。

        2.在实现过程中与单链表的实现方式类似。栈底的后继是NULL,在栈顶需要一个top指针指向栈顶元素。
在这里插入图片描述

3.2 队列

3.2.1 队列的基本概念

        1.队列是只允许在一端对头front删除,一端插入队尾rear的线性表。

        2.遵循先进先出(FIFO)规则。

3.2.2 链队列

        链式队列在入队是无队满的问题,但有队空的问题。队空的条件为:

front == rear

在这里插入图片描述

3.2.3 循环队列——队列的顺序存储结构

        相较于链队列,循环队列的入队和出队规则以及状态判定都要变得更为复杂一些:


1.顺序队列的入队和出队原则

        (1)入队时将新元素按rear指示位置加入再将队尾rear自加一:rear = rear + 1

        (2)出队时将下表为front的元素去除,再将对头front自加一:front = front + 1

        (3)队满时再入队将溢出错误。

        (4)队空时再出队将队空处理。

        (5)解决假溢出方法:将队列元素存放数组首位相连,形成循环队列。


2.循环队列的计算判断

        对头front和队尾rear自加一时从maxSize - 1直接进到0,可用mod运算实现:

                (1)对头front自加一:front = (front +1) % maxSize.

                (2)队尾rear自加一:rear = (rear + 1) % maxSize.

                (3)队列初始化:front == rear == 0.

                (4)队空条件:count == 0front == rear.

                (5)队满条件:count == maxSize(rear + 1) % maxSize = front.
        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值