




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C語言數(shù)據(jù)結(jié)構(gòu)算法基礎(chǔ)之循環(huán)隊(duì)列示例目錄說明示例代碼1.首先定義結(jié)構(gòu)體:2.定義各種算法:3.測試:4.最后的結(jié)果:
說明
循環(huán)隊(duì)列是一種先進(jìn)先出的,首尾相連的隊(duì)列。
大致的結(jié)構(gòu)如下圖:
用數(shù)組來抽象的表示一下的話,如下圖:
循環(huán)隊(duì)列有兩個(gè)指針指向數(shù)據(jù),上圖中的start和end就是那兩個(gè)指針,它們指向相同的位置,表示的是空,即隊(duì)列是空的。
隨著數(shù)據(jù)的放入,隊(duì)列一般有下面的兩種形式:
需要注意第二種形式,從圖上看end在start的前面了,但是因?yàn)檠h(huán)關(guān)系,前后并不重要。
另外需要考慮的是隊(duì)列滿的情況:
但這種情況存在一個(gè)問題,即空隊(duì)列和滿隊(duì)列沒有辦法區(qū)分了,end和start都指向了相同的位置。
為了解決這個(gè)問題,一個(gè)方法是空出一個(gè)位置不放數(shù)據(jù),當(dāng)end再加一個(gè)數(shù)據(jù)就等于start的時(shí)候就認(rèn)為隊(duì)列是滿的:
這時(shí)實(shí)際的數(shù)據(jù)長度就會比分配的少1。
下面是隊(duì)列中空和滿的判斷:
1.隊(duì)列為空時(shí):end==start
2.隊(duì)列為滿時(shí):(end+1)%size==start
這里的size是指分配的空間大小,而不是隊(duì)列長度,隊(duì)列的實(shí)際長度為(end-start+size)%size,最大長度是size-1
這也是因?yàn)橐紤]循環(huán)的關(guān)系,所以要加上%size這個(gè)操作。
示例代碼
1.首先定義結(jié)構(gòu)體:
//定義循環(huán)隊(duì)列
typedefstruct_LoopQueue{
intdata[8];//存放數(shù)據(jù)
intstart;//頭指針
intend;//尾指針
}LoopQueue;
2.定義各種算法:
#defineTRUE1
#defineFALSE0
#defineSIZE8
//初始化隊(duì)列
intinit(LoopQueue*lq){
lq-start=0;
lq-end=0;
returnTRUE;
//判斷隊(duì)列是否為空
intisEmpty(LoopQueue*lq){
if(lq-start==lq-end){
returnTRUE;
returnFALSE;
//判斷隊(duì)列是否為滿
intisFull(LoopQueue*lq){
if((lq-end+1)%SIZE==lq-start){
returnTRUE;
returnFALSE;
//獲取隊(duì)列的長度
intgetLength(LoopQueue*lq){
return(lq-end-lq-start+SIZE)%SIZE;
//插入數(shù)據(jù)
intpushQueue(LoopQueue*lq,intdata){
if(isFull(lq)){
printf("Queueisfull.\n");
returnFALSE;
lq-data[lq-end]=data;
lq-end=(lq-end+1)%SIZE;
returnTRUE;
//彈出數(shù)據(jù)
intpopQueue(LoopQueue*lq,int*data){
if(isEmpty(lq)){
printf("Queueisempty.\n");
returnFALSE;
*data=lq-data[lq-start];
lq-start=(lq-start+1)%SIZE;
returnTRUE;
//顯示隊(duì)列中的數(shù)據(jù)
voidprintQueue(LoopQueue*lq){
intindex;
intcount;
count=getLength(lq);
if(0==count){
printf("Nodata.\n");
return;
for(index=0;indexcount;index++){
printf("%d",lq-data[index]);
printf("\n");
return;
}
3.測試:
intmain()
intindex;
intnum;
//隊(duì)列測試代碼
LoopQueue*lq=(LoopQueue*)malloc(sizeof(LoopQueue));
init(lq);
printQueue(lq);
for(index=0;indexSIZE;index++){//注意這里要放8個(gè)數(shù)據(jù),但是實(shí)際上只能放7個(gè),所以最后一個(gè)會報(bào)錯(cuò)
pushQueue(lq,index);
printQueue(lq);
for(index=0;indexSIZE;index++){//同上,會打印一個(gè)錯(cuò)誤
if(popQueue(lq,num)){
printf("%d\n",
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療運(yùn)輸中心吸氧裝置故障響應(yīng)流程
- 建筑項(xiàng)目招投標(biāo)效率提升措施
- 2025高校教師心理健康培訓(xùn)心得體會
- 2025部編二年級家庭作業(yè)設(shè)計(jì)計(jì)劃
- 人教版七年級下冊英語教學(xué)計(jì)劃的課時(shí)安排
- 小區(qū)快遞點(diǎn)可行性研究報(bào)告
- 雞養(yǎng)殖投資計(jì)劃書
- 2025年電力電子器件項(xiàng)目可行性分析報(bào)告
- 個(gè)人試用期工作計(jì)劃
- 無資質(zhì)的中藥銷售合同6篇
- 貴州省往年氣象局筆試公共基礎(chǔ)題庫
- 模具維護(hù)保養(yǎng)培訓(xùn)
- 維護(hù)國家文化安全
- 美容師職業(yè)形象與禮儀考察試題及答案
- 兒童流行性感冒疫苗預(yù)防和抗病毒藥物應(yīng)用的實(shí)踐指南(2024版)解讀課件
- 高效時(shí)間管理培訓(xùn)的技巧
- 2025年河南鄭州航空港科創(chuàng)投資集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- (一模)青島市2025年高三年級第一次適應(yīng)性檢測英語試卷(含標(biāo)準(zhǔn)答案)+聽力材料
- 2025年形勢與政策-特朗普2.0時(shí)代中美關(guān)系及國際形勢變化-課件
- GB/T 28185-2025城鎮(zhèn)供熱用換熱機(jī)組
- 川教版(2019)小學(xué)信息技術(shù)四年級下冊 第二單元第3節(jié)《圖文并茂》教學(xué)設(shè)計(jì)及反思
評論
0/150
提交評論