数据结构和算法学习--队列

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
与栈相反的是,队列是一种先进先出的线性表。
与栈相同的是,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础
队头是出队列的位置,队尾是入队列的位置。
我们的输入缓冲区接受键盘的输入就是按队列的形式输入和输出的,不然的话就很容易出问题。

队列既可以用链表实现也可以用顺序表实现,跟栈相反的是,栈一般我们用顺序表来实现,而队列我们常用链表实现,简称链队列。

创建一个队列需要完成两个任务:1.在内存中创建一个头节点,2.将队列的头指针和尾指针都指向这个生成的头节点,因为此时是空队列。

入队列的操作过程:将最后节点的指针从null指向要插入的节点,移动尾指针。

出队列操作是将队列中的第一个元素移出,队头指针不发生改变,改变头节点的next即可。如果原队列只有一个元素,那么我们就应该处理下队尾指针。

销毁一个队列:由于链队列建立在内存的动态区,因此当一个队列不再有用时,应当把它及时销毁掉,以免过多的占用内存空间。

用顺序存储结构来实现队列,内容不变,但是要移动指针,会产生假溢出(队列并没有真的满了,而且因为只能在末尾插入)问题。解决方法:循环队列。
循环队列的容量是固定的,并且它的对头的队尾指针都可以随着元素入出队列而发生改变,这样循环队列逻辑上就好像是一个环形存储空间。要注意的是,实际的内存中,不可能有真正的环形存储区,我们只是用顺序表模拟出来的逻辑上的循环。
当进行入队和出队时造成头指针和尾指针重合,则队列已满或队列已空。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值