自學資料結構 之陣列模擬佇列

2021-10-21 10:51:33 字數 1851 閱讀 7552

題目作為乙隻菜鳥,我偶然之間發現有人在csdn上分享學習心得,恰巧我在寫**的過程中遇到了一些問題,解決之後就準備寫成部落格做個記錄。

佇列,顧名思義就像人排隊一樣,先進先出,排在前面的人(資料)最先被取出

(1) 「push x」 – 向隊尾插入乙個數x;

(2) 「pop」 – 從隊頭彈出乙個數;

(3) 「empty」 – 判斷佇列是否為空;

(4) 「query」 – 查詢隊頭元素。

現在要對佇列進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。

輸入格式

第一行包含整數m,表示操作次數。

接下來m行,每行包含乙個操作命令,操作命令為」push x」,」pop」,」empty」,」query」中的一種。

輸出格式

對於每個」empty」和」query」操作都要輸出乙個查詢結果,每個結果佔一行。

其中,」empty」操作的查詢結果為「yes」或「no」,」query」操作的查詢結果為乙個整數,表示隊頭元素的值。

資料範圍

1≤m≤100000,

1≤x≤109,

所有操作保證合法。

輸入樣例:

10

push 6

empty

query

popempty

push 3

push 4

popquery

push 6

輸出樣例:no6

yes4

難度:簡單

時/空限制:1s / 64mb

#include

using

namespace std;

const

int n=

100010

;int q[n]

,hh,tt=-1

;void

push

(int x)

void

pop(

)void

empty()

void

query()

intmain()

÷ push

(x);

else

if(op==

"pop"

)pop()

;else

if(op==

"empty"

)empty()

;else

query();}}

**的邏輯很簡單,(至少個人感覺比雙鏈表簡單)可我發現了乙個問題,在empty函式裡if判斷的時候hh<=tt判斷為非空在我眼裡,如果hh==tt的話兩個指標重合,應該是空了啊

因為初始是-2,先加再賦值,所以相等的時候其實是佇列的最後乙個數,大於的時候才為空

這是乙個大佬告訴我的答案,可是剛開始我百思不得其解所以畫了個圖,畫的好難看

初始化佇列時tt=-1

當在隊尾加入乙個數x時先++再插入

如圖當hh==tt==1時候,依舊有乙個元素x,綜上所述,需要加=

資料結構 陣列模擬環形佇列

一 用陣列模擬佇列時,要考慮到復用的效果,所以用環形佇列來表示 二 陣列模擬環形佇列中 往佇列裡新增資料 思路 先判斷佇列是否為滿,rear 1 maxsize front 將資料加入佇列,arr rear n 將隊尾指標往後移,rear要取模,rear rear 1 maxsize 三 往佇列裡取...

資料結構 陣列模擬環形佇列

front指向佇列的第乙個元素,且front的初始值為0 若不留有空位置,rear指向佇列的末尾元素的下乙個位置,會導致隊滿的時候與隊空的時候判斷條件會是一樣的,都是rear front 當佇列滿時,條件是 rear 1 maxsize front 隊列為空的條件,rear front 這樣分析時,...

資料結構 陣列模擬實現佇列

佇列是乙個有序列表,可以用陣列或是鍊錶來實現,它遵循先進先出原則 佇列本身是有序列表,若使用陣列的結構來儲存佇列的資料 陣列實現佇列 class arrayqueue 判斷佇列是否滿 滿返回true,沒滿返回false public boolean isfull 判斷佇列是否為空他,頭尾相等為空 空...