資料結構(二)之順序佇列與鏈佇列
阿新 • • 發佈:2018-12-11
運用陣列結構來構建的線性佇列就是順序佇列。
本例實現了順序佇列的入隊、出隊、判斷隊空、初始化佇列、列印佇列等操作。
#include<iostream> using namespace std; const int m=1000; struct queue{ int data[m]; int front; int rear; }; void enqueue(queue &Q,int x); int delqueue(queue &Q); bool queueempty(queue Q); void initqueue(queue &Q); void printqueue(queue Q); int main(){ queue Q; /*以下是測試程式碼 initqueue(Q); cout<<queueempty(Q)<<endl; enqueue(Q,1); enqueue(Q,2); printqueue(Q); cout<<delqueue(Q)<<endl; printqueue(Q); */ return 0; } void enqueue(queue &Q,int x){ if((Q.rear+1)%m==Q.front) printf("隊滿\n"); else{ Q.data[Q.rear]=x; Q.rear=(Q.rear+1)%m; } } int delqueue(queue &Q){ int x=Q.data[Q.front]; Q.front=(Q.front+1)%m; return x; } bool queueempty(queue Q){ if(Q.front==Q.rear) return true; else return false; } void initqueue(queue &Q){ Q.front=0; Q.rear=Q.front; } void printqueue(queue Q){ for(int i=Q.front;i!=Q.rear;i++){ if(i>=m) i=i-m; printf("%d",Q.data[i]); } printf("\n"); }
運用鏈式結構來構建的線性佇列就是鏈佇列。
本例實現了鏈佇列的建立、出隊、入隊、列印佇列、判斷隊空等操作。
#include<bits/stdc++.h> using namespace std; struct Node{ int Data; struct Node *Next; }; struct QNode{ struct Node *rear; struct Node *front; }; typedef struct QNode *Queue; Queue CreateQueue(); int DeleteQ(Queue PtrQ); void InsertQ(int item,Queue PtrQ); void Print(Queue PtrQ); bool IsEmpty(Queue Q); int main() { /*以下是測試程式碼 Queue PtrQ=CreateQueue(); Print(PtrQ); InsertQ(1,PtrQ); InsertQ(2,PtrQ); InsertQ(3,PtrQ); Print(PtrQ); DeleteQ(PtrQ); Print(PtrQ); InsertQ(1,PtrQ); Print(PtrQ); DeleteQ(PtrQ); DeleteQ(PtrQ); DeleteQ(PtrQ); Print(PtrQ); */ return 0; } Queue CreateQueue(){ Queue PtrQ; PtrQ=(Queue)malloc(sizeof(struct QNode)); struct Node *rear; struct Node *front; rear =(Node*)malloc(sizeof(struct Node)); rear=NULL; front =(Node*)malloc(sizeof(struct Node)); front=NULL; PtrQ->front=front; PtrQ->rear=rear; return PtrQ; }; int DeleteQ(Queue PtrQ){ struct Node *FrontCell; int FrontElem; if(IsEmpty(PtrQ)){ printf("佇列空"); return 0; } FrontCell=PtrQ->front; if(PtrQ->front==PtrQ->rear) PtrQ->front=PtrQ->rear=NULL; else{ PtrQ->front=PtrQ->front->Next; } FrontElem=FrontCell->Data; free(FrontCell); return FrontElem; } void InsertQ(int item,Queue PtrQ){ struct Node *FrontCell; FrontCell=(Node*)malloc(sizeof(struct Node)); FrontCell->Data=item; FrontCell->Next=NULL; if(IsEmpty(PtrQ)){ PtrQ->front=FrontCell; PtrQ->rear=FrontCell; } else{ PtrQ->rear->Next=FrontCell; PtrQ->rear=FrontCell; } }; void Print(Queue PtrQ) { struct Node *Q1; Q1 = PtrQ->front; if (Q1 == NULL) { printf("NULL\n"); return; } while (Q1 != PtrQ->rear) { printf("%d ", Q1->Data); Q1 =Q1->Next; } printf("%d", Q1->Data); putchar('\n'); } bool IsEmpty(Queue Q){ return(Q->front==NULL); };