C语言学习(十二)栈和队列

本文详细介绍了栈和队列这两种基本的数据结构。栈是一种后进先出(LIFO)的线性表,主要操作包括进栈和出栈。队列则是先进先出(FIFO)的线性表,支持在一端进行插入操作,在另一端进行删除操作。文章还讨论了循环队列的概念及其优势。
摘要由CSDN通过智能技术生成

栈是一个特殊的线性表,只能在一端操作;

栈顶(top):允许操作 的一端;

栈底(bottom):不允许操作的一端

1.栈:是限定仅在表尾进行插入和删除操作的线性表;又称后进先出的线性表。LIFO结构。      

栈顶top:允许插入和删除的一端;      

栈底bottom:另外一端;

2. 空栈:不含任何数据元素的栈;top=-1; 3. 栈的操作:    

进栈,压栈,入栈:栈的插入操作;    

出栈,弹栈:栈的删除操作;    

栈中有一个元素时,top=0;

注意:top为栈顶元素在数组中的位置,下标为0的一端作为栈底 

链式栈

栈只是栈顶作为插入和删除 操作,那么该将链表的头部还是 尾部作为栈顶呢?        

由于单链表有头节点,栈也 必须有栈顶,于是将两者合二为一 即将链表的头部作为栈顶,那么 链表的头节点就可以省去了。 那么当链栈为空时,top=NULL。

队列  

a .队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表;    

先进先出的线性表,FIFO。    

队头:允许删除的一端;  

队尾:允许插入的一端;    

 

c.循环队列:    

1.队列顺序存储的不足:

(1)队列元素在队头出列,即下标为0的位置。也就意味着队列出列后所有元素向前移动一个位置,以保证队头不为空。然而队头不一定在下标为0的位置。

(2)避免出现只有一个元素时,队头和队尾的重合处理麻烦,引入front指向队头元素,rear指向队尾元素的下一个位置;front=rear时,队列不是还剩一个元素,而是空队列;

(3)    当front指向数组中第i个位置,rear已经指向数组最后,但是front前还有空位置可以继续存放。因此将队尾的元素继续存放在数组前 i 个位置。

2.循环队列定义:    把头尾相接的顺序存储结构称为循环队列;         但是当循环队列数组存满时,front = rear与空队列的条件冲突,以此我们保留一个元素空间作为满的条件,即队列满时还有一个空闲单元。     

判断队列满的条件:             (rear+1)%QueueSize==front;         

当front = 0时,rear + 1 = SIZE + front 为满         

当fornt !=0时,rear + 1 = front 为满    

通用的计算队列长度公式为:             (rear-front+QueueSize)%QueueSize;         

当rear > front 时,length = rear -front         

当rear < front 时,length = SIZE - front + rear    

队列的链式存储其实就是线性表的单链表,只不过只能尾进头出。        

为了方便操作,我们将队头指针指向链队列的头结点,尾指针指向终端结点。空队列时,两者都指向头结点。    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

使劲编

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值