資料結構之順序佇列的操作(C語言)
阿新 • • 發佈:2019-01-25
#include <stdio.h> #include <stdlib.h> #include <string.h> #define QUEUELEN 15 //資料結構的定義 typedef struct { char name[10]; int age; }DATA; typedef struct { DATA data[QUEUELEN]; int head; int tail; }SQType; //佇列的初始化 SQType *SQTypeInit() { SQType *q; if(q=(SQType *)malloc(sizeof(SQType))) { q->head=0; q->tail=0; return q; } else { return NULL; } } //判斷空佇列 int SQTypeIsEmpty(SQType *q) { int temp; temp=q->head==q->tail; return temp; } //判斷滿佇列 int SQTypeisFull(SQType *q) { int temp; temp=q->tail==QUEUELEN; return temp; } //清空佇列 void SQTypeClear(SQType *q) { q->head=0; q->tail=0; } //釋放空間 void SQTypeFree(SQType *q) { if (q!=NULL) { free(q); } } //入隊 int InSQType(SQType *q,DATA data) { if (q->tail==QUEUELEN) { printf("佇列滿鳥。。。"); return 0; } else { q->data[q->tail++]=data; return 1; } } //出佇列 DATA *OutSQType(SQType *q) { if(q->head==q->tail) { printf("親,佇列是空的。。。"); return NULL; } else { return &(q->data[q->head++]); } } //讀取節點的資料 DATA *PeekSQType(SQType *q) { if(SQTypeIsEmpty(q)) { printf("\n這個佇列是空的啊。。。\n"); return NULL; } else { return &(q->data[q->head]); } } //計算佇列的長度 int SQTypeLen(SQType *q) { int temp; temp=q->tail-q->head; return temp; } void main() { SQType *stack; DATA data; DATA *data1; stack=SQTypeInit(); printf("入隊操作:\n"); printf("輸入姓名 年齡進行入隊操作:"); do { scanf("%s%d",data.name,&data.age); if (strcmp(data.name,"0")==0) { break; } else { if (SQTypeisFull(stack)) { break; } InSQType(stack,data); } }while(1); do { if (SQTypeIsEmpty(stack)) { break; } printf("出隊操作:按回車鍵進行出棧操作:\n"); getchar(); data1=OutSQType(stack); printf("出棧的資料是(%s,%d)\n",data1->name,data1->age); } while (1); getchar(); SQTypeFree(stack); }