數據結構之順序隊列和鏈式隊列常用的一些操作

順序隊列是隊列的順序存儲結構,順序隊列實際上是運算受限的順序表。和順序表一樣,順序隊列用一個向量空間來存放當前隊列中的元素。由于隊列的隊頭和隊尾的位置是變化的,設置兩個指針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;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448524.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

33個訓練大腦的小方法

已經步入經常忘事的年齡了。常常是提起一個人&#xff0c;形象都在腦海中&#xff0c;但就是說不出其姓名來&#xff0c;哪怕就在嘴邊也說不出來。有時候遇到一個人&#xff0c;知道是熟悉的人&#xff0c;但就是想不起名字了&#xff0c;有時候弄得很尷尬。 書里說&#xff0c…

linux常用命令(4)

linux常用命令(4) --- Vim編輯器與Shell命令腳本 如何使用vim編輯器來編寫文檔、配置主機名稱、網卡參數以及yum倉庫&#xff1b;通過vim編輯器將Linux命令放入合適的邏輯測試語句&#xff08;if、for、while、case&#xff09;后最終寫出簡單使用的shell腳本;可以通過at命令或…

script 標簽到底該放在哪里

一般script標簽會被放在頭部或尾部。頭部就是<head>里面&#xff0c;尾部一般指<body>里。 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 將script放在<head>里&a…

棧在表達式計算過程中的應用

棧在表達式計算過程中的應用 &#xff1a;建立操作數棧和運算符棧。運算符有優先級。 規則&#xff1a; 自左至右掃描表達式&#xff0c;凡是遇到操作數一律進操作數棧。 當遇到運算符時&#xff0c;如果它的優先級比運算符棧棧頂元素的優先級高就進棧。反之&#xff0c;取出…

Python-02-基礎知識

一、第一個Python程序 【第一步】新建一個hello.txt 【第二步】將后綴名txt改為py 【第三步】使用記事本編輯該文件 【第四步】在cmd中運行該文件 print("Hello World!") 強調&#xff1a;python解釋器執行程序是解釋執行&#xff0c;即打開文件讀內容&#xff0c;因…

數據結構之樹的一些基本操作

樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關系構成的。集合中的元素稱為樹的結點&#xff0c;所定義的關系稱為父子關系。父子關系在樹的結點之間建立了一個層次結構。在這種層次結構中有一個結點具有特殊的地位&#xff0c;這個結點稱為該樹的…

利用FS寄存器獲取KERNEL32.DLL基址算法的證明(ZZ)

轉自&#xff1a;http://blog.csdn.net/int2e/archive/2008/01/09/2032732.aspxFS寄存器指向當前活動線程的TEB結構&#xff08;線程結構&#xff09; 偏移 說明 000 指向SEH鏈指針 004 線程堆棧頂部 008 線程堆棧底部 00C SubSystemTib 010 FiberData 014 ArbitraryUse…

很老很老的老偏方,小病一掃光

1、洋蔥、生姜治頭皮屑 ①將一個的洋蔥頭用紗布包好&#xff0c;用它揉擦頭皮&#xff0c;24小時后用溫水洗頭&#xff0c;即可止頭癢&#xff0c;除頭皮屑。 ②先將生姜切片&#xff0c;放入鍋里煮沸&#xff0c;待水溫不燙的時候倒上適量醋&#xff0c;加水洗頭。 2、小白果…

script 放置最佳位置以及 html 執行順序

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 看到知乎上有很多討論關于javascript位置的文章。所以特意留意了這方面的問題。 首先要了解到的是&#xff1a; html文件是自上而下的執…

677A

#include <stdio.h> int main() {int n, h;scanf("%d%d", &n, &h);int temp, width0;int i;for(i0; i<n; i){scanf("%d", &temp);if(temp<h)width;elsewidth2;}printf("%d\n", width);return 0; }轉載于:https://www.cn…

數據結構之二叉樹的一些基本操作

二叉樹是樹的特殊一種&#xff0c;具有如下特點&#xff1a;1、每個結點最多有兩顆子樹&#xff0c;結點的度最大為2。2、左子樹和右子樹是有順序的&#xff0c;次序不能顛倒。3、即使某結點只有一個子樹&#xff0c;也要區分左右子樹。 頭文件 BTree.h #ifndef __BTREE_H__ …

【Arduino】使用C#實現Arduino與電腦進行串行通訊

在給Arduino編程的時候&#xff0c;因為沒有調試工具&#xff0c;經常要通過使用串口通訊的方式調用Serial.print和Serial.println輸出Arduino運行過程中的相關信息&#xff0c;然后在電腦上用Arduino IDE的Serial Monitor來查看print出來的信息。Serial Monitor不僅可以接受Ar…

虛擬機NAT模式聯網

阿里開源鏡像軟件&#xff1a;https://opsx.alibaba.com/mirror 如何使VMware ip與本機ip處于同一網段 https://blog.csdn.net/kakuma_chen/article/details/71425620 轉載于:https://www.cnblogs.com/cdy0626/p/11131440.html

VS2008下最新X264(svn 2009.9)編譯不過的解決辦法

總有人說最新的版本 編譯不過&#xff0c;搞的群、 論壇里到處都是這種求助貼。建議斑竹把這個解決辦法放到醒目的位置&#xff0c;以減少噪音。科普開始1、編譯問題由于MS的VS編譯器對C99標準支持不好&#xff0c;不支持函數當中混合定義、聲明變量。解決辦法&#xff1a;在函…

node、npm、vue安裝 -- VUE 項目 demo 實例

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 安裝node&#xff1a; sudo yum install epel-release sudo yum install nodejs node --version // 安裝好后查看版本2. 安裝 npm …

用C語言實現簡單的停車場管理

這個程序是利用棧和循環隊列實現的&#xff0c;自己得先處理好邏輯關系就好了。由于題目沒有要求&#xff0c;這個程序就沒加重復判斷&#xff0c;比如一輛車已經停在車位上或者便道上&#xff0c;再來一輛就判斷不了了。關于棧&#xff0c;就是先進后出的思想&#xff0c;隊列…

推薦一個配置linux服務的網站

該網站的各種linux服務的配置都是基于CentOS系統的 基本上各種linux服務都有了 http://www.server-world.info/en/轉載于:https://www.cnblogs.com/Skyar/p/3582389.html

mariadb數據庫增刪改查

1.常用數據類型 1&#xff09;整數:int, bit 2&#xff09;小數:decimal    #decimal(5,2)表示共有五位數&#xff0c;保留兩位小數 3&#xff09;字符串:varchar, char   4&#xff09;日期時間:date, time, datetime 5&#xff09;枚舉類型(enu…

為什么你工作努力卻沒有起色?

成為職場達人&#xff0c;未必要經常挑燈夜戰。相反&#xff0c;注意到下面幾條&#xff0c;會讓你少走彎路。 1&#xff09;成長的機會永遠比眼前的待遇重要——做重要的事比多拿錢重要。 我知道在水木bbs上的worklife版本&#xff0c;每天都在上演的就是比較自己的第一個o…

《 Spring 實戰 》(第4版) 讀書筆記 (未完結,更新中...)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Pxx 表示在書的第 xx 頁。 Spring 框架的核心是 Spring 容器。 1. (P7.) 構造器注入是依賴注入的方式之一。 緊耦合&#xff1a;在 …