最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

隊列的鏈式存儲結(jié)構(gòu)實現(xiàn),相比于循環(huán)隊列實現(xiàn)要復(fù)雜一些,但是沒有隊滿的限制。

頭文件聲明

#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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • QT實現(xiàn)FTP上傳文件

    QT實現(xiàn)FTP上傳文件

    這篇文章主要為大家詳細介紹了QT實現(xiàn)FTP上傳文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 使用map實現(xiàn)單詞轉(zhuǎn)換的實例分析

    使用map實現(xiàn)單詞轉(zhuǎn)換的實例分析

    本篇文章是對使用map實現(xiàn)單詞轉(zhuǎn)換的代碼實例進行了纖細的分析介紹,需要的朋友參考下
    2013-05-05
  • 探討:C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)

    探討:C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)

    本篇文章是對用C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++/JAVA/C#子類調(diào)用父類函數(shù)情況總結(jié)

    C++/JAVA/C#子類調(diào)用父類函數(shù)情況總結(jié)

    今天小編就為大家分享一篇關(guān)于C++/JAVA/C#子類調(diào)用父類函數(shù)情況總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳解C++語言中的加法運算符與賦值運算符的用法

    詳解C++語言中的加法運算符與賦值運算符的用法

    這篇文章主要介紹了C++語言中的加法運算符與賦值運算符的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • C語言新手初階教程之三子棋實現(xiàn)

    C語言新手初階教程之三子棋實現(xiàn)

    相信大家在小時候都用紙和筆與小伙伴們玩過一個經(jīng)典的游戲之井字棋,即三子棋,下面這篇文章主要給大家介紹了關(guān)于C語言新手初階教程之三子棋實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • C語言百行代碼繪制圣誕水晶球

    C語言百行代碼繪制圣誕水晶球

    今天就是圣誕節(jié)了,本文將再教大家一個圣誕項目——圣誕水晶球,今天這個呢代碼不多,但難度會有點。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2021-12-12
  • C語言之沒有main函數(shù)的helloworld示例

    C語言之沒有main函數(shù)的helloworld示例

    這篇文章主要介紹了C語言之沒有main函數(shù)的helloworld示例,本文分解了帶main函數(shù)的helloworld示例,從而分析出不需要main函數(shù)的helloworld示例,需要的朋友可以參考下
    2015-03-03
  • C++模擬實現(xiàn)vector示例代碼圖文講解

    C++模擬實現(xiàn)vector示例代碼圖文講解

    這篇文章主要介紹了C++容器Vector的模擬實現(xiàn),Vector是一個能夠存放任意類型的動態(tài)數(shù)組,有點類似數(shù)組,是一個連續(xù)地址空間,下文更多詳細內(nèi)容的介紹,需要的小伙伴可以參考一下
    2023-02-02
  • C++實現(xiàn)將數(shù)組中的值反轉(zhuǎn)

    C++實現(xiàn)將數(shù)組中的值反轉(zhuǎn)

    這里給大家分享的事一則C++實現(xiàn)將數(shù)組中的值反轉(zhuǎn)的代碼,取材自《C++程序設(shè)計》(梁勇著第三版367頁),有需要的小伙伴可以參考下
    2016-05-05

最新評論

三亚市| 同心县| 尼玛县| 金川县| 洛浦县| 通海县| 罗城| 启东市| 福鼎市| 咸宁市| 习水县| 南华县| 平武县| 罗田县| 疏勒县| 金沙县| 水富县| 永登县| 子长县| 博爱县| 张北县| 乐至县| 民勤县| 酉阳| 高要市| 恩平市| 芮城县| 陆川县| 赣州市| 无极县| 石嘴山市| 廉江市| 竹北市| 保靖县| 格尔木市| 远安县| 青龙| 马尔康县| 奈曼旗| 射阳县| 桃源县|