佇列是最基礎的資料結構之一,通過構建鍊錶來模擬佇列,更加清晰的理解佇列的意義。
這裡是將佇列作為全域性變數來呼叫,因為不用全域性變數的時候出現好多錯誤,最後還是用了全域性變數。
上**:
#include using namespace std;
#include#includestruct linklist
;struct linkqueue
;linkqueue q;//這裡改為了全域性變數進行呼叫
linkqueue new_lq()//建立乙個帶頭結點的佇列(只是建立乙個頭節點)
linkqueue add_lq(int x)//向佇列中新增元素
void dis()//遍歷佇列元素
}int main()
執行結果
;//linkqueue q;//取消全域性變數
linkqueue new_lq()
linkqueue add_lq(linkqueue &q,int x)//這裡尤其要注意&符號,上午做了一上午不用全域性變數,
最後原因就是這裡出了了問題,
不加&符後面呼叫的函式對q的更改不會儲存吧應該,就是下乙個呼叫會把第乙個呼叫覆蓋
void dis()
}int main()
執行結果和上乙個**一樣,另外在補充乙個沒有&的執行結果:
鍊錶用結構體表示
struct linklist
;
模擬佇列
struct linkqueue
;
f指向隊頭,r指向隊尾
要知道鍊錶佇列的特徵每個元素都是由指標域的後繼指標連線,隊尾入隊、對頭出隊是我們手寫佇列的關鍵思想。
遍歷輸出:
void dis()
}
最最最最重要的一點:
linkqueue add_lq(linkqueue &q,int x)
別忘了加&!!!!
還有還有 定義出來的「指標」需要new出來或者用malloc才會分配記憶體空間(老師說噠)。
因為指標不會分配記憶體空間吧好像……
linklist *p;
p=new linklist;
用單向鍊錶模擬佇列
讓 rear 指標指向的節點的 next 指標指向新節點,然後讓 rear 指標指向下乙個節點。每次出佇列時,都讓 font 指標指向 head 節點的下乙個節點。最後從佇列中彈出 front 節點。資料結構 佇列 鍊錶 建立乙個鍊錶模擬佇列 實現 資料入佇列 資料出佇列 顯示佇列 package ...
(基礎) 陣列模擬鍊錶 棧 佇列
適用於鄰接表 儲存圖和樹 head 表示頭結點的下標 e i 表示節點i的值 ne i 表示節點i的next指標是多少 idx 儲存當你已經用到的那個點 int head,e n ne n idx 初始化 void init 將x插到頭結點 void add to head int x 將x插到下標...
模擬單向雙向鍊錶 模擬棧與佇列 KMP
單鏈表模擬單鏈表 include.h using namespace std const int n 1e5 10 int head,ne n e n idx int n head 指向頭節點 ne i 指向第i個節點的下乙個節點 e i 第i個節點的值 idx 儲存當前已經用到了哪個點 void ...