迴圈佇列基本操作及遍歷 C語言實現(陣列)

2021-10-09 15:12:57 字數 1853 閱讀 8969

與棧不同 佇列基本原則:

先入先出 **後出

約定乙個下標(rear)指向當前入隊元素要插入的下標 即最後乙個入隊元素下標的下一位

即 如果要加入新的元素x 執行elem[s->rear]=x

乙個下標(front)指向最先出隊的元素

typedef

struct

squene;

初始化 把front 和rear的值置為 0

squene *

initsquene()

考慮乙個maxsize 為5的情況 如果進行5次 入隊操作 5次出隊操作 那麼front和rear 都指向記憶體中最後乙個空間 無法再加入元素 但此時隊長為0

故引入迴圈佇列如圖

此時 再出現上述情況 (即s->rear=s->front=4)把 s->rear的值置為(s->rear+1)%max (此時為0)可以繼續進行入隊操作

出隊時對front的操作與此類似

但此時 無法區分空表 與滿表

故放棄乙個資料空間 (front的後一位 ) (順時針為前,逆時針為後)

則判斷滿表的條件為 (s->rear+1)%max==s->front

此時即使elem[s->rear]可用來存放元素 也不使用

入隊操作

int

enquene

(squene *s,

int e)

else

}

出隊操作

int

dequene

(squene *s,

int x)

else

}

想象多次入隊和出隊 front始終追趕rear 二者一致沿順時針方向運動 資料也就在他們之間 (front–rear 順時針) 故可以使用此迴圈來遍歷資料 此函式返回值為資料元素個數

int

linear

(squene *s)

return j;

}

總: 乙個簡單的程式

注意:最多儲存元素個數為max-1

#include

#include

#define max 5

typedef

struct

squene;

squene *

initsquene()

intenquene

(squene *s,

int e)

else

}int

dequene

(squene *s,

int x)

else

}int

linear

(squene *s)

puts(""

);return j;

}int

main()

break

;case2:

puts(""

);dequene

(s,temp)

;break

;case3:

puts(""

); temp=

linear

(s);

printf

("表長》:%d\n"

,temp)

;break;}

}//linear(s);

}

C語言實現 佇列及基本操作

佇列 一.佇列的定義及基本運算 棧是一種後進先出的資料結構,在實際問題中還經常使用一種 先進先出 的資料結構 即插入在表一端進行,而刪除在表的另一端進行,將這種資料結構稱為隊或佇列,把允許插 入的一端叫隊尾 rear 把允許刪除的一端叫隊頭 front 二.佇列的儲存實現及運算實現 與線性表 棧類似...

mysql迴圈佇列 C語言實現 迴圈佇列

include include include typedef struct queue int pbase 陣列 int front 頭 int rear 尾 rear不存放資料,所以rear前面的是最後乙個資料 queue void init queue queue pq bool full q...

順序佇列(迴圈佇列)基本操作實現 C語言

只寫了幾個主要的操作,銷毀,清空等沒有寫 include include define ok 1 define error 0 define queue size 100 typedef int status typedef int elemtype typedef struct qnode qno...