佇列基本操作 出隊與入隊
阿新 • • 發佈:2019-02-15
#include<stdio.h> #include<stdlib.h> typedef struct QNode { //構造結點型別 int data; struct QNode *next; }*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void CreateQueue(LinkQueue &Q);//建立佇列 void EnQueue(LinkQueue &Q,int e);//插入元素進隊 void DeQueue(LinkQueue &Q);//刪除隊頭元素 void PrintfQueue(LinkQueue &Q);//輸出佇列 void DestroyQueue(LinkQueue &Q);//銷燬佇列 void main() { LinkQueue Qa; int m,n; CreateQueue(Qa); printf("Please input the total of inserting number:\n"); scanf("%d",&m); while(m--) { printf("Please input a number to insert:"); scanf("%d",&n); EnQueue(Qa,n); } PrintfQueue(Qa); DeQueue(Qa); PrintfQueue(Qa); DestroyQueue(Qa); } void CreateQueue(LinkQueue &Q) { Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) { printf("Fail to create queue!\n"); return; } Q.front->next=NULL; printf("Success to create queue!\n"); } void EnQueue(LinkQueue &Q,int e) { QueuePtr p; if(!(p=(QueuePtr)malloc(sizeof(QNode)))) { printf("Fail to insert element!\n"); return; } p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; printf("Success to insert element:%d\n",e); } void DeQueue(LinkQueue &Q) { QueuePtr q; int x; if(Q.rear==Q.front) { printf("the queue is empty!\n"); return; } q=Q.front->next; x=q->data; Q.front->next=q->next; if(Q.rear==q) Q.rear=Q.front; free(q); printf("Success to delete element:%d\n",x); } void DestroyQueue(LinkQueue &Q) { while(Q.front) { Q.rear=Q.front->next; free(Q.front); Q.front=Q.rear; } printf("Success to destroy queue!\n"); } void PrintfQueue(LinkQueue &Q) { QueuePtr p; if(Q.rear==Q.front) { printf("The queue is empty!\n"); return; } printf("The queue is:"); p=Q.front->next; while(p) { printf("%d",p->data); p=p->next; } printf("\n"); }