資料結構與演算法學習筆記 (7)--順序佇列的實現
阿新 • • 發佈:2019-01-04
一、背景介紹
佇列概念:列是限制在兩端進行插入操作和刪除操作的線性表,允許進行存入操作的一端稱為“隊尾”,允許進行刪除操作的一端稱為“隊頭”。當線性表中沒有元素時,稱為“空隊”。
特點 :先進先出(FIFO)。
二、佇列的順序儲存結構
typedef int datatype ; /*定義佇列中資料元素的資料型別*/ #define MAXSIZE 64 /*定義佇列的容量*/ typedef struct { datatype data[MAXSIZE] ; /*用陣列作為佇列的儲存空間*/ int front,rear ; /*指示隊頭位置和隊尾位置的變數*/ } sequeue ; /*順序佇列型別定義*/ sequeue *sq ; /*定義指向順序佇列的指標*/
三、相關函式實現
1.初始化佇列
void init_seqqueue(seq_pqueue *Q)
{
*Q=(seq_pqueue)malloc(sizeof(seq_queue));
if((*Q)==NULL)
{
perror("malloc");
exit(-1);
}
(*Q)->front=(*Q)->rear=MAXSIZE-1;
return;
}
2.判斷佇列是否滿
bool is_full_seqqueue(seq_pqueue q) { if((q->rear+1)%MAXSIZE == q->front) return true; else return false; }
3.判斷是否為空
bool is_empty_seqqueue(seq_pqueue q)
{
if(q->rear == q->front)
return true;
else
return false;
}
4.入隊
bool in_seqqueue(datatype data,seq_pqueue q) { //判斷佇列是否滿 if(is_full_seqqueue(q)){ printf("佇列已滿!\n"); return false; } //入對 q->rear=(q->rear+1)%MAXSIZE; q->data[q->rear]=data; return true; }
5.出隊
bool out_seqqueue(seq_pqueue q,datatype *D)
{
//判斷佇列是否空
if(is_empty_seqqueue(q)){
printf("佇列已空!\n");
return false;
}
//出隊
q->front=(q->front+1)%MAXSIZE;
*D=q->data[q->front];
return true;
}
6.遍歷輸出
void show_seqqueue(seq_pqueue q)
{
int i;
if(is_empty_seqqueue(q))
return;
//非空時,從對頭列印到隊尾
for(i=(q->front+1)%MAXSIZE;i!=(q->rear+1)%MAXSIZE;i=(i+1)%MAXSIZE)
{
printf("%d\t",q->data[i]);
}
printf("\n");
}