数据结构之顺序队列和链式队列常用的一些操作
生活随笔
收集整理的這篇文章主要介紹了
数据结构之顺序队列和链式队列常用的一些操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序隊列是隊列的順序存儲結構,順序隊列實際上是運算受限的順序表。和順序表一樣,順序隊列用一個向量空間來存放當前隊列中的元素。由于隊列的隊頭和隊尾的位置是變化的,設置兩個指針front和rear分別指示隊頭元素和隊尾元素在向量空間中的位置,它們的初值在隊列初始化時均應設置為0。
頭文件 SqQueue.h
源文件 :SqQueue.c
#include "SqQueue.h"// 置空隊 int InitQueue (Queue* q) {if (NULL == q){errno = ERROR;return FALSE;}// 置空隊q->front = 0;q->rear = 0;return TRUE; }// 判隊空否 int QueueEmpty (Queue* q) {if (NULL == q){errno = ERROR;return FALSE;}return (q->front == q->rear); }// 判隊滿否 int QueueFull (Queue* q) {if (NULL == q){errno = ERROR;return FALSE;}return (q->front == (q->rear+1) % SIZE); }// 進隊 int EnQueue (Queue* q, QueueData x) {if (NULL == q){errno = ERROR;return FALSE;}if (QueueFull(q)){errno = FULL_QUEUE;return FALSE;}q->data[(++q->rear) % SIZE] = x;return TRUE; }// 出隊 int DeQueue (Queue* q, QueueData *x) {if (NULL == q){errno = ERROR;return FALSE;}if (QueueEmpty(q)){errno = EMPTY_QUEUE;return FALSE;}*x = q->data[(++q->front) % SIZE];return TRUE; }// 取隊頭 int GetFrontf (Queue* q, QueueData *x) {if (NULL == q){errno = ERROR;return FALSE;}if (QueueEmpty(q)){errno = EMPTY_QUEUE;return FALSE;}*x = q->data[(q->front + 1) % SIZE];return TRUE; }鏈式隊列 鏈式隊列沒有空間溢出的問題
頭文件 LinkQueue.h
源文件 LinkQueue.c
#include "LinkQueue.h" #include <stdlib.h>// 創建隊列 Queue* Create_Queue () {Queue* q = (Queue*) malloc(sizeof(Queue)/sizeof(char));if (NULL == q){errno = MALLOC_ERROR;return NULL;}// 置空隊q->front = NULL;q->rear = NULL;return q; }// 置空隊 int QueueEmpty (Queue* q) {if (NULL == q){errno = ERROR;return FALSE;}return q->front == NULL; }// 進隊 int EnQueue (Queue* q, QueueData x) {if (NULL == q){errno = ERROR;return FALSE;}Node* node = (Node*) malloc(sizeof(Node)/sizeof(char));if (NULL == node){errno = MALLOC_ERROR;return FALSE;}node->data = x;node->next = NULL;if (NULL == q->front){q->front = node;q->rear = node;}else {q->rear->next = node;q->rear = node;}return TRUE; }// 出隊 int DeQueue (Queue* q, QueueData *x) {if (NULL == q){errno = ERROR;return FALSE;}if (QueueEmpty(q)){errno = EMPTY_QUEUE;return FALSE;}Node* p = q->front;*x = p->data;q->front = p->next;free(p);if (NULL == q->front){q->rear = NULL;}return TRUE;}// 取隊頭 int GetFront (Queue* q, QueueData *x) {if (NULL == q){errno = ERROR;return FALSE;}if (QueueEmpty(q)){errno = EMPTY_QUEUE;return FALSE;}*x = q->front->data;return TRUE; }// 銷毀隊列 int Destroy_Queu (Queue* q) {if (NULL == q){errno = ERROR;return FALSE;}int x;while (TRUE != QueueEmpty(q)){DeQueue (q, &x);}free(q);return TRUE; }總結
以上是生活随笔為你收集整理的数据结构之顺序队列和链式队列常用的一些操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矩阵存储 oracle表,二种矩阵存储方
- 下一篇: oracle遇到无效lob,sql –