資料結構與演算法之順序佇列

2021-09-28 14:27:22 字數 3504 閱讀 8197

本程式能夠對使用者的輸入做了合理的處理使得使用者想要刪除超過本佇列的最大容量時會提醒使用者該操作錯誤,從而讓使用者重新輸入,更人性化的提供了兩種刪除佇列元素的方法供使用者選擇…

/*

完成對佇列的初始化 、判斷佇列的空和滿、插入元素、獲取佇列的首元素、刪除元素、銷毀佇列、

返回佇列的長度、列印佇列

*/#include

#include

using

namespace std;

#define maxsize 100

typedef

int datatype;

typedef

struct queue squeue;

//佇列的初始化

bool

initsq

(squeue* sq)

//判斷佇列是否為空

bool

emptysq

(squeue* sq)

return

false;}

//判斷佇列是否為滿

bool

fullsq

(squeue* sq)

return

false;}

//插入元素

bool

insertsq

(squeue* sq,

int&element)

sq->arr[sq-

>rear]

= element;

//將元素插入到對應的位置

sq->rear++

;//插入後為指標向後移動一位

return

true;}

//列印佇列元素

void

printsq

(squeue* sq)

cout << endl;

return;}

//獲取佇列的首元素

bool

getsqfirst

(squeue* sq,

int&firstelement)

else

}//刪除佇列裡元素,將後面的元素向前面移動

bool

delsq1

(squeue* sq,

int&element)

element = sq-

>arr[sq-

>front]

;for

(int i = sq-

>front +

1; i < sq-

>rear; i++

) sq-

>rear--

;return

true;}

//刪除前面的元素front向後移動,但是可能會導致假溢位

bool

delsq2

(squeue* sq,

int&element)

element = sq-

>arr[sq-

>front]

; sq-

>arr[sq-

>front]

= sq-

>arr[

++sq-

>front]

;return

true;}

//返回佇列的長度

intlensq

(squeue* sq)

//銷毀佇列

void

destrosq

(squeue* sq)

intmain

(void

)else

int n;

//使用者想要插入的個數

cout <<

"請輸入你想要插入的元素的個數: "

; cin >> n;

//直到使用者輸入正確的個數才能進行下面的程式

while(1

)else

}int element=0;

// 使用者要插入的元素

//插入元素

for(

int i =

0; i < n;i++

)else

}//列印佇列

printsq

(sq)

;//獲取佇列的首元素

int firstelement;

//首元素if(

getsqfirst

(sq,firstelement)

)else

cout << endl;

cout <<

"下面開始刪除元素! "

<< endl;

int chose;

cout <<

"請輸入你想要刪除的方式: 1後面的元素覆蓋前面的值, 2直接刪除前面的值(可能會導致假溢位)"

<< endl;

cout <<

"注意: 惡意輸入會導致程式停止執行!!!!"

<< endl;

cin >> chose;

int many=0;

//要刪除元素的個數

cout <<

"請輸入你想要刪除的元素的個數: "

; cin >> many;

while(1

)else

}for

(int m=

0; m < many; m++

)else

break

;case2:

//刪除前面的元素front向後移動,但是可能會導致假溢位if(

delsq2

(sq, element)

)else

break

;default

: cout <<

"惡意輸入!!!!!!!!!!,程式結束!!!"

<< endl;

system

("pause");

return1;

}}printsq

(sq)

;//返回佇列的長度

int len =

lensq

(sq)

; cout <<

"該佇列的長度是: "

<< len << endl;

//銷毀佇列

cout <<

"銷毀佇列中... "

<< endl;

destrosq

(sq)

;printsq

(sq)

;system

("pause");

return0;

}

使用者惡意選擇刪除程式時:

使用者惡意選擇刪除元素長度超過佇列長度是:

第二種刪除方式同樣具有以上功能:

資料結構與演算法 順序佇列

queue.h ifndef queul h define queue h includeusing namespace std templateclass queue templatequeue queue int queuecapacity capacity queuecapacity temp...

資料結構之佇列 順序佇列

列的特點是 先到先辦 fifo first in first out 可將佇列形象地比作管道 模擬買火車票的佇列實現 include include define n 100 最大有多少個 define datatype char 定義資料型別,定義佇列,struct queue typedef s...

資料結構 佇列之順序佇列

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為...