线性关系-队列初步了解

这两种结构也是线性关系的特殊的两种使用结构场景;
栈的特点就是,先进后出,或者说后进先出;
队列的特点就是,先进先出;

1.使用场景:

生活中例如排队呀,一般先进先出,类似的概念;
其次,例如磁盘缓冲区、操作系统的作业调度一般也是队列实现的,等;

2.例如:

a,b,c依次入队列,后续出也是a.b.c;
一般插入的存储入口叫做队尾,rear;
一般删除、查询的存储出口叫做对头,front;

3.队列的顺序存储结构:循环队列

本质上还是顺序表的实现,连续的存储单元,
单队列,一般插入存储单元时,直接新增,o(1),
但是出队列时,时间复杂度就是o(n)了,需要保证剩下的n-1个存储单元,数组下标还是从0开始,就要依次循环移动存储单元了,
所以用了循环队列,front和rear动态变化,不移动存储单元位置了,更改队列的记录值队头和队尾(数组的下标值),front和rear;
例如:a,b,c
依次入队列后,队尾a,rear = 0,队头front = 2,a出队列后,rear = 1,front不变,还是2;
插入、删除、查询操作,时间复杂度都是o(1);

空,front = rear;
队列慢,(rear+1)% size = front;
3.1队列的初始化
new一个空队列,front = rear=size -1;
3,2入队列操作
如果rear+1)% size = front,队列满,否则
入栈就是,数组下一个存储单元存储值即可,
rear = (rear+1)%size;
data[rear] = 入队列值;
3.3出队列操作
如果tfront = rear,空队列,抛出异常;
否则,只需取出栈定元素,
front= (front+1)%size;
return data[front];

4.队列的链式存储-链队列

链队列是以单链表的形式存在,进行插入、删除、查询,时间复杂度o(1)
空队列,front = rear=null;
4.1构造空队列
调用初始化方法即可,
创建空链节点a,a.next = null;front = rear = a;
4.2入队列
初始化一个节点a;复制当前新增内容以及next,
其次,rear.next = a,rear = a;
这就完成了在队尾后面新增一个节点
4.3出队列
如果front = rear.则是空队列
否则,暂存当前对头节点a;临时变量b存储当前节点值;
摘除出队列节点
front。next = a.next;
delete当前节点a,之后返回出栈值 b

总之,顺序队列和来链队列,时间复杂度都是o(1),
队列和栈的性能类似,只是循环队列不能像顺序栈那样共享空间,一个数组中不能存放两个循环队列

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值