資料結構順序佇列的各種操作
阿新 • • 發佈:2019-01-28
/** 標頭檔案stu.h @jeasn168 */ #include<stdio.h> #include<string.h> #define MaxS 50 typedef struct { char name[MaxS]; char stuno[MaxS]; float score; }stu; //輸出stu void DispStu(const stu &s) { printf("Name:%s\n",s.name); printf("StuNo:%s\n",s.stuno); printf("Score:%f\n",s.score); } //比較stu型別 int isEqual(const stu &a,const stu &b) { if(strcmp(a.name,b.name)==0&&strcmp(a.stuno,b.stuno)==0&&a.score==b.score) return 1; else return 0; } /** 順序佇列SqQueue.cpp 隊尾插入,隊首刪除 @jeasn168 */ #include<stdio.h> #include<malloc.h> #include"stu.h" #define MaxSize 5//對的最大長度+1 typedef stu ElemType; //定義順序佇列結構 typedef struct { ElemType data[MaxSize]; int front; int rear; }SqQueue; //初始化 void InitQueue(SqQueue *&q) { q=(SqQueue *)malloc(sizeof(SqQueue)); q->front=q->rear=0; } //銷燬佇列 void DestroyQueue(SqQueue *&q) { free(q); printf("銷燬佇列!\n"); } //判斷對是否為空 int QueueEmpty(SqQueue *q) { return(q->front==q->rear); } //判斷對是否已滿 int QueueFull(SqQueue *q) { return((q->rear+1)%MaxSize==q->front); } //求佇列長度 int QueueLength(SqQueue *q) { int len=q->rear-q->front; return(len>0?len:MaxSize+len); } //入隊,從隊尾入隊,食堂排隊打飯 int enQueue(SqQueue *&q,const ElemType &e) { if(QueueFull(q)) { printf("隊滿!\n"); return 0; } q->rear=(q->rear+1)%MaxSize; q->data[q->rear]=e; return 1; } //出隊,從隊首出隊 int deQueue(SqQueue *&q,ElemType &e) { if(QueueEmpty(q)) { printf("隊已空!\n"); return 0; } q->front=(q->front+1)%MaxSize;//q->front指向未知量,q->front+1才是佇列的第一個元素!,出隊的元素還在陣列中。 e=q->data[q->front]; //q->front++; return 1; } //輸出佇列元素,從隊首到隊尾 void DispQueue(SqQueue *q) { int i,j; if(q->front<q->rear) { //隊首比隊尾小 for(i=q->front+1;i<=q->rear;i++) { DispStu(q->data[i]); printf("\n"); } } else { //對首比隊尾大 for(i=q->front+1;i<q->front+QueueLength(q)-q->rear;i++) { DispStu(q->data[i]); printf("\n"); } // printf("q->data[i]=:\n"); // DispStu(q->data[i-1]); printf("#######從陣列頭部開始############\n"); for(j=0;j<=q->rear;j++) { DispStu(q->data[j]); printf("\n"); } } } int main() { stu student[5]={{"Li","S12101",85},{"Liu","S12102",92.5},{"Wang","S12103",54},{"Huang","S12104",76},{"John","S12105",78}}; stu st1={"LiLy","S12108",85},st2; int t=sizeof(student)/sizeof(stu); int i=0; SqQueue *stuQueue; printf("初始化!\n"); InitQueue(stuQueue); printf("構建佇列\n"); for(i=0;i<t;i++) { enQueue(stuQueue,student[i]); } printf("隊長:%d\n",QueueLength(stuQueue)); printf("輸出佇列:\n"); DispQueue(stuQueue); printf("*****************\n"); printf("隊首出隊:\n"); deQueue(stuQueue,st2); DispStu(st2); printf("輸出出隊後的佇列:\n"); DispQueue(stuQueue); printf("隊長:%d\n",QueueLength(stuQueue)); printf("入隊一個元素:\n"); enQueue(stuQueue,st1); DispQueue(stuQueue); printf("隊長:%d\n",QueueLength(stuQueue)); DestroyQueue(stuQueue); return 0; }