【資料結構】佇列的基本認識和佇列的基本操作
阿新 • • 發佈:2019-02-03
一.佇列的概念
佇列是一種先進先出的線性表(棧是先進後出)。它只允許在表的一端進行插入,或者刪除元素。
- 進入插入操作的一端稱為隊尾(rear)(入佇列)
- 進行刪除操作的一端稱為對頭(front)(出佇列)
佇列具有先進先出的(FIFO)的特性
二.順序佇列
佇列滿條件:隊尾指標=size(設隊列當前容量為size)
佇列空條件:隊頭指標=隊尾指標queue.h
#pragma once #include<stdio.h> #include<Windows.h> #include<assert.h> typedef int DataType; #define SIZE 10 typedef struct Queue { DataType arry[SIZE]; int front; int rear; }Queue; //初始化佇列 void QueueInit(Queue* q); // 入佇列 void QueuePush(Queue* q, DataType data); // 出佇列 void QueuePop(Queue* q); // 獲取佇列頂元素 DataType QueueTop(Queue* q); // 獲取佇列中元素個數 int QueueSize(Queue* q); // 檢測佇列是否為空 int QueueEmpty(Queue* q); //銷燬佇列 void DestroyQueue(Queue* q); //列印佇列 void printQueue(Queue* q);
queue.c
#include"queue.h" //初始化佇列 void QueueInit(Queue*q) { //初始化佇列只需讓隊頭指標和隊尾指標都指向0 q->front = q->rear = 0; return; } // 入佇列 void QueuePush(Queue* q, DataType data) { assert(q); if (SIZE == q->rear) { printf("棧溢位!!!"); return; } else { q->rear++; q->arry[q->rear] = data; } return; } // 出佇列 void QueuePop(Queue* q) { if (q->front == q->rear ) { printf("佇列已空!!!"); return; } else q->front++; } // 獲取佇列頂元素 DataType QueueTop(Queue* q) { if (q->front == q->rear) { printf("佇列已空!!!"); return 0; } return (q->arry[q->front]); } // 獲取佇列中元素個數 int QueueSize(Queue* q) { if (q->front == q->rear) { printf("佇列已空!!!"); return 0; } return (q->rear - q->front); } // 檢測佇列是否為空 int QueueEmpty(Queue* q) { if (q->front == q->rear) printf("佇列已空!!!"); return 0; } //銷燬佇列 void DestroyQeue(Queue* q) { } //列印佇列 void printQueue(Queue *q) { if (q->front == q->rear) { printf("佇列已空!!!\n"); return; } Queue* p = q; while (p->rear != p->front ) { p->front++; if (p->front < q->front + 1) { printf("%d->", p->arry[p->front]); } else { printf("%d->", p->arry[p->front]); } } printf("\n"); }
test.c
#include"queue.h"
void QueueTest()
{
Queue q;
QueueInit(&q);
QueuePush(&q, 1);
QueuePush(&q, 2);
QueuePush(&q, 3);
QueuePush(&q, 4);
QueuePush(&q, 5);
QueuePop(&q);
printQueue(&q);
}
int main()
{
QueueTest();
system("pause");
return 0;
}
後續會更新出迴圈佇列和鏈式佇列的基本操作以及佇列的應用棧的理解兩者可以比較相互點選開啟連結