国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)介

  • 隊(duì)列也是一種數(shù)據(jù)結(jié)構(gòu),隊(duì)列也可以用來(lái)存放數(shù)字
  • 每次只能向隊(duì)列里將入一個(gè)數(shù)字,每次只能從隊(duì)列里獲得一個(gè)數(shù)字
  • 在隊(duì)列中,允許插入的一段稱為入隊(duì)口,允許刪除的一段稱為出隊(duì)口
  • 它的原則是先進(jìn)先出(FIFO: first in first out),先進(jìn)入隊(duì)列的數(shù)據(jù)先出去,后進(jìn)入的后出去。
  • 隊(duì)列的插入操作稱為入隊(duì)
  • 隊(duì)列的刪除操作稱為出隊(duì)

以下是隊(duì)列中進(jìn)行入隊(duì)和出隊(duì)的演示操作,數(shù)據(jù)1先進(jìn),也是數(shù)據(jù)1先出

數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn)),C語(yǔ)言初階學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

代碼實(shí)現(xiàn)

  1. 初始化隊(duì)列
typedef struct queue{
    int* elements;  // 存儲(chǔ)區(qū)
    int cap;  // 隊(duì)列的容量
    int rear;  // 入隊(duì)口
    int front;  // 出隊(duì)口
    int size;  // 隊(duì)列當(dāng)前大小
}queue_t;
  1. 初始化隊(duì)列
void queue_init(queue_t* pqueue, int cap){
    // 分配存儲(chǔ)區(qū)空間
    pqueue->elements = malloc(sizeof(int) * cap);
    if(pqueue->elements == NULL){
        printf("內(nèi)存分配失敗\n");
        return;
    }
    // 賦值容量
    pqueue->cap = cap;
    // 此時(shí)因?yàn)闆](méi)有收數(shù)據(jù),出隊(duì)口和入隊(duì)口都是0,隊(duì)列當(dāng)前大小也是0
    pqueue->rear = 0;
    pqueue->front = 0;
    pqueue->size = 0;
}
  1. 銷毀隊(duì)列
void queue_deinit(queue_t* pqueue){
    free(pqueue->elements);
    pqueue->elements = NULL;
    pqueue->cap = 0;
    pqueue->rear = 0;
    pqueue->front = 0;
    pqueue->size = 0;
}
  1. 判斷隊(duì)列是否已滿
int queue_full(queue_t* pqueue){
    // 當(dāng)size==cap的時(shí)候,說(shuō)明已滿,反之則沒(méi)滿
    return pqueue->size == pqueue->cap;
}
  1. 判斷隊(duì)列是否為空
int queue_empty(queue_t* pqueue){
    // 當(dāng)size==0的時(shí)候,說(shuō)明為空,反之則不為空
    return pqueue->size == 0;
}

以下是一組入隊(duì)出隊(duì)的操作

數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn)),C語(yǔ)言初階學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

  1. 入隊(duì)
void queue_push(queue_t* pqueue, int data){
    // 參考上面的視頻,當(dāng)此時(shí)還存在入隊(duì)操作時(shí),說(shuō)明隊(duì)列還沒(méi)滿,
    // 但是此時(shí)rear已經(jīng)超過(guò)索引值了(也就是與cap值相等),需要將rear重置為0;
    if(pqueue->rear == pqueue=>cap)
        pqueue->rear = 0;
    pqueue->elements[pqueue->rear++] = data;
    pqueue->size++;
}
  1. 出隊(duì)
int queue_pop(queue_t*  pqueue){
    // 與入隊(duì)函數(shù)類似,當(dāng)此時(shí)還存在出隊(duì)操作時(shí),說(shuō)明隊(duì)列不為空,
    // 但是此時(shí)front已經(jīng)超過(guò)索引值了(也就是與cap值相等),需要將front重置為0
    if(pqueue->front == pqueue->cap)
        pqueue->front = 0;
    pqueue->size--;
    return pqueue->elements[pqueue->front++];
}

實(shí)例代碼

創(chuàng)建三個(gè)文件: queue.c、queue.hmain.c,實(shí)現(xiàn)上面動(dòng)圖中的操作文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-637490.html

  • queue.c定義隊(duì)列具體的函數(shù)
#include "queue.h"

// 初始化隊(duì)列
void queue_init(queue_t* pqueue, int cap){
    pqueue->elements = malloc(sizeof(int) * cap);
    if(pqueue->elements == NULL){	
        printf("分配隊(duì)列存儲(chǔ)區(qū)失敗!\n");
	return;
    }
    pqueue->cap = cap;
    pqueue->rear = 0;
    pqueue->front = 0;
    pqueue->size = 0;
}

// 銷毀隊(duì)列
void queue_deinit(queue_t* pqueue){
    free(pqueue->elements);
    pqueue->elements = NULL;
    pqueue->cap = 0;
    pqueue->rear = 0;
    pqueue->front = 0;
    pqueue->size = 0;
}

// 入隊(duì)
void queue_push(queue_t* pqueue, int data){
    if(pqueue->rear == pqueue->cap)
	pqueue->rear = 0;
    pqueue->elements[pqueue->rear++] = data;
    pqueue->size++;
}


// 出隊(duì)
int queue_pop(queue_t* pqueue){
    if(pqueue->front == pqueue->cap)
	pqueue->front = 0;
    pqueue->size--;
    return pqueue->elements[pqueue->front++];
}

//判斷隊(duì)列是否已滿
int queue_full(queue_t* pqueue){
    return pqueue->size == pqueue->cap;
}

// 判斷隊(duì)列是否為空
int queue_empty(queue_t* pqueue){
    return pqueue->size == 0;
}
  • queue.h聲明隊(duì)列的相關(guān)函數(shù)和定義隊(duì)列
#ifndef __QUEUE_H
#define __QUEUE_H

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

// 定義隊(duì)列
typedef struct queue{
    int* elements;
    int cap;
    int rear;
    int front;
    int size;

}queue_t;

extern void queue_init(queue_t* pqueue, int cap);
extern void queue_deinit(queue_t* pqueue);
extern void queue_push(queue_t* pqueue, int data);
extern int queue_pop(queue_t* pqueue);
extern int queue_full(queue_t* pqueue);
extern int queue_empty(queue_t* pqueue);

#endif
  • main.c主函數(shù)使用隊(duì)列
#include "queue.h"

int main(void){
    // 1. 創(chuàng)建一個(gè)隊(duì)列
    queue_t queue;
    // 2. 初始化隊(duì)列
    queue_init(&queue, 4);
    // 3. 入隊(duì)4個(gè)數(shù)據(jù)
    printf("開(kāi)始第一次入隊(duì)(4個(gè)數(shù)據(jù)): ");
    int data = 10;
    for(int i = 0; i < 4; i++){
    	if(!queue_full(&queue)){
	    printf("%d ", data);
	    queue_push(&queue, data);
	    data += 10;
	}
    }
    printf("\n此時(shí)還剩%d個(gè)數(shù)據(jù)\n\n", queue.size);
    
    // 4. 出隊(duì)2個(gè)數(shù)據(jù)
    printf("開(kāi)始第一次出隊(duì)(2個(gè)數(shù)據(jù)): ");
    for(int i = 0; i < 2; i++){
        if(!queue_empty(&queue)){
	    data = queue_pop(&queue);
	    printf("%d ", data);
	}
    }
    printf("\n此時(shí)還剩%d個(gè)數(shù)據(jù)\n\n", queue.size);
    
    // 5. 入隊(duì)2個(gè)數(shù)據(jù)
    printf("開(kāi)始第二次入隊(duì)(2個(gè)數(shù)據(jù)): ");
    data = 10;
    for(int i = 0; i < 2; i++){
        if(!queue_full(&queue)){
            printf("%d ", data);
            queue_push(&queue, data);
            data += 10;
        }
    }
    printf("\n此時(shí)還剩%d個(gè)數(shù)據(jù)\n\n", queue.size);

    // 6. 將所有數(shù)據(jù)全部取出
    printf("將全部數(shù)據(jù)取出: ");
    while(!queue_empty(&queue)){
    	data = queue_pop(&queue);
	printf("%d ", data);
    }
    printf("\n此時(shí)還剩%d個(gè)數(shù)據(jù)\n\n", queue.size);


    // 銷毀隊(duì)列
    queue_deinit(&queue);
    return 0;
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 《數(shù)據(jù)結(jié)構(gòu)初階》用隊(duì)列實(shí)現(xiàn)棧&&用棧實(shí)現(xiàn)隊(duì)列的細(xì)致解析

    《數(shù)據(jù)結(jié)構(gòu)初階》用隊(duì)列實(shí)現(xiàn)棧&&用棧實(shí)現(xiàn)隊(duì)列的細(xì)致解析

    目錄 一、??本章重點(diǎn) 二、??隊(duì)列實(shí)現(xiàn)棧 三、??棧實(shí)現(xiàn)隊(duì)列 四、??解題思路總結(jié) 用兩個(gè)隊(duì)列實(shí)現(xiàn)棧 用兩個(gè)棧實(shí)現(xiàn)隊(duì)列 解題思路總結(jié) ?我們有兩個(gè)隊(duì)列: ?入棧數(shù)據(jù)1、 2、 3 可以將數(shù)據(jù)入隊(duì)列至隊(duì)列一或者隊(duì)列二。 如何出棧? ?但出棧要先出1,怎么辦? 第一步 :

    2023年04月25日
    瀏覽(19)
  • 初階數(shù)據(jù)結(jié)構(gòu)(六)隊(duì)列的介紹與實(shí)現(xiàn)

    初階數(shù)據(jù)結(jié)構(gòu)(六)隊(duì)列的介紹與實(shí)現(xiàn)

    ??博主csdn個(gè)人主頁(yè):小小unicorn?? ?專欄分類:C++ ??代碼倉(cāng)庫(kù):小小unicorn的學(xué)習(xí)足跡?? ??????關(guān)注我?guī)銓W(xué)習(xí)編程知識(shí) 隊(duì)列:只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表。隊(duì)列遵守先進(jìn)先出FIFO(First In First Out)的原則。 入隊(duì)列:隊(duì)列的

    2024年02月11日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】——第八節(jié).優(yōu)先級(jí)隊(duì)列(小根堆的模擬實(shí)現(xiàn))

    【數(shù)據(jù)結(jié)構(gòu)初階】——第八節(jié).優(yōu)先級(jí)隊(duì)列(小根堆的模擬實(shí)現(xiàn))

    ?作者簡(jiǎn)介:大家好,我是未央; 博客首頁(yè): 未央.303 系列專欄:Java初階數(shù)據(jù)結(jié)構(gòu) 每日一句:人的一生,可以有所作為的時(shí)機(jī)只有一次,那就是現(xiàn)在?。?! 目錄 文章目錄 前言 引言 一、堆的概念 二、堆的性質(zhì)? 三、堆的操作 3.1 向下調(diào)整算法 3.2?小根堆的創(chuàng)建 3.3?向上調(diào)整

    2024年02月07日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】之堆(C語(yǔ)言實(shí)現(xiàn))

    【數(shù)據(jù)結(jié)構(gòu)初階】之堆(C語(yǔ)言實(shí)現(xiàn))

    前言 :在二叉樹(shù)基礎(chǔ)篇我們提到了二叉樹(shù)的順序?qū)崿F(xiàn),今天讓我們來(lái)學(xué)習(xí)一下特殊的二叉樹(shù)———堆的相關(guān)知識(shí)。 ?? 博客主頁(yè): 小鎮(zhèn)敲碼人 ?? 熱門(mén)專欄:數(shù)據(jù)結(jié)構(gòu)與算法 ?? 歡迎關(guān)注:??點(diǎn)贊 ????留言 ??收藏 ?? 任爾江湖滿血骨,我自踏雪尋梅香。 萬(wàn)千浮云遮碧月

    2024年04月09日
    瀏覽(25)
  • 【Golang】實(shí)現(xiàn)簡(jiǎn)單隊(duì)列(Queue)數(shù)據(jù)結(jié)構(gòu)

    ?在計(jì)算機(jī)科學(xué)中,隊(duì)列是一種特殊的線性數(shù)據(jù)結(jié)構(gòu),它遵循FIFO(先進(jìn)先出)原則。隊(duì)列中的元素只能從一端(稱為隊(duì)尾或后端)添加,并且只能從另一端(稱為隊(duì)頭或前端)移除。這種特性使得隊(duì)列在許多算法和數(shù)據(jù)結(jié)構(gòu)中都有廣泛的應(yīng)用,例如操作系統(tǒng)中的任務(wù)調(diào)度、網(wǎng)

    2024年01月19日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)初階之順序表(C語(yǔ)言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)初階之順序表(C語(yǔ)言實(shí)現(xiàn))

    順序表是數(shù)據(jù)結(jié)構(gòu)里面很基礎(chǔ)的一類,它是線性表的一種,其它線性表還有鏈表、棧和隊(duì)列等,今天來(lái)和博主一起學(xué)習(xí)關(guān)于順序表的知識(shí)吧。 順序表,它分為兩類: 動(dòng)態(tài)順序表 和 靜態(tài)順序表 ,這兩個(gè)表的區(qū)別就是 前者的空間不固定 ,是 支持?jǐn)U容 的,后者的 空間是固定

    2024年02月03日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】棧和隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)初階】棧和隊(duì)列

    1.1棧的概念和結(jié)構(gòu) 棧:一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作。進(jìn)行數(shù)據(jù)插入和刪除操作的一端稱為 棧頂 ,另一端稱為 棧底 。棧中的數(shù)據(jù)元素遵守 后進(jìn)先出 LIFO(Last In First Out)的原則。 壓棧:棧的插入操作叫做進(jìn)棧/壓棧/入棧,入數(shù)據(jù)在棧頂

    2024年02月05日
    瀏覽(47)
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)初階(10)----二叉樹(shù)的實(shí)現(xiàn)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)初階(10)----二叉樹(shù)的實(shí)現(xiàn)

    · CSDN的uu們,大家好。這里是C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)的第十講。 · 目標(biāo):前路坎坷,披荊斬棘,扶搖直上。 · 博客主頁(yè):?@姬如祎 · 收錄專欄:?數(shù)據(jù)結(jié)構(gòu)與算法 ? ? 目錄 1.?函數(shù)接口一覽 2.?函數(shù)接口的實(shí)現(xiàn) 2.1 BTNode* BuyNode(BTDataType x)?的實(shí)現(xiàn) 2.2?BTNode* CreateTree()?的實(shí)現(xiàn) ?2.3?void

    2023年04月08日
    瀏覽(25)
  • 隊(duì)列--C語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)

    隊(duì)列--C語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)

    本期帶大家一起用C語(yǔ)言實(shí)現(xiàn)隊(duì)列?????? 隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu),它按照先進(jìn)先出(FIFO)的原則進(jìn)行操作??梢园殃?duì)列想象成排隊(duì)買(mǎi)票或者排隊(duì)上公交車(chē)的隊(duì)伍。 順序隊(duì)列 由一個(gè)連續(xù)的內(nèi)存區(qū)域組成,可以存儲(chǔ)多個(gè)元素。隊(duì)列有兩個(gè)指針,分別指向隊(duì)頭(Front)和隊(duì)尾(

    2024年02月16日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)——隊(duì)列(C語(yǔ)言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)——隊(duì)列(C語(yǔ)言實(shí)現(xiàn))

    隊(duì)列是一種特殊的線性結(jié)構(gòu),數(shù)據(jù)只能在一端插入,數(shù)據(jù)也只能在另一端進(jìn)行刪除。插入數(shù)據(jù)的那一端稱之為隊(duì)尾,插入數(shù)據(jù)的動(dòng)作稱之為入隊(duì)。刪除數(shù)據(jù)的那一端稱之為隊(duì)頭,刪除數(shù)據(jù)的動(dòng)作稱之為出列。隊(duì)列遵守的是FIFO原則(Frist In First Out),即先進(jìn)先出原則。 隊(duì)列具

    2024年02月03日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包