18.11.24
(基於c語言,歡迎指正)
是一種先進先出(fifo)的線性表,只允許在隊尾進行插入,在隊首進行刪除
順序儲存的佇列寫起來跟順序實現的棧很像,也是採用陣列儲存資料,但是在不斷入佇列和出佇列過程中,資料會不斷後移,所以會造成大量的空間浪費,所以這裡我們採用迴圈佇列的形式
我們需要知道,迴圈佇列也是採用的陣列的形式,並且有兩個標記位置的整型變數front和rear,其中,front等於隊首元素的下標,rear等於隊尾元素下乙個位置的下標
也就是說,開始時,迴圈佇列長這樣
此時,我們可以發現,迴圈隊列為空,front等於rear
然後我們不斷的入佇列
最終,迴圈佇列滿了,長這樣
我們發現front還是等於rear,於是我們無法通過front和rear判斷迴圈佇列是否滿了嗎?
我們可以不讓他滿,讓他差一點滿
像這樣
於是,如果出現front等於rear,那麼佇列就是空的
那怎麼判斷隊滿呢
先假設佇列最大長度為maxsize
maxsize這裡等於5
我們可以發現
當front>=rear
就是這樣
佇列的長度為rear-front=5-1=4
當front
就是這樣
那麼此時,佇列長度為rear-front+maxsize=1-2+5=4
所以,結合上面兩種情況,我們可以得出求迴圈佇列長度的通用公式
注意這裡是取餘符號%,不是除法
這個公式子在寫迴圈佇列的時候會經常用到,很重要!!!
那麼我們開始寫迴圈佇列
標頭檔案,迴圈佇列的規模,結點的設定,老生常談的東西了
#include#include#define maxsize 10 //迴圈佇列最多有10-1=9個元素
typedef int qelemtype;
typedef structsqqueue;
一開始
front=rear=0對吧
int initqueue(sqqueue *q)
我們按照上面的公式
( rear - front + maxsize ) % maxsize
**實現
int length(sqqueue *q)
我們需要判斷佇列滿的情況,即rear+1==front
**如下
int enqueue(sqqueue *q,qelemtype e)
q->data[q->rear]=e;
q->rear=(q->rear+1)%maxsize;//rear向後移動一位,若到最後則移動至陣列頭
return 1;
}
我們需要判斷佇列是否空,即rear!=front才能出佇列
int dequeue(sqqueue *q,qelemtype *e)
*e=q->data[q->front];
q->front=(q->front+1)%maxsize;
return 1;
}
有兩種情況,如果front>rear,我們就要分段列印
void print(sqqueue *q)
i=0;
while(i!=q->rear)
}else
}printf("\n");
}
一些迴圈佇列要用到的基本函式就寫完了,下面我們在主函式中進行除錯
#include#include#define maxsize 10
typedef int qelemtype;
typedef structsqqueue;
int initqueue(sqqueue *q)
int length(sqqueue *q)
int enqueue(sqqueue *q,qelemtype e)
q->data[q->rear]=e;
q->rear=(q->rear+1)%maxsize;
return 1;
}int dequeue(sqqueue *q,qelemtype *e)
*e=q->data[q->front];
q->front=(q->front+1)%maxsize;
return 1;
}void print(sqqueue *q)
i=0;
while(i!=q->rear)
}else
}printf("\n");
}int main()
printf("佇列長度為:%d \n",length(&q));
print(&q);
printf("輸入要刪除的元素個數(從隊首進行刪除)\n");
scanf("%d",&num);
for(int i=0;i結果如下
線性結構 迴圈佇列的順序儲存實現
僅供參考 有錯誤望指出 直接寫迴圈佇列 建立 入列 出列 遍歷 佇列的長度 例如清空,銷毀 之類的操作都沒有寫 以後的有時間再補充 一次聽課,看書時,都沒有懂,為什麼,加那麼多 求餘的,下面想想寫寫,沒有加注釋.會補上的.include include include define ok 1 def...
順序儲存結構的迴圈佇列
第一點 rear指向的是隊尾的下乙個元素 為了不讓rear此時指向的是front 會留個空 讓rear指向乙個空位 第二點 因為留了個空位 所以當你要插入k個元素的時候 你就要給這個順尋儲存結構陣列長度設為k 1 第三點 你在返回隊尾 計算長度等等進行加減運算 的時候都要記得取模 在返回rear的時...
佇列 迴圈佇列 的順序儲存實現
佇列的順序儲存實現 1 佇列 一端進,另一端出 佇列由兩個引數決定,front 頭 rear 尾 頭指標指向頭乙個元素,尾指標指向指向最後乙個元素的下一儲存單元 若陣列長度為n,當元素個數為n 1時就認為佇列已滿。r指向最後乙個空的元素空間。出隊 頭指標往上移動,入隊 尾指標向上移動,故 靜態佇列只...