01.2 隊列

隊列(queue)

  • 基本介紹

    隊列是有序列表,可用數組、鏈錶實現,先入先出(FIFO)的原則。隊列只允許在表的前端(front)進行刪除操作,在表的後端(rear)進行插入操作。

  • 順序隊列

    使用兩個指針管理順序數組,隊頭指針(front)指向隊頭元素;隊尾指針(rear)指向下一個入隊元素的儲存位置。隊尾插入一個元素時,rear增1;隊頭刪除一個元素時,front增1。

    當front=rear時,隊列中沒有任何元素,稱為空隊列。當rear增加到指向分配的連續空間之外時,隊列無法再插入新元素,且無法利用已經出隊的隊列元素曾經佔用過的儲存單元。
    在这里插入图片描述

    溢出:

    • 下溢:隊列為空時,做出隊運算。常用作程序控制轉移的條件。
    • 真上溢:隊列滿,做入隊運算。應設法避免。
    • 假上溢:出隊元素佔用的空間無法利用,但尾指針超越上界無法入隊(不是真正的滿溢)。
  • 循環隊列

    在實際使用隊列時,為了使隊列空間能重複使用,一旦指針增1時超出了所分配的隊列空間,就讓它指向這片連續空間的起始位置構成一個循環。指針位置從从Max Size-1增1變到0,可用取餘運算來實現。

    當隊列為空時,有front=rear,當隊列滿時,也有front=rear。為了區別這兩種情況,規定循環隊列最多只能有Max Size-1個隊列元素,當循環隊列中只剩下一個空儲存單元時,隊列就已經滿了。因此,隊列為空條件是front=rear,隊列為滿條件是front=(rear+1)%Max Size。(因為添加一個數到隊列中後指針向後移動一位,當指針移動到最後一個空間時,隊列滿判斷邏輯將指針位置再次移動,以至於等於了front的位置。)

  • 數組實現

    順序隊列:

    //結構體實現順序隊列
    type Queue struct {
         
        maxSize int 
        array [5]int
        front int
        rear int
    }
    //實現隊列的入隊
    func (this *Queue)InQueue(val int)(err error) {
         
        //判斷隊列是否滿
        if this.rear == this.maxSize {
         //下標從0開始
            return errors.New("queue full")
        }
        this.array[this.rear] = val 
        this.rear++
        return
    }
    //實現隊列的出隊
    func (this *Queue)OutQueue()<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值