資料結構——鏈佇列
阿新 • • 發佈:2018-12-27
一 介紹
佇列是一種特殊的線性表,特殊之處在於只允許在一端進行刪除操作,在一端進行插入操作。佇列是受限制的線性表,允許刪除操作的一端叫隊首(front),允許插入操作的的一端叫隊尾(rear)。
二 程式碼()
# include<stdio.h> # include<stdlib.h> # include<malloc.h> typedef struct node{ int data; struct node * next; }Node, *qNode; typedef struct queue{ qNode front; qNode rear; }Queue; void initQueue(Queue *); void enQueue(Queue *, int); void deQueue(Queue *); void traverselQueue(Queue *); bool isEmpty(Queue *); int queueLength(Queue *); void clearQueue(Queue *); void destroyQueue(Queue *); int main(){ Queue q; initQueue(&q); enQueue(&q, 1); enQueue(&q, 2); enQueue(&q, 3); enQueue(&q, 4); traverselQueue(&q); /* printf("\n"); deQueue(&q); traverselQueue(&q); if(isEmpty(&q)){ printf("空\n"); } else printf("不空\n"); printf("len:%d",queueLength(&q)); */ /* clearQueue(&q); traverselQueue(&q); */ destroyQueue(&q); return 0; } void initQueue(Queue * q){ q->front = q->rear = (qNode)malloc(sizeof(Node)); if(!q->front){ printf("error"); exit(-1); } q->front->next = NULL; } void enQueue(Queue * q, int val){ qNode newNode = (qNode)malloc(sizeof(Node)); if(!newNode){ printf("error"); exit(-1); } newNode->data = val; newNode->next = NULL; q->rear->next = newNode; q->rear = newNode; } void traverselQueue(Queue * q){ if(q->rear == q->front) printf("佇列為空"); qNode p = q->front->next; while(p){ printf("%d ", p->data); p = p->next; } } void deQueue(Queue * q){ if(q->front == q->rear){ return; } qNode p = q->front->next; q->front->next = p->next; free(p); } bool isEmpty(Queue * q){ if(q->front == q->rear) return true; else return false; } int queueLength(Queue * q){ int len = 0; qNode p = q->front->next; while(p){ len++; p = p->next; } return len; } void clearQueue(Queue * q){ if(q->front == q->rear){ return; } while(q->front->next != NULL) { qNode p = q->front->next; q->front->next = p->next; free(p); p = NULL; } q->front = q->rear; } void destroyQueue(Queue * q){ clearQueue(q); free(q); q = NULL; }