自建演算法庫 順序環形佇列

2021-12-30 05:41:16 字數 3495 閱讀 4209

自建演算法庫——順序環形佇列

本次實踐將建立順序環形佇列的演算法庫,用於之後的工程中

實現源**如下:

1.squeue.h

[cpp]view plaincopy

*問題描述:定義順序環形佇列儲存結構,實現其基本運算,並完成測試。

要求:1、標頭檔案sqqueue.h中定義資料結構並宣告用於完成基本運算的函式。對應基本運算的函式包括:

voidinitqueue(sqqueue*&q);//初始化順序環形佇列

voiddestroyqueue(sqqueue*&q);//銷毀順序環形佇列

boolqueueempty(sqqueue*q);//判斷順序環形佇列是否為空

intqueuelength(sqqueue*q);//返回佇列中元素個數,也稱佇列長度

boolenqueue(sqqueue*&q,elemtypee);//進隊

booldequeue(sqqueue*&q,elemtype&e);//出隊

2、在sqqueue.cpp中實現這些函式

3、在main函式中完成測試,包括如下內容:

(1)初始化佇列q

(2)依次進佇列元素a,b,c

(3)判斷佇列是否為空

(4)出隊乙個元素

(5)輸出佇列中元素個數

(6)依次進佇列元素d,e,f

(7)輸出佇列中元素個數

(8)將佇列中所有元素刪除,並輸出序列

(9)釋放佇列

*輸入描述:無

*程式輸出:完成測試後的執行結果

#include

#include

#definemaxsize100

typedefcharelemtype;

typedefstruct

elemtypedata[maxsize];

intfront,rear;

}sqqueue;

voidinitqueue(sqqueue*&q);//初始化順序環形佇列

voiddestroyqueue(sqqueue*&q);//銷毀順序環形佇列

boolqueueempty(sqqueue*q);//判斷順序環形佇列是否為空

intqueuelength(sqqueue*q);//返回佇列中元素個數,也稱佇列長度

boolenqueue(sqqueue*&q,elemtypee);//進隊

booldequeue(sqqueue*&q,elemtype&e);//出隊

2.squeue.cpp

[cpp]view plaincopy

#include"sqqueue.h"

voidinitqueue(sqqueue*&q)//初始化順序環形佇列

q=(sqqueue*)malloc(sizeof(sqqueue));

q->front=q->rear=0;

voiddestroyqueue(sqqueue*&q)//銷毀順序環形佇列

free(q);

boolqueueempty(sqqueue*q)//判斷順序環形佇列是否為空

return(q->front==q->rear);

intqueuelength(sqqueue*q)//返回佇列中元素個數,也稱佇列長度

return((q->rear-q->front+maxsize)%maxsize);

boolenqueue(sqqueue*&q,elemtypee)//進隊

if((q->rear+1)%maxsize==q->front)

returnfalse;

q->rear=(q->rear+1)%maxsize;

q->data[q->rear]=e;

returntrue;

booldequeue(sqqueue*&q,elemtype&e)//出隊

if(q->front==q->rear)

returnfalse;

q->front=(q->front+1)%maxsize;

e=q->data[q->front];

returntrue;

3main.cpp

[cpp]view plaincopy

#include

#include"sqqueue.h"

intmain()

sqqueue*q;

elemtypee;

initqueue(q);//初始化佇列

printf("該佇列已初始化,");//判斷順序環形佇列是否為空

if(queueempty(q))

printf("為空\n");

else

printf("不為空\n");

if(enqueue(q,'a')==0)//依次進佇列元素abc

printf("該佇列已滿,進隊失敗\n");

printf("元素a進隊成功\n");

if(enqueue(q,'b')==0)

printf("該佇列已滿,進隊失敗\n");

printf("元素b進隊成功\n");

if(enqueue(q,'c')==0)

printf("該佇列已滿,進隊失敗\n");

printf("元素c進隊成功\n");

if(queueempty(q))//判斷順序環形佇列是否為空

printf("該隊列為空\n\n");

else

printf("該佇列不為空\n\n");

if(dequeue(q,e)==0)//出隊乙個元素

printf("此時隊列為空,出隊失敗\n");

printf("元素%c出隊成功\n",e);

printf("此時佇列中元素個數為:%d\n\n",queuelength(q));//輸出佇列中元素個數

if(enqueue(q,'d')==0)//依次進佇列元素def

printf("該佇列已滿,進隊失敗\n");

printf("元素d進隊成功\n");

if(enqueue(q,'e')==0)

printf("該佇列已滿,進隊失敗\n");

printf("元素e進隊成功\n");

if(enqueue(q,'f')==0)

printf("該佇列已滿,進隊失敗\n");

printf("元素f進隊成功\n");

printf("此時佇列中元素個數為:%d\n\n",queuelength(q));//輸出佇列中元素個數

printf("出隊序列為:");//將佇列中所有元素刪除並輸出序列

while(!queueempty(q))

dequeue(q,e);

printf("%c",e);

destroyqueue(q);//釋放佇列

printf("\n該佇列已銷毀\n");

return0;

執行結果截圖如下:

資料結構之自建演算法庫 順序環形佇列

本文針對資料結構基礎系列網路課程 3 棧和佇列中第9課時環形佇列的儲存及基本操作。下圖是資料儲存結構設計及各種操作實現的要點 順序環形佇列演算法庫採用程式的多檔案組織形式,包括兩個檔案 1.標頭檔案 sqqueue.h,包含定義順序環形佇列資料結構的 巨集定義 要實現演算法的函式的宣告 ifndef...

資料結構之自建演算法庫 順序環形佇列

本文針對資料結構基礎系列網路課程 3 棧和佇列中第9課時環形佇列的儲存及基本操作。下圖是資料儲存結構設計及各種操作實現的要點 順序環形佇列演算法庫採用程式的多檔案組織形式,包括兩個檔案 1.標頭檔案 sqqueue.h,包含定義順序環形佇列資料結構的 巨集定義 要實現演算法的函式的宣告 ifndef...

建立順序環形佇列演算法庫

標頭檔案 define maxsize 5 typedef char elemtype typedef struct sqqueue void initqueue sqqueue q 初始化順序環形佇列 void destroyqueue sqqueue q 銷毀順序環形佇列 bool queuee...