日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构--队列Queue--循环顺序队列

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构--队列Queue--循环顺序队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

針對順序隊列中的入隊操作:if 隊列沒滿,但是隊尾到達數組末尾了,隊列"滿"了,其實沒有滿,數據需要整體移至數組頭部,才可以繼續入隊。
為解決該問題,避免數據的挪移,有了循環順序隊列

循環順序隊列的思路:

  • 當隊列未滿,隊尾到達數組末尾了,讓 tail 的數組下標跳至0;
  • 判斷隊列是否滿,可以用隊列長度==容量,或者用求模運算(少用一個數組空間,(tail+1)%capacity = head 則隊列滿了)
    完成代碼見:https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/queue
  • 1. 主要修改

    入隊函數修改

    bool circularQueue<T>::enqueue(const T &data) {if(full())return false;else{if(empty()){m_pHead = m_pTail = 0;arrQ[0] = data;m_QueueLen++;}else if(m_pTail < m_capacity-1){arrQ[++m_pTail] = data;m_QueueLen++;}else //隊列沒滿,但是隊尾到達數組末尾了,讓tail變成-1{if(m_pTail + 1 == m_capacity)m_pTail = -1;arrQ[++m_pTail] = data;m_QueueLen++;}return true;} }

    打印函數修改

    void circularQueue<T>::print() const {if(empty())cout << "empty queue!" << endl;cout << "circularQueue from head to tail as follow:" << endl;int j = m_pHead;for(UINT i = 0; i < m_QueueLen; ){if(j == m_capacity) //打印時注意下標循環跳轉j = 0;cout << "No." << ++i << " elem is " << arrQ[j++] << endl;}cout << "--------------print end----------------" << endl; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的数据结构--队列Queue--循环顺序队列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。