数据结构与算法5(栈和队列)

本文详细介绍了栈和队列这两种基本的数据结构,包括它们的定义、操作规则(如入栈/出栈、入队/出队),以及顺序存储结构(如顺序栈和链栈)的实现。同时涵盖了栈与递归的关系以及队列的常见表示和处理方法。
摘要由CSDN通过智能技术生成

栈和队列是限定插入和删除只能在表的“端点”进行的线性表

​栈 (stack)是限仅在一端(通常是表尾)进行插入和删除操作的线性表。又称为后进先出 (Last In First Out) 的线性表,简称LIFO结构。

​表尾(即an端)称为栈顶 Top;表头(即a1端)称为栈底Base

​插入元素到栈顶(即表尾)的操作,称为入栈。

​从栈顶(即表尾)删除最后一个元素的操作,称为出栈。

5319a553293240b1a7f73a4aa2107d13.jpeg

 

队列插入也只能在最后一个元素,删除只能删第一个元素

​栈的顺序存储结构—顺序栈

​栈的链式存储结构—链栈

​顺序栈

​设top指针指示真正的栈顶元素之上的下标地址。

​设base指针指示栈底元素地址。

​用stacksize表示栈可使用最大容量。

ca2dac20f66246109162532d02aadfb0.jpeg

 空栈:base=top

栈满:top-base=stacksize

 

上溢(overflow):栈已经满,又要压入元素

下溢(underflow):栈已经空,还要弹出元素

 

顺序栈算法实现

初始化

266613cfdf4345ca8e68868bf119fb22.jpeg

 清空顺序栈

8e54644e088c494d940574cfc9dfafc8.jpeg

 销毁顺序栈

d1eac1723ab9432ea01ea275e1d7a0de.jpeg

 入栈

ca21381612fb4b8e998552061f412c8a.jpeg

出栈

 dfe0bd23f51f4ac6b1b311f552dc0e5e.jpeg

 链栈的算法实现

5955c2a74a6843ea82c60fcab65103d3.jpeg

 入栈

30712f6ec33f4054959da30851d49563.jpeg

 出栈

71bac6b45c4046d798a9285b09335b5b.jpeg

 栈和递归

递归的定义

7baf1b7b277d4c1294d88b47174d0cf2.jpeg

901ddfaa4ef14610a04d4baf62928c63.jpeg 

 队列的表示和操作

 

表尾即an端,称为队尾;表头即a1端,称为队头。

插入元素称为人队; 删除元素称为出队

队列的存储结构为链队或顺序队

afe19ac4600f4b1ba019429325e18f1e.jpeg

 base是地址指向数组首元素

front,rear虽然称做指针,但不是指针变量,是用来表示数组中元素位置的下标,

96168105a7e2433ea79488980ab772ee.jpeg

16fa5ed82af84672ad8529752cdf6410.jpeg 

 假溢出

3d3eadd8af41465fafb5c6fa653e998f.jpeg

9c0a200cc3d042668eb88b8bdb67ab8e.jpeg 

 队空和队满都是front=rear解决方法

少用一个空间

则队空:front==rear。

队满:(rear+1)%MAXQSIXZE==front

 

队列初始化

91408754747a4b09af27b4e5f617097a.jpeg

 求长度

af41bc0e5cf64286abfa8b63da6054d7.jpeg

 入队

e14bf7634f4b41788cb536b56dc57b52.jpeg

 出队

a1fc0a4d1bbf417894c09100b0c1cec0.jpeg

 

链队列

803f93007198490f9a99bbb4cc67102d.jpeg

 初始化

04679b6daeed4fd8ad0a2bb7282a2b5c.jpeg

 

销毁

40023fa28468436d91f2dc931b3d3bc7.jpeg

 

入队

659dfb9fe5924f92a4e8ed2652d5a1bf.jpeg

 

出队

e4da54cc01804877a78c5dfbb67dd809.jpeg

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值