亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)不掛科指南之隊(duì)列詳解

 更新時(shí)間:2022年09月29日 17:11:59   作者:夢(mèng)想橡皮擦  
這篇博客主要介紹一下隊(duì)列的概念,并且采用 C 語(yǔ)言,編寫兩種存儲(chǔ)實(shí)現(xiàn)方式:順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ),當(dāng)然還有常規(guī)的隊(duì)列基本操作的實(shí)現(xiàn)算法

隊(duì)列

這篇博客主要介紹一下隊(duì)列的概念,并且采用 C 語(yǔ)言,編寫兩種存儲(chǔ)實(shí)現(xiàn)方式:順序存儲(chǔ)鏈?zhǔn)酱鎯?chǔ),當(dāng)然還有常規(guī)的隊(duì)列基本操作的實(shí)現(xiàn)算法

隊(duì)列基本概念

標(biāo)準(zhǔn)解釋:隊(duì)列(Queue)是有限個(gè)**同類型數(shù)據(jù)元素的線性序列,是一種先進(jìn)先出**(First In First Out FIFO)的線性表,新鍵入的數(shù)據(jù)元素插在隊(duì)列尾端,出隊(duì)列的數(shù)據(jù)元素在隊(duì)列首部被刪除。

教材中給了一個(gè)示意圖,不錯(cuò)

順序隊(duì)列結(jié)構(gòu)類型中有三個(gè)域:data、front、rear。

data:一維數(shù)組,存儲(chǔ)隊(duì)列中的數(shù)據(jù)元素 font:指向隊(duì)列首元素的前一個(gè)單元 rear:指向?qū)嶋H的隊(duì)列尾元素單元

參考示意圖

入隊(duì)列操作可以用兩條賦值語(yǔ)句

SQ.rear = SQ.rear+1;
SQ.data[SQ.rear] = x;

出隊(duì)列操作可以用一條語(yǔ)句完成

SQ.front = SQ.front+1

但是,會(huì)出現(xiàn)一些問題,通過示意圖說(shuō)明一下

當(dāng)然還有一種情況,一邊入隊(duì)列,一邊出隊(duì)列 注意下圖,SQ.front 下面還有空間

所以為了解決這種假溢出問題,聰明的開發(fā)人員,想出來(lái)新的解決辦法了,造一個(gè)環(huán)兒~

循環(huán)隊(duì)列

下面看一個(gè)圖,重點(diǎn)看一下 SQ.rear 與 SQ.front 的對(duì)應(yīng)位置

如果上述圖翻譯成 C 語(yǔ)言代碼,入隊(duì)核心邏輯為

SQ.rear = (SQ.rear+1) % maxsize ;
SQ.data[SQ.rear] = x;

出隊(duì)列的核心邏輯為

SQ.front = (SQ.front+1)%maxsize;

你在學(xué)習(xí)的時(shí)候,肯定對(duì)SQ.rear+1SQ.front+1有疑問

我們舉例來(lái)說(shuō)明一下吧

順序隊(duì)列的 C 語(yǔ)言實(shí)現(xiàn)

接下來(lái)難度指數(shù)上升,開始用 C 語(yǔ)言編寫代碼吧

一頓操作之后,還是比較簡(jiǎn)單的,總之不寫鏈?zhǔn)酱鎯?chǔ),順序的還是比較簡(jiǎn)單的

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

//循環(huán)隊(duì)列最大數(shù)據(jù)元素個(gè)數(shù)
const int maxsize = 8;

//循環(huán)隊(duì)列的結(jié)構(gòu)體
typedef struct cycqueue{
    int *data;
    int front,rear;
} CycQue;


//隊(duì)列初始化
void init(CycQue *CQ){
    CQ->data = (int *)malloc(maxsize*sizeof(int));
    CQ->front = 0;
    CQ->rear = 0;
}


//判斷隊(duì)列是否為空
int empty(CycQue *CQ){
    if(CQ->rear==CQ->front) return 1;
    else return 0;
}


//入隊(duì)列
int EnQueue(CycQue *CQ,int x){
    if((CQ->rear+1)%maxsize==CQ->front){
        printf("隊(duì)列滿");
        return 0;
    }
    else{
        CQ->rear =(CQ->rear+1) % maxsize;
        CQ->data[CQ->rear] = x;
        return 1;
    }

}

//出隊(duì)列
int OutQueue(CycQue *CQ){
    if(empty(CQ)){
        printf("隊(duì)列為空");
        return 0;
    }
    else{
        CQ->front = (CQ->front+1) % maxsize;
        return 1;

    }

}

int main()
{
    CycQue CQ;
    init(&CQ);

    EnQueue(&CQ,2);
    EnQueue(&CQ,4);
    printf("%d",CQ.rear);
    OutQueue(&CQ);
    printf("%d",CQ.front);
    return 0;
}

鏈?zhǔn)疥?duì)列的 C 語(yǔ)言實(shí)現(xiàn)

鏈?zhǔn)疥?duì)列其實(shí)有之前的經(jīng)驗(yàn)之后,寫起來(lái)難度系數(shù)也不會(huì)太高,接下來(lái)我們編寫一個(gè)核心的部分代碼

隊(duì)列的鏈接實(shí)現(xiàn)實(shí)際上是用一個(gè)帶有頭結(jié)點(diǎn)的單鏈表來(lái)表示隊(duì)列,成為鏈隊(duì)列 頭指針指向鏈表的頭結(jié)點(diǎn) 單鏈表的頭結(jié)點(diǎn)的 next 域指向隊(duì)列首結(jié)點(diǎn) 尾指針指向隊(duì)列尾結(jié)點(diǎn),即單鏈表的最后一個(gè)結(jié)點(diǎn)

初始化

#include <stdio.h>
#include <stdlib.h>
typedef struct LinkQueueNode{
	int *data;
	struct LinkQueueNode *next;
} LkQueNode;

typedef struct LkQueue{
    LkQueNode *front,*rear;
} LkQue;


void init(LkQue *LQ){
    LkQueNode *temp;
    temp = (LkQueNode *)malloc(sizeof(LkQueNode)); //生成隊(duì)列的頭結(jié)點(diǎn)
    LQ->front = temp;    //隊(duì)列頭指針指向隊(duì)列頭結(jié)點(diǎn)
    LQ->rear = temp;     //隊(duì)列尾指針指向隊(duì)列尾結(jié)點(diǎn)
    (LQ->front)->next = NULL;

}

核心兩個(gè)操作入隊(duì)列和出隊(duì)列

入隊(duì)列代碼如下

//入隊(duì)列
void EnQueue(LkQue *LQ,int x){

    LkQueNode *temp;
    temp = (LkQueNode *)malloc(sizeof(LkQueNode));
    temp->data = x;
    temp-next = NULL;
    (LQ->rear)->next = temp;
    LQ->rear = temp;
}

出隊(duì)列這個(gè)事情就交給你自己吧,好好理解一下,就可以寫出來(lái)了

自考要點(diǎn)

在考試中,隊(duì)列容易出現(xiàn)編碼題目,占比在 7~10 分,所以還是蠻重要的呢!

到此這篇關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)不掛科指南之隊(duì)列詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言 隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++缺省參數(shù)與重載函數(shù)(超詳細(xì)!)

    C++缺省參數(shù)與重載函數(shù)(超詳細(xì)!)

    無(wú)論使用什么語(yǔ)言函數(shù)都是代碼段中必不可少的部分,因此我們有必要深入認(rèn)識(shí)一下C++中函數(shù)的兩種特殊用法,缺省參數(shù),函數(shù)重載,這篇文章主要給大家介紹了關(guān)于C++缺省參數(shù)與重載函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • C++超詳細(xì)講解樹與二叉樹

    C++超詳細(xì)講解樹與二叉樹

    在之前的文章里,我們學(xué)習(xí)的一直是一對(duì)一的線性結(jié)構(gòu),可現(xiàn)實(shí)中,還有很多一對(duì)多的情況需要處理,所以我們需要研究這樣一種一對(duì)多的數(shù)據(jù)結(jié)構(gòu)——樹
    2022-05-05
  • C++實(shí)現(xiàn)LeetCode(676.實(shí)現(xiàn)神奇字典)

    C++實(shí)現(xiàn)LeetCode(676.實(shí)現(xiàn)神奇字典)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(676.實(shí)現(xiàn)神奇字典),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • win10系統(tǒng)VS2019配置點(diǎn)云庫(kù)PCL1.12.1的詳細(xì)流程

    win10系統(tǒng)VS2019配置點(diǎn)云庫(kù)PCL1.12.1的詳細(xì)流程

    這篇文章主要介紹了win10系統(tǒng)VS2019配置點(diǎn)云庫(kù)PCL1.12.1的教程與經(jīng)驗(yàn)總結(jié),本文記錄小白在配置過程中踩過的一些小坑,需要的朋友可以參考下
    2022-07-07
  • C++實(shí)現(xiàn)惡搞電腦關(guān)機(jī)小程序的示例代碼

    C++實(shí)現(xiàn)惡搞電腦關(guān)機(jī)小程序的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的惡搞電腦關(guān)機(jī)小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-11-11
  • C語(yǔ)言輾轉(zhuǎn)相除法求2個(gè)數(shù)的最小公約數(shù)

    C語(yǔ)言輾轉(zhuǎn)相除法求2個(gè)數(shù)的最小公約數(shù)

    輾轉(zhuǎn)相除法最大的用途就是用來(lái)求兩個(gè)數(shù)的最大公約數(shù)。下面通過本文給大家介紹C語(yǔ)言輾轉(zhuǎn)相除法求2個(gè)數(shù)的最小公約數(shù),非常不錯(cuò),感興趣的朋友一起看看吧
    2016-12-12
  • C++歸并算法實(shí)例

    C++歸并算法實(shí)例

    這篇文章主要介紹了C++歸并算法,實(shí)例分析了C++實(shí)現(xiàn)基于歸并算法合并線性表的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 詳談signed 關(guān)鍵字

    詳談signed 關(guān)鍵字

    c++中關(guān)鍵字有幾十個(gè),其中類型修飾關(guān)鍵字有l(wèi)ong, short, singed, unsigned。今天我們就來(lái)談一下經(jīng)常被大家忽視的signed關(guān)鍵字
    2015-01-01
  • C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)

    C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn),,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • C 語(yǔ)言restrict 關(guān)鍵字的使用淺談

    C 語(yǔ)言restrict 關(guān)鍵字的使用淺談

    C 語(yǔ)言restrict 關(guān)鍵字的使用淺談,需要的朋友可以參考一下
    2013-04-04

最新評(píng)論