欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實(shí)現(xiàn)鏈隊(duì)列基本操作

 更新時間:2021年09月23日 16:19:00   作者:似曾不相識  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)鏈隊(duì)列基本操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

隊(duì)列的鏈?zhǔn)酱鎯Y(jié)構(gòu)實(shí)現(xiàn),相比于循環(huán)隊(duì)列實(shí)現(xiàn)要復(fù)雜一些,但是沒有隊(duì)滿的限制。

頭文件聲明

#include <stdio.h>
#include <stdlib.h>

/**
 * 隊(duì)列的鏈?zhǔn)酱鎯?shí)現(xiàn)
 * [帶頭結(jié)點(diǎn)的單鏈表]
 * [-類似于鏈棧,隊(duì)列的鏈?zhǔn)酱鎯?shí)現(xiàn)也不會出現(xiàn)隊(duì)滿的情況]
 */
//數(shù)據(jù)類型
typedef int ElemType;

//定義節(jié)點(diǎn)
typedef struct SqQueueNode
{
 ElemType data;//數(shù)據(jù)域
 struct SqQueueNode* next; //指針域
}SqQueueNode;
//定義隊(duì)列
typedef struct SqQueueLink{
 SqQueueNode* front;//隊(duì)頭指針
 SqQueueNode* rear;//隊(duì)尾指針
}SqQueueLink;

//初始化隊(duì)列
void InitQueueLink(SqQueueLink* q);
//判斷隊(duì)空
int EmptyQueueLink(SqQueueLink q);
//入隊(duì)操作
void EnQueueLink(SqQueueLink *q,ElemType e);
//出隊(duì)操作
void DeQueueLink(SqQueueLink q,ElemType *e);
//獲取隊(duì)列長度
int LengthQueueLink(SqQueueLink q);
//打印隊(duì)列
void printSqQueueLink(SqQueueLink q);
//獲取隊(duì)頭元素
void GetHeadLink(SqQueueLink q,ElemType* e);

函數(shù)實(shí)現(xiàn)

#include "SqQueueLink.h"


//初始化隊(duì)列
void InitQueueLink(SqQueueLink* q){
 //創(chuàng)建頭結(jié)點(diǎn)
 SqQueueNode* pNode=(SqQueueNode*)malloc(sizeof(SqQueueNode));
 pNode->next=NULL;//指針域置空[數(shù)據(jù)域不存儲任何內(nèi)容]
 //初始化隊(duì)列-[使隊(duì)頭指針和隊(duì)尾指針指向頭結(jié)點(diǎn)]
 q->front=pNode;
 q->rear=pNode;
}

//判斷隊(duì)空
int EmptyQueueLink(SqQueueLink q){
 return q.front==q.rear;
}

//入隊(duì)操作
void EnQueueLink(SqQueueLink *q,ElemType e){
 //創(chuàng)建新的數(shù)據(jù)元素節(jié)點(diǎn)
 SqQueueNode* newNode=(SqQueueNode*)malloc(sizeof(SqQueueNode));
 newNode->data=e;//指定數(shù)據(jù)域
 newNode->next=NULL;//指針域置空
 //入隊(duì)操作[從隊(duì)尾入隊(duì)]
 q->rear->next=newNode;
 q->rear=newNode;
}

//出隊(duì)操作
void DeQueueLink(SqQueueLink q,ElemType *e){
 //[從隊(duì)頭出隊(duì)]
 SqQueueNode* p=NULL;
 //是否隊(duì)空
 if (q.front==q.rear)
  return;
 p=q.front->next;//獲取首節(jié)點(diǎn)
 *e=p->data;
 //使隊(duì)頭指針指向下一節(jié)點(diǎn)
 q.front->next=p->next;
 //如果原隊(duì)列中只有一個節(jié)點(diǎn),要將隊(duì)尾指針和隊(duì)頭指針均指向同一節(jié)點(diǎn)-置空
 if (q.rear==p)
  q.rear=q.front;
 //釋放原首節(jié)點(diǎn)
 free(p);
}

//獲取隊(duì)列長度
int LengthQueueLink(SqQueueLink q){
 //輔助指針
 SqQueueNode* pNode=q.front->next;
 int count=0;
 //獲取隊(duì)列長度
 while (pNode!=q.rear)
 {
  count++;
  pNode=pNode->next;
 }
 return count;
}

//打印隊(duì)列
void printSqQueueLink(SqQueueLink q){
 //輔助指針
 SqQueueNode* p=q.front->next;
 while (p!=q.rear)
 {
  printf("%4d",p->data);
  p=p->next;
 }
 printf("\n");
}

//獲取隊(duì)頭元素
void GetHeadLink(SqQueueLink q,ElemType* e){
 //判斷隊(duì)列是否為空
 if (q.front==q.rear)
  return;
 //獲取隊(duì)頭元素的值
 *e=q.front->next->data;
}

函數(shù)測試

#include "SqQueueLink.h"

int main(int argc,char** argv){
 //聲明隊(duì)列
 SqQueueLink sqLink;
 int i;
 ElemType data;
 //初始化隊(duì)列
 InitQueueLink(&sqLink);
 //判斷隊(duì)列是否為空
 printf("is Empty?%d\n",EmptyQueueLink(sqLink));
 //入隊(duì)操作
 for (i=0;i<=20;i++)
 {
  EnQueueLink(&sqLink,i+1);
 }
 //判斷隊(duì)列是否為空
 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink));
 //打印隊(duì)列
 printSqQueueLink(sqLink);
 //出隊(duì)列操作
 DeQueueLink(sqLink,&data);
 //判斷隊(duì)列是否為空
 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink));
 //打印隊(duì)列
 printSqQueueLink(sqLink);
 //獲取隊(duì)頭元素的值
 GetHeadLink(sqLink,&data);
 printf("the first node value is %d\n",data);
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • VS2019+Opencv4.0+Win10配置詳解

    VS2019+Opencv4.0+Win10配置詳解

    這篇文章主要介紹了VS2019+Opencv4.0+Win10配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++實(shí)現(xiàn)圖書館案例

    C++實(shí)現(xiàn)圖書館案例

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書館案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解

    C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解

    但是在實(shí)際的編程中,往往會發(fā)生這種情況,即所需的內(nèi)存空間取決于實(shí)際輸入的數(shù)據(jù),而無法預(yù)先確定 。為了解決上述問題,C語言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要動態(tài)的分配內(nèi)存空間,也可把不再使用的空間回收再次利用
    2022-12-12
  • QT調(diào)用vs2019生成的c++動態(tài)庫的方法實(shí)現(xiàn)

    QT調(diào)用vs2019生成的c++動態(tài)庫的方法實(shí)現(xiàn)

    本文主要介紹了QT調(diào)用vs2019生成的c++動態(tài)庫的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • MFC擴(kuò)展DLL中導(dǎo)出類和對話框的實(shí)現(xiàn)方法

    MFC擴(kuò)展DLL中導(dǎo)出類和對話框的實(shí)現(xiàn)方法

    這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類和對話框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類和對話框的具體步驟與方法,具有不錯的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表

    c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表

    構(gòu)造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯示的出現(xiàn)在構(gòu)造函數(shù)的成員初始化列表中,都會在該處完成初始化,并且初始化的順序和其在聲明時的順序是一致的,與列表的先后順序無關(guān)
    2013-09-09
  • VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例

    VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例

    這篇文章主要介紹了VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配

    C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配

    C++ 不允許變量重名,但是允許多個函數(shù)取相同的名字,只要參數(shù)表不同即可,這叫作函數(shù)的重載,下面這篇文章主要給大家介紹了關(guān)于C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配的相關(guān)資料,需要的朋友可以參考下
    2019-01-01
  • C++文件依存關(guān)系介紹

    C++文件依存關(guān)系介紹

    如果現(xiàn)在你做的C++項(xiàng)目(課題)包含的文件沒有超過1000個,你可以選擇略過此文,不過建議繼續(xù)瀏覽
    2013-01-01
  • Linux?C/C++實(shí)現(xiàn)網(wǎng)絡(luò)流量分析工具

    Linux?C/C++實(shí)現(xiàn)網(wǎng)絡(luò)流量分析工具

    網(wǎng)絡(luò)流量分析的原理基于對數(shù)據(jù)包的捕獲、解析和統(tǒng)計(jì)分析,通過對網(wǎng)絡(luò)流量的細(xì)致觀察和分析,幫助管理員了解和優(yōu)化網(wǎng)絡(luò)的性能,本文將通過C++實(shí)現(xiàn)網(wǎng)絡(luò)流量分析工具,有需要的可以參考下
    2023-10-10

最新評論