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

C語言數(shù)據(jù)結(jié)構(gòu)系列隊(duì)列篇

 更新時(shí)間:2022年02月24日 16:12:57   作者:檸檬葉子C  
本章我們將學(xué)習(xí) "隊(duì)列" ,首先介紹隊(duì)列的概念和結(jié)構(gòu),然后我們將著重講解棧的實(shí)現(xiàn)。我們從零開始寫隊(duì)列的接口,并從零開始步步解讀。本章將繼續(xù)鞏固畫思路草圖的能力,只要思路草圖畫好了,就可以很輕松地將其轉(zhuǎn)換成代碼

一、隊(duì)列(Queue)

0x00 隊(duì)列的概念

?? 概念:

① 隊(duì)列只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表。

② 入隊(duì)列,進(jìn)行插入操作的一端稱為 隊(duì)尾。出隊(duì)列,進(jìn)行刪除操作的一端稱為 隊(duì)頭。

③ 隊(duì)列中的元素遵循先進(jìn)先出的原則,即 FIFO?原則(First In First Out)

0x01 隊(duì)列的結(jié)構(gòu)

?? 結(jié)構(gòu):

二、隊(duì)列的定義

0x00 鏈?zhǔn)疥?duì)列

typedef int QueueDataType;   //隊(duì)列類型
 
typedef struct QueueNode {
    struct QueueNode* next;  //指向下一個(gè)節(jié)點(diǎn)
    QueueDataType data;      //數(shù)據(jù)
} QueueNode;
 
typedef struct Queue {
    QueueNode* pHead;        //頭指針
    QueueNode* pTail;        //尾指針
} Queue;

? 為什么不使用單鏈表?

?? 單鏈表我們只定義了一個(gè)指針指向頭,沒有定義尾指針。因?yàn)槎x尾指針解決不了問題,比如尾插尾刪。所以我們沒有必要定義一個(gè)結(jié)構(gòu)體把他們封到一起。這里我們?cè)俣x一個(gè)頭指針 head 一個(gè)尾指針 tail?,這兩個(gè)指針才有意義。因?yàn)楦鶕?jù)隊(duì)列的性質(zhì),我們只會(huì)在隊(duì)尾插,不會(huì)再隊(duì)尾刪。所以這個(gè)尾指針的價(jià)值就得到了完美的體現(xiàn),實(shí)際中定義幾個(gè)指針是看你的需求確定的。

0x02?接口函數(shù)

?? 這是需要實(shí)現(xiàn)幾個(gè)接口函數(shù):

void QueueInit(Queue* pQ);                  //隊(duì)列初始化
void QueueDestroy(Queue* pQ);               //銷毀隊(duì)列
bool QueueIsEmpty(Queue* pQ);               //判斷隊(duì)列是否為空
void QueuePush(Queue* pQ, QueueDataType x); //入隊(duì)
void QueuePop(Queue* pQ);                   //出隊(duì)
QueueDataType QueueFront(Queue* pQ);        //返回隊(duì)頭數(shù)據(jù)
QueueDataType QueueBack(Queue* pQ);         //返回隊(duì)尾數(shù)據(jù)
int QueueSize(Queue* pQ);                   //求隊(duì)列大小

三、隊(duì)列的實(shí)現(xiàn)

0x00 隊(duì)列初始化(QueueInit)

?? Queue.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
 
typedef int QueueDataType;   //隊(duì)列類型
 
typedef struct QueueNode {
    struct QueueNode* next;  //指向下一個(gè)節(jié)點(diǎn)
    QueueDataType data;      //數(shù)據(jù)
} QueueNode;
 
typedef struct Queue {
    QueueNode* pHead;        //頭指針
    QueueNode* pTail;        //尾指針
} Queue;
 
void QueueInit(Queue* pQ);   //隊(duì)列初始化

?? Queue.c

/* 隊(duì)列初始化:將頭尾指針置為NULL */
void QueueInit(Queue* pQ) {
    assert(pQ);                          //防止傳入的pQ為空
 
    pQ->pHead = pQ->pTail = NULL;        //將頭尾指針置空
}

?? 解析:首先使用斷言防止傳入的pQ為空。初始化只需要把頭指針和尾指針都置成空即可。

0x01 銷毀隊(duì)列(QueueDestroy)

/* 銷毀隊(duì)列:free掉所有隊(duì)列元素并將頭尾置空 */
void QueueDestroy(Queue* pQ) {
    assert(pQ);                          //防止傳入的pQ為空
 
    QueueNode* cur = pQ->pHead;          //創(chuàng)建遍歷指針cur
    while(cur != NULL) {                 //cur不為空就進(jìn)入循環(huán)
        QueueNode* curNext = cur->next;  //信標(biāo)指針curNext,防止釋放cur后找不到其下一個(gè)節(jié)點(diǎn)
        free(cur);                       //釋放cur當(dāng)前指向的節(jié)點(diǎn)
        cur = curNext;                   //移動(dòng)指針cur
    }
    pQ->pHead = pQ->pTail = NULL;        //置空干掉野指針
}

?? 解讀:

① 首先斷言防止傳入的pQ為空。

② 銷毀要把所有節(jié)點(diǎn)都釋放掉,我們創(chuàng)建遍歷指針 cur 遍歷整個(gè)隊(duì)列。既然要釋放 cur 指向的節(jié)點(diǎn),為了防止釋放 cur 之后找不到其下一個(gè)節(jié)點(diǎn)導(dǎo)致無法移動(dòng),我們這里創(chuàng)建一個(gè)類似于信標(biāo)性質(zhì)的指針 curNext 來記錄一下 cur 的下一個(gè)節(jié)點(diǎn),之后再 free 掉 cur,這樣就可以移動(dòng) cur 了。

③ 最后為了防止野指針,還需要把頭指針和尾指針都置為空。

0x02 判斷隊(duì)列是否為空(HeapIsEmpty)

?? Queue.h

bool QueueIsEmpty(Queue* pQ);               //判斷隊(duì)列是否為空

?? 解讀:布爾值,返回 true 或 false

?? Queue.c

/* 判斷隊(duì)列是否為空 */
bool QueueIsEmpty(Queue* pQ) {
    assert(pQ);                          //防止傳入的pQ為空
 
    return pQ->pHead == NULL;            //如果成立則為True,不成立則為False
}

?? 解讀:

① 首先斷言防止傳入的pQ為空。

② 判斷隊(duì)列是否為空,可以直接返回,巧妙地利用布爾類型的特性。如果 pQ->pHead == NULL 成立則為真,會(huì)返回 true;不成立則為假,會(huì)返回 false。

0x03 入隊(duì)(QueuePush)

?? Queue.h

void QueuePush(Queue* pQ, QueueDataType x); //入隊(duì)

?? Queue.c

/* 入隊(duì):隊(duì)尾入數(shù)據(jù),對(duì)頭出數(shù)據(jù)。如果是第一個(gè)入隊(duì)的則既要當(dāng)頭又當(dāng)尾 */
void QueuePush(Queue* pQ, QueueDataType x) {
    assert(pQ);             //防止傳入的pQ為空
 
    /* 創(chuàng)建新節(jié)點(diǎn):創(chuàng)建一個(gè)大小為QueueNode的空間 */
    QueueNode* new_node = (QueueNode*)malloc(sizeof(QueueNode));
    /* 檢查malloc */
    if(new_node == NULL) {
        printf("malloc failed!\n");
        exit(-1);
    }
    /* 放置 */
    new_node->data = x;     //待插入的數(shù)據(jù)
    new_node->next = NULL;  //默認(rèn)為空
    
    /* 入隊(duì):
     *【思路草圖】
     *   情況1:隊(duì)列為空:既當(dāng)頭又當(dāng)尾
     *         [new_node]
     *           ↑    ↑
     *         pHead pTail
     * 
     *   情況2:隊(duì)列不為空:隊(duì)尾入數(shù)據(jù)
     *          [] -> [] -> [] -> []   ->  [new_node]
     *         pHead             pTail     pTail->next
     *                            ↓             ↑
     *                            ----------→ pTail(更新尾指針)
     */
    if(pQ->pHead == NULL) {                //情況1: 隊(duì)列為空
        pQ->pHead = pQ->pTail = new_node;  //       既當(dāng)頭又當(dāng)尾
    } else {                               //情況2: 隊(duì)列不為空
        pQ->pTail->next = new_node;        //       在現(xiàn)有尾的后一個(gè)節(jié)點(diǎn)放置new_node
        pQ->pTail = new_node;              //       更新pTail,使它指向新的尾
    }
}

?? 解讀:

① 首先斷言防止傳入的pQ為空。

② 我們首先要?jiǎng)?chuàng)建新節(jié)點(diǎn)。通過 malloc 動(dòng)態(tài)內(nèi)存開辟一塊 QueueNode 大小的空間,都學(xué)到這里了大家想必都養(yǎng)成了檢查 malloc 的好習(xí)慣了吧?。最后放置數(shù)據(jù)嗎,將待插入的數(shù)據(jù) x 交給 data,next 默認(rèn)置空,和之前學(xué)鏈表一樣,這里就不過多贅述了。

③ 新節(jié)點(diǎn)創(chuàng)建好后,我們可以開始寫入隊(duì)的操作了。首先要理解隊(duì)列的性質(zhì):隊(duì)尾入數(shù)據(jù),隊(duì)頭出數(shù)據(jù)。這里既然是入隊(duì),就要在對(duì)尾后面進(jìn)行插入。這里我們還要考慮到如果隊(duì)列為空的情況,這時(shí)我們要把頭指針和尾指針都交付給 new_node 。為了理清思路,我們可以畫一個(gè)思路草圖來幫助我們更好地理解:

有了這個(gè)圖,我們就可以清楚地實(shí)現(xiàn)了:

if(pQ->pHead == NULL) {                //情況1: 隊(duì)列為空
    pQ->pHead = pQ->pTail = new_node;  //       既當(dāng)頭又當(dāng)尾
}
else {                                 //情況2: 隊(duì)列不為空
    pQ->pTail->next = new_node;        //       在現(xiàn)有尾的后一個(gè)節(jié)點(diǎn)放置new_node
    pQ->pTail = new_node;              //       更新pTail,使它指向新的尾
}

當(dāng)隊(duì)列為空時(shí),令頭指針和尾指針都指向 new_node ,當(dāng)隊(duì)列不為空時(shí),再尾部地下一個(gè)節(jié)點(diǎn)放置 new_node?,隨后再更新尾指針讓其指向新的尾(new_node 的位置)。

0x04 出隊(duì)(QueuePop)

?? Queue.h

void QueuePop(Queue* pQ);                   //出隊(duì)

?? Queue.c

/* 出隊(duì):隊(duì)尾入數(shù)據(jù),對(duì)頭出數(shù)據(jù) */ 
void QueuePop(Queue* pQ) {
    assert(pQ);                            //防止傳入的pQ為空
    assert(!QueueIsEmpty(pQ));             //防止隊(duì)列為空
 
    /* 出隊(duì):
     *【思路草圖】
     *        [free] ->  []     -> [] -> []
     *        pHead    headNext  
     *           ↓         ↑
     *           -------→ pHead(更新頭指針)
     */
    QueueNode* headNext = pQ->pHead->next; //信標(biāo)指針HeadNext
    free(pQ->pHead);
    pQ->pHead = headNext;                  //更新頭
 
    /* 如果隊(duì)內(nèi)都被刪完了,不處理pTail就會(huì)帶來野指針的隱患 
     * 【思路草圖】
     *          NULL               已經(jīng)被free掉的內(nèi)存!
     *           ↑                         ↑   (野指針警告)
     *         pHead(因?yàn)镠eadNext是NULL)  pTail
    */
    if(pQ->pHead == NULL)                  //如果pHead為空
        pQ->pTail = NULL;                  //處理一下尾指針,將尾指針置空
}

?? 解讀:

① 首先斷言防止傳入的 pQ 為空,這里還要放置隊(duì)列為空,如果隊(duì)列為空還要求出隊(duì)的話會(huì)出問題的,所以這里要斷言一下 QueueIsEmpty 為假。

② 思路草圖如下:

出數(shù)據(jù)需要釋放,和銷毀一樣,這里使用一個(gè)類似于信標(biāo)性質(zhì)的指針來記錄 pHead 的下一個(gè)節(jié)點(diǎn),之后我們就可以大膽地釋放 pHead 而不用擔(dān)心找不到了。free 掉之后更新頭即可,令頭指針指向 headNext 即可。?

?? 注意:這里還要考慮一個(gè)問題,如果隊(duì)內(nèi)都被刪完了,pHead 往后走指向空,但是 pTail 仍然指向那塊已經(jīng)被 free 掉的空間。pTail 就是一個(gè)典型的野指針。

我們可以不用擔(dān)心 pHead,因?yàn)楹竺鏇]有數(shù)據(jù)他會(huì)自然指向 NULL,但是我們這里得關(guān)注 pTail !我們需要手動(dòng)處理一下它:

如果 pHead 為空,我們就把 pTail 也置為空即可。

 if(pQ->pHead == NULL)                  //如果pHead為空
        pQ->pTail = NULL;               //處理一下尾指針,將尾指針置空

0x05?返回隊(duì)頭數(shù)據(jù)(QueueFront)

?? Queue.h

QueueDataType QueueFront(Queue* pQ);        //返回隊(duì)頭數(shù)據(jù)

?? Queue.c

/* 返回隊(duì)頭數(shù)據(jù) */
QueueDataType QueueFront(Queue* pQ) {
    assert(pQ);                            //防止傳入的pQ為空
    assert(!QueueIsEmpty(pQ));             //防止隊(duì)列為空
 
    return pQ->pHead->data;
}  

?? 解讀:

① 首先斷言防止傳入的 pQ 為空,這里我們還是要斷言一下 QueueIsEmpty 為假,因?yàn)槿绻?duì)內(nèi)沒有數(shù)據(jù),還返回個(gè)錘子數(shù)據(jù)呢。

② 這里直接返回頭的數(shù)據(jù)即可,特別簡(jiǎn)單沒有什么好講的。

0x06?返回隊(duì)尾數(shù)據(jù)(QueueBack)

?? Queue.h

QueueDataType QueueBack(Queue* pQ);         //返回隊(duì)尾數(shù)據(jù)

?? Queue.c

/* 返回隊(duì)尾數(shù)據(jù) */
QueueDataType QueueBack(Queue* pQ) {
    assert(pQ);                            //防止傳入的pQ為空
    assert(!QueueIsEmpty(pQ));             //防止隊(duì)列為空
 
    return pQ->pTail->data;
}

?? 解讀:

① 首先斷言防止傳入的 pQ 為空,斷言一下 QueueIsEmpty 為假。

② 這里直接返回隊(duì)尾的數(shù)據(jù)即可。

0x07?求隊(duì)列大?。≦ueueSize)

?? Queue.h

int QueueSize(Queue* pQ);                   //求隊(duì)列大小

?? Queue.c

/* 求隊(duì)列大小:計(jì)數(shù)器法 */
int QueueSize(Queue* pQ) {
    assert(pQ);             //防止傳入的pQ為空
 
    int count = 0;          //計(jì)數(shù)器           
    QueueNode* cur = pQ->pHead;    //創(chuàng)建遍歷指針cur
    while(cur != NULL) {
        ++count;            //計(jì)數(shù)+1
        cur = cur->next;    //移動(dòng)指針cur
    }
    return count;
}

?? 解讀:這里我們采用計(jì)數(shù)器法來求大小即可,調(diào)用一次就是 O(N)?,也沒什么不好的。

① 首先斷言防止傳入的 pQ 為空。

② 創(chuàng)建計(jì)數(shù)器變量和遍歷指針 cur,遍歷整個(gè)隊(duì)列并計(jì)數(shù),最后返回計(jì)數(shù)的結(jié)果即可。

0x08 完整代碼

?? Queue.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
 
typedef int QueueDataType;   //隊(duì)列類型
 
typedef struct QueueNode {
    struct QueueNode* next;  //指向下一個(gè)節(jié)點(diǎn)
    QueueDataType data;      //數(shù)據(jù)
} QueueNode;
 
typedef struct Queue {
    QueueNode* pHead;        //頭指針
    QueueNode* pTail;        //尾指針
} Queue;
 
void QueueInit(Queue* pQ);                  //隊(duì)列初始化
void QueueDestroy(Queue* pQ);               //銷毀隊(duì)列
bool QueueIsEmpty(Queue* pQ);               //判斷隊(duì)列是否為空
void QueuePush(Queue* pQ, QueueDataType x); //入隊(duì)
void QueuePop(Queue* pQ);                   //出隊(duì)
QueueDataType QueueFront(Queue* pQ);        //返回隊(duì)頭數(shù)據(jù)
QueueDataType QueueBack(Queue* pQ);         //返回隊(duì)尾數(shù)據(jù)
int QueueSize(Queue* pQ);                   //求隊(duì)列大小

?? Queue.c

#include <Queue.h>
 
/* 隊(duì)列初始化:將頭尾指針置為NULL */
void QueueInit(Queue* pQ) {
    assert(pQ);                          //防止傳入的pQ為空
 
    pQ->pHead = pQ->pTail = NULL;        //將頭尾指針置空
}
 
/* 銷毀隊(duì)列:free掉所有隊(duì)列元素并將頭尾置空 */
void QueueDestroy(Queue* pQ) {
    assert(pQ);                          //防止傳入的pQ為空
 
    QueueNode* cur = pQ->pHead;          //創(chuàng)建遍歷指針cur
    while(cur != NULL) {                 //cur不為空就進(jìn)入循環(huán)
        QueueNode* curNext = cur->next;  //信標(biāo)指針curNext,防止釋放cur后找不到其下一個(gè)節(jié)點(diǎn)
        free(cur);                       //釋放cur當(dāng)前指向的節(jié)點(diǎn)
        cur = curNext;                   //移動(dòng)指針cur
    }
    pQ->pHead = pQ->pTail = NULL;        //置空干掉野指針
}
 
/* 判斷隊(duì)列是否為空 */
bool QueueIfEmpty(Queue* pQ) {
    assert(pQ);                          //防止傳入的pQ為空
 
    return pQ->pHead == NULL;            //如果成立則為True,不成立則為False
}
 
/* 入隊(duì):隊(duì)尾入數(shù)據(jù),對(duì)頭出數(shù)據(jù)。如果是第一個(gè)入隊(duì)的則既要當(dāng)頭又當(dāng)尾 */
void QueuePush(Queue* pQ, QueueDataType x) {
    assert(pQ);             //防止傳入的pQ為空
 
    /* 創(chuàng)建新節(jié)點(diǎn):創(chuàng)建一個(gè)大小為QueueNode的空間 */
    QueueNode* new_node = (QueueNode*)malloc(sizeof(QueueNode));
    /* 檢查malloc */
    if(new_node == NULL) {
        printf("malloc failed!\n");
        exit(-1);
    }
    /* 放置 */
    new_node->data = x;     //待插入的數(shù)據(jù)
    new_node->next = NULL;  //默認(rèn)為空
    
    /* 入隊(duì):
     *【思路草圖】
     *   情況1:隊(duì)列為空:既當(dāng)頭又當(dāng)尾
     *         [new_node]
     *           ↑    ↑
     *         pHead pTail
     * 
     *   情況2:隊(duì)列不為空:隊(duì)尾入數(shù)據(jù)
     *          [] -> [] -> [] -> []   ->  [new_node]
     *         pHead             pTail     pTail->next
     *                            ↓             ↑
     *                            ----------→ pTail(更新尾指針)
     */
    if(pQ->pHead == NULL) {                //情況1: 隊(duì)列為空
        pQ->pHead = pQ->pTail = new_node;  //       既當(dāng)頭又當(dāng)尾
    } else {                               //情況2: 隊(duì)列不為空
        pQ->pTail->next = new_node;        //       在現(xiàn)有尾的后一個(gè)節(jié)點(diǎn)放置new_node
        pQ->pTail = new_node;              //       更新pTail,使它指向新的尾
    }
}
 
/* 出隊(duì):隊(duì)尾入數(shù)據(jù),對(duì)頭出數(shù)據(jù) */ 
void QueuePop(Queue* pQ) {
    assert(pQ);                            //防止傳入的pQ為空
    assert(!QueueIsEmpty(pQ));             //防止隊(duì)列為空
 
    /* 出隊(duì):
    
     *【思路草圖】
     *        [free] ->  []     -> [] -> []
     *        pHead    headNext  
     *           ↓         ↑
     *           -------→ pHead(更新頭指針)
     */
    QueueNode* headNext = pQ->pHead->next; //信標(biāo)指針HeadNext,防止釋放pHead后找不到其下一個(gè)節(jié)點(diǎn)
    free(pQ->pHead);
    pQ->pHead = headNext;                  //更新頭
 
    /* 如果隊(duì)內(nèi)都被刪完了,不處理pTail就會(huì)帶來野指針的隱患 
     * 【思路草圖】
     *          NULL               已經(jīng)被free掉的空間!
     *           ↑                         ↑   (野指針)
     *         pHead(因?yàn)镠eadNext是NULL)  pTail
    */
    if(pQ->pHead == NULL)                  //如果pHead為空
        pQ->pTail = NULL;                  //處理一下尾指針,將尾指針置空
}
 
/* 返回隊(duì)頭數(shù)據(jù) */
QueueDataType QueueFront(Queue* pQ) {
    assert(pQ);                            //防止傳入的pQ為空
    assert(!QueueIsEmpty(pQ));             //防止隊(duì)列為空
 
    return pQ->pHead->data;
}   
 
/* 返回隊(duì)尾數(shù)據(jù) */
QueueDataType QueueBack(Queue* pQ) {
    assert(pQ);                            //防止傳入的pQ為空
    assert(!QueueIsEmpty(pQ));             //防止隊(duì)列為空
 
    return pQ->pTail->data;
}
 
/* 求隊(duì)列大?。河?jì)數(shù)器法 */
int QueueSize(Queue* pQ) {
    assert(pQ);             //防止傳入的pQ為空
 
    int count = 0;          //計(jì)數(shù)器           
    QueueNode* cur = pQ->pHead;    //創(chuàng)建遍歷指針cur
    while(cur != NULL) {
        ++count;            //計(jì)數(shù)+1
        cur = cur->next;    //移動(dòng)指針cur
    }
    return count;
}

?? Test.c

#include "Queue.h"
 
void TestQueue1() {
    Queue q;
    QueueInit(&q);
 
    QueuePush(&q, 1);
    QueuePush(&q, 2);
    QueuePush(&q, 3);
    QueuePush(&q, 4);
 
    QueuePop(&q);
    QueuePop(&q);
    QueuePop(&q);
    QueuePop(&q);
    //QueuePop(&q);
 
    QueueDestroy(&q);
}
 
void TestQueue2() {
    Queue q;
    QueueInit(&q);
 
    QueuePush(&q, 1);
    QueuePush(&q, 2);
    QueuePush(&q, 3);
    QueuePush(&q, 4);
 
    //假設(shè)先入了1 2,讓1出來,再繼續(xù)入,它的順序還是不會(huì)變。
    // 永遠(yuǎn)保持先進(jìn)先出的,無論是入了兩個(gè)出兩個(gè),再入再出,還是全部入完了再出,都是不會(huì)變的。這就是隊(duì)列的性質(zhì)
    while(!QueueIsEmpty(&q)) {
        QueueDataType front = QueueFront(&q);
        printf("%d ", front);
        QueuePop(&q);  //pop掉去下一個(gè)
    }
    printf("\n");
 
    QueueDestroy(&q);
}
 
int main(void) {
    TestQueue2();
 
    return 0;
}

參考資料:

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

?? 筆者:王亦優(yōu)

?? 更新: 2021.11.17

? 勘誤: 無

?? 聲明: 由于作者水平有限,本文有錯(cuò)誤和不準(zhǔn)確之處在所難免,本人也很想知道這些錯(cuò)誤,懇望讀者批評(píng)指正!

本篇完。

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

相關(guān)文章

  • 淺談C++流庫的基本結(jié)構(gòu)

    淺談C++流庫的基本結(jié)構(gòu)

    本文主要介紹了淺談C++流庫的基本結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 深入理解Java事務(wù)的原理與應(yīng)用

    深入理解Java事務(wù)的原理與應(yīng)用

    下面小編就為大家?guī)硪黄钊肜斫釰ava事務(wù)的原理與應(yīng)用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制整數(shù)的方法

    C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制整數(shù)的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制整數(shù)的方法,涉及C++字符串與數(shù)制轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C語言實(shí)現(xiàn)BMP圖像細(xì)化處理

    C語言實(shí)現(xiàn)BMP圖像細(xì)化處理

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)BMP圖像細(xì)化處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++實(shí)現(xiàn)簡(jiǎn)單的信息管理系統(tǒng)

    C++實(shí)現(xiàn)簡(jiǎn)單的信息管理系統(tǒng)

    這篇文章主要為大家介紹了C++實(shí)現(xiàn)簡(jiǎn)單的信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++ Boost Phoenix庫示例分析使用

    C++ Boost Phoenix庫示例分析使用

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++使用VLD檢測(cè)內(nèi)存泄漏

    C++使用VLD檢測(cè)內(nèi)存泄漏

    本文主要介紹了C++使用VLD檢測(cè)內(nèi)存泄漏,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解如何配置CLion作為Qt5開發(fā)環(huán)境的方法

    詳解如何配置CLion作為Qt5開發(fā)環(huán)境的方法

    這篇文章主要介紹了詳解如何配置CLion作為Qt5開發(fā)環(huán)境的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 一文秒懂C語言/C++內(nèi)存管理(推薦)

    一文秒懂C語言/C++內(nèi)存管理(推薦)

    在C++中,內(nèi)存分為:棧、堆、自由存儲(chǔ)區(qū)、全局/靜態(tài)存儲(chǔ)區(qū)、常量存儲(chǔ)區(qū)。這篇文章主要介紹了一文秒懂C語言/C++內(nèi)存管理,需要的朋友可以參考下
    2020-11-11
  • C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)

    C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)

    為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)
    2022-06-06

最新評(píng)論

凌源市| 蒲江县| 嘉义县| 营口市| 漠河县| 营山县| 湖南省| 隆昌县| 美姑县| 武夷山市| 班戈县| 化隆| 乌什县| 惠水县| 海原县| 绵竹市| 静海县| 固始县| 上饶县| 城固县| 峨山| 苍梧县| 永康市| 贵南县| 永济市| 梅州市| 西畴县| 隆回县| 淅川县| 扶沟县| 苗栗县| 观塘区| 时尚| 鞍山市| 屯门区| 长垣县| 五指山市| 大理市| 翼城县| 元阳县| 延吉市|