C語言實現佇列的順序儲存
阿新 • • 發佈:2019-01-08
佇列
#1. 佇列不得和棧比較,棧是一種先進後出的線性表,而佇列是一種先進先出 (first in first out,縮寫 FIFO) 的線性表.
#2. 它只允許在表的一端進行插入,而在另一端刪除元素。
#3. 在佇列中插入的一端為隊尾(rear),允許刪除的一端為隊頭(front)。
這裡我們實現佇列的順序儲存,
實現ADT中基本操作
Status InitQueue(SqQueueP &SQ)
Status QueueEmpty(SqQueueP SQ) Status EnQueue(SqQueueP &SQ,ElemType e)
ElemType DeQueue(SqQueueP &SQ) Status QueueTraverse(SqQueueP SQ){
實現如下
#include <stdio.h> #include <malloc.h> #define OK 1 #define Error 0 #define OVERFLOW -2 #define True 1 #define False 0 #define MAX_SIZE 15 typedef int Status; //函式執行結束狀態值 typedef struct{ int x; }Node; typedef Node * ElemType; typedef struct{ ElemType elem[MAX_SIZE]; int size; }SqQueue,*SqQueueP; Status InitQueue(SqQueueP &SQ){ SQ = (SqQueue*)malloc(sizeof(SqQueue)); SQ->size = 0; return OK; } Status QueueEmpty(SqQueueP SQ){ if(SQ->size==0) return True; return False; } Status EnQueue(SqQueueP &SQ,ElemType e){ SQ->elem[SQ->size] =e; SQ->size++; return OK; } ElemType DeQueue(SqQueueP &SQ){ ElemType e; if(SQ->size > 0){ e = SQ->elem[0]; for(int i = 0; i < SQ->size-1; i++){ SQ->elem[i] = SQ->elem[i+1]; } SQ->size--; } return e; } Status QueueTraverse(SqQueueP SQ){ for(int i = 0; i < SQ->size; i++){ if(SQ->elem[i]) printf("%d",SQ->elem[i]->x); else printf("NULL"); } return OK; } int main() { SqQueueP sq; InitQueue(sq); Node *pn1 = NULL; Node *pn2 = (Node *)malloc(sizeof(Node)); pn2->x = 1; EnQueue(sq,pn1); EnQueue(sq,pn2); EnQueue(sq,pn1); EnQueue(sq,pn2); EnQueue(sq,pn1); EnQueue(sq,pn2); while(!QueueEmpty(sq)){ Node *temppn = DeQueue(sq); if(temppn) printf(" %d ",temppn->x); else printf("NULL"); } free(pn2); return 0; }