與棧不同 佇列基本原則:
先入先出 **後出
約定乙個下標(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...