日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构之顺序队列和链式队列常用的一些操作

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之顺序队列和链式队列常用的一些操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

順序隊列是隊列的順序存儲結構,順序隊列實際上是運算受限的順序表。和順序表一樣,順序隊列用一個向量空間來存放當前隊列中的元素。由于隊列的隊頭和隊尾的位置是變化的,設置兩個指針front和rear分別指示隊頭元素和隊尾元素在向量空間中的位置,它們的初值在隊列初始化時均應設置為0。
頭文件 SqQueue.h

#ifndef _SQUEUE_H__ #define _SQUEUE_H__ #include "error.h"#define TRUE 1 #define FALSE 0#define SIZE 10 typedef int QueueData; typedef struct _queue {QueueData data[SIZE];int front; // 指向隊頭的下標int rear; // 指向隊尾的下標 }Queue;// 置空隊 int InitQueue (Queue* q);// 判隊空否 int QueueEmpty (Queue* q);// 判隊滿否 int QueueFull (Queue* Q);// 進隊 int EnQueue (Queue* q, QueueData x);// 出隊 int DeQueue (Queue* s, QueueData *x);// 取隊頭 int GetFront (Queue* s, QueueData *x);#endif // _SQUEUE_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

#ifndef __LINKQUEUE_H__ #define __LINKQUEUE_H__ #include "error.h"#define TRUE 1 #define FALSE 0typedef int QueueData; typedef struct _node {QueueData data;struct _node* next; }Node;typedef struct _queue {Node* front;Node* rear; }Queue;// 創建隊列 Queue* Create_Queue ();// 置空隊列 int QueueEmpty (Queue* q);// 進隊 int EnQueue (Queue* q, QueueData x);// 出隊 int DeQueue (Queue* q, QueueData *x);// 取隊頭 int GetFront (Queue* q, QueueData *x);// 銷毀隊列 int Destroy_Queue (Queue *q);#endif

源文件 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; }

總結

以上是生活随笔為你收集整理的数据结构之顺序队列和链式队列常用的一些操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。