C語言實現(xiàn)鏈隊列基本操作
更新時間:2021年09月23日 16:19:00 作者:似曾不相識
這篇文章主要為大家詳細介紹了C語言實現(xiàn)鏈隊列基本操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
隊列的鏈式存儲結(jié)構(gòu)實現(xiàn),相比于循環(huán)隊列實現(xiàn)要復雜一些,但是沒有隊滿的限制。
頭文件聲明
#include <stdio.h> #include <stdlib.h> /** * 隊列的鏈式存儲實現(xiàn) * [帶頭結(jié)點的單鏈表] * [-類似于鏈棧,隊列的鏈式存儲實現(xiàn)也不會出現(xiàn)隊滿的情況] */ //數(shù)據(jù)類型 typedef int ElemType; //定義節(jié)點 typedef struct SqQueueNode { ElemType data;//數(shù)據(jù)域 struct SqQueueNode* next; //指針域 }SqQueueNode; //定義隊列 typedef struct SqQueueLink{ SqQueueNode* front;//隊頭指針 SqQueueNode* rear;//隊尾指針 }SqQueueLink; //初始化隊列 void InitQueueLink(SqQueueLink* q); //判斷隊空 int EmptyQueueLink(SqQueueLink q); //入隊操作 void EnQueueLink(SqQueueLink *q,ElemType e); //出隊操作 void DeQueueLink(SqQueueLink q,ElemType *e); //獲取隊列長度 int LengthQueueLink(SqQueueLink q); //打印隊列 void printSqQueueLink(SqQueueLink q); //獲取隊頭元素 void GetHeadLink(SqQueueLink q,ElemType* e);
函數(shù)實現(xiàn)
#include "SqQueueLink.h" //初始化隊列 void InitQueueLink(SqQueueLink* q){ //創(chuàng)建頭結(jié)點 SqQueueNode* pNode=(SqQueueNode*)malloc(sizeof(SqQueueNode)); pNode->next=NULL;//指針域置空[數(shù)據(jù)域不存儲任何內(nèi)容] //初始化隊列-[使隊頭指針和隊尾指針指向頭結(jié)點] q->front=pNode; q->rear=pNode; } //判斷隊空 int EmptyQueueLink(SqQueueLink q){ return q.front==q.rear; } //入隊操作 void EnQueueLink(SqQueueLink *q,ElemType e){ //創(chuàng)建新的數(shù)據(jù)元素節(jié)點 SqQueueNode* newNode=(SqQueueNode*)malloc(sizeof(SqQueueNode)); newNode->data=e;//指定數(shù)據(jù)域 newNode->next=NULL;//指針域置空 //入隊操作[從隊尾入隊] q->rear->next=newNode; q->rear=newNode; } //出隊操作 void DeQueueLink(SqQueueLink q,ElemType *e){ //[從隊頭出隊] SqQueueNode* p=NULL; //是否隊空 if (q.front==q.rear) return; p=q.front->next;//獲取首節(jié)點 *e=p->data; //使隊頭指針指向下一節(jié)點 q.front->next=p->next; //如果原隊列中只有一個節(jié)點,要將隊尾指針和隊頭指針均指向同一節(jié)點-置空 if (q.rear==p) q.rear=q.front; //釋放原首節(jié)點 free(p); } //獲取隊列長度 int LengthQueueLink(SqQueueLink q){ //輔助指針 SqQueueNode* pNode=q.front->next; int count=0; //獲取隊列長度 while (pNode!=q.rear) { count++; pNode=pNode->next; } return count; } //打印隊列 void printSqQueueLink(SqQueueLink q){ //輔助指針 SqQueueNode* p=q.front->next; while (p!=q.rear) { printf("%4d",p->data); p=p->next; } printf("\n"); } //獲取隊頭元素 void GetHeadLink(SqQueueLink q,ElemType* e){ //判斷隊列是否為空 if (q.front==q.rear) return; //獲取隊頭元素的值 *e=q.front->next->data; }
函數(shù)測試
#include "SqQueueLink.h" int main(int argc,char** argv){ //聲明隊列 SqQueueLink sqLink; int i; ElemType data; //初始化隊列 InitQueueLink(&sqLink); //判斷隊列是否為空 printf("is Empty?%d\n",EmptyQueueLink(sqLink)); //入隊操作 for (i=0;i<=20;i++) { EnQueueLink(&sqLink,i+1); } //判斷隊列是否為空 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink)); //打印隊列 printSqQueueLink(sqLink); //出隊列操作 DeQueueLink(sqLink,&data); //判斷隊列是否為空 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink)); //打印隊列 printSqQueueLink(sqLink); //獲取隊頭元素的值 GetHeadLink(sqLink,&data); printf("the first node value is %d\n",data); return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解
但是在實際的編程中,往往會發(fā)生這種情況,即所需的內(nèi)存空間取決于實際輸入的數(shù)據(jù),而無法預先確定 。為了解決上述問題,C語言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要動態(tài)的分配內(nèi)存空間,也可把不再使用的空間回收再次利用2022-12-12QT調(diào)用vs2019生成的c++動態(tài)庫的方法實現(xiàn)
本文主要介紹了QT調(diào)用vs2019生成的c++動態(tài)庫的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-06-06c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表
構(gòu)造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯示的出現(xiàn)在構(gòu)造函數(shù)的成員初始化列表中,都會在該處完成初始化,并且初始化的順序和其在聲明時的順序是一致的,與列表的先后順序無關(guān)2013-09-09Linux?C/C++實現(xiàn)網(wǎng)絡流量分析工具
網(wǎng)絡流量分析的原理基于對數(shù)據(jù)包的捕獲、解析和統(tǒng)計分析,通過對網(wǎng)絡流量的細致觀察和分析,幫助管理員了解和優(yōu)化網(wǎng)絡的性能,本文將通過C++實現(xiàn)網(wǎng)絡流量分析工具,有需要的可以參考下2023-10-10