小白的資料結構程式碼實戰(5)----佇列順序結構
阿新 • • 發佈:2018-12-15
//Author:張佳琪 #include <stdio.h> #include <stdlib.h> typedef int QElemType; typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void init(LinkQueue *q) { q->front=q->rear=(QueuePtr)malloc(sizeof(QNode)); q->front->next=NULL; } void insert(LinkQueue *q,QElemType x) { QueuePtr temp=(QNode *)malloc(sizeof(QNode)); if(temp!=NULL) { temp->data=x; temp->next=NULL; q->rear->next=temp; q->rear=temp; } } void create(LinkQueue *q) { init(q); QElemType x; while(scanf("%d",&x)) { if(x==0) break; insert(q,x); } } void deleteq(LinkQueue *q,QElemType *e) { if(q->rear==q->front) return; QueuePtr temp=q->front->next; if(temp==q->rear) { q->rear=q->front; } *e=temp->data; q->front->next=temp->next; free(temp); } void clear(LinkQueue *q) { if(q->rear==q->front) return; QueuePtr temp=q->front->next; while(temp!=NULL) { QueuePtr pr=temp; temp=temp->next; free(pr); } q->rear=q->front=NULL; } int get_length(LinkQueue *q) { if(q->front==q->rear) return 0; QueuePtr temp=q->front; int i=0; while(temp!=q->rear) { i++; temp=temp->next; } return i; } int is_empty(LinkQueue *q) { if(q->rear==q->front) return 1; else return 0; } void show(LinkQueue *q) { if(q->rear==q->front) return; QueuePtr temp=q->front->next; while(temp!=NULL) { printf("%d ",temp->data); temp=temp->next; } printf("\n"); } int main() { LinkQueue L; QElemType x; int i; while(1) { printf("======menu======\n"); printf("1.初始化並建立\n"); printf("2.出隊\n"); printf("3.入隊\n"); printf("4.清空\n"); printf("5.遍歷輸出\n"); printf("6.求隊長\n"); printf("輸入1-6:"); scanf("%d",&i); switch(i) { case 1: { create(&L); break; } case 2: { deleteq(&L,&x); printf("%d\n",x); break; } case 3: { printf("輸入元素:"); scanf("%d",&x); insert(&L,x); break; } case 4: { clear(&L); break; } case 5: { show(&L); break; } case 6: { printf("%d\n",get_length(&L)); break; } } } }