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

【C/C++數(shù)據(jù)結(jié)構(gòu)與算法】C語(yǔ)言棧與隊(duì)列

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

目錄

一、棧

二、隊(duì)列

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


一、棧

特性:

  • 順序存儲(chǔ),后進(jìn)先出
  • 優(yōu)點(diǎn)是可隨機(jī)訪問(wèn),尾部增刪效率高
  • 缺點(diǎn)是可能會(huì)浪費(fèi)空間,不知道頭部增刪
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

#define CAPACITY 3  //默認(rèn)初識(shí)容量
typedef int SData;

typedef struct Stack 
{
    SData* data;
    size_t size;
    size_t capacity;
}Stack;

void Init(Stack* s) 
{
    assert(s);
    s->data = (SData*)malloc(sizeof(SData) * CAPACITY);
    if (s == NULL) 
    {
        perror("init::malloc");
        exit(1);
    }
    s->size = 0;
    s->capacity = CAPACITY;
}

bool Empty(Stack* s) 
{
    assert(s);
    return s->size == 0;
}

void CheckCapacity(Stack* s) 
{
    assert(s);
    if (s->size == s->capacity) {
        SData* tmp = (SData*)realloc(s->data, sizeof(SData) * (s->size + CAPACITY));
        if (tmp == NULL) 
        {
            perror("realloc");
            exit(1);
        }
        s->data = tmp;
        s->capacity += CAPACITY;
    }
}

void Push(Stack* s, SData x) 
{
    assert(s);
    CheckCapacity(s);
    s->data[s->size] = x;
    ++s->size;
}

void Pop(Stack* s) 
{
    assert(s);
    if (!Empty(s)) 
        --s->size;
}

size_t Size(Stack* s) 
{
    assert(s);
    printf("the stack size is %d\n", s->size);
    return s->size;
}

void PrintStack(Stack* s) 
{
    assert(s);
    if (!Empty(s)) 
    {
        int i = 0;
        while (i < s->size) 
        {
            printf("%d ", s->data[i]);
            ++i;
        }
        printf("\n");
    }

}

int main() 
{
    Stack s;
    Init(&s);
    Push(&s, 1);
    Push(&s, 3);
    Push(&s, 2);
    Push(&s, 4);
    Size(&s);
    PrintStack(&s); 
    Pop(&s);
    Pop(&s);
    Pop(&s);
    Pop(&s);
    Pop(&s);
    Size(&s);
    PrintStack(&s);
    return 0;
}

二、隊(duì)列

特性:

  • 鏈?zhǔn)酱鎯?chǔ),先進(jìn)先出
  • 優(yōu)點(diǎn)是無(wú)空間浪費(fèi),頭部增刪效率高
  • 缺點(diǎn)是不能隨機(jī)訪問(wèn),尾部增刪效率低
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int QData;

typedef struct Queue 
{
    QData data;
    struct Queue* next;
}Queue;

void Init(Queue* q) 
{
    assert(q);
    q->next = (Queue*)malloc(sizeof(Queue));
    q->next->next = NULL;
}

bool Empty(Queue* q) 
{
    assert(q);
    return q->next->next == NULL;
}

void Push(Queue* q, QData x) 
{
    assert(q);
    Queue* node = (Queue*)malloc(sizeof(Queue));
    node->data = x;
    node->next = q->next->next;
    q->next->next = node;
}

void Pop(Queue* q) 
{
    assert(q);
    if (!Empty(q)) 
    {
        Queue* cur = q->next->next;
        q->next->next = cur->next;
        free(cur);
        cur = NULL;
    }
}

size_t Size(Queue* q) 
{
    assert(q);
    size_t size = 0;
    if (!Empty(q)) 
    {
        Queue* cur = q->next->next;
        while (cur) 
        {
            ++size;
            cur = cur->next;
        }
    }
    printf("the list size is %d\n", size);
    return size;
}

void PrintQueue(Queue* q) 
{
    assert(q);
    if (!Empty(q)) 
    {
        Queue* cur = q->next->next;
        printf("%d ", cur->data);
        while (cur->next) 
        {
            printf("-> %d ", cur->next->data);
            cur = cur->next;
        }
        printf("\n");
    }
}

int main() 
{
    Queue q;
    Init(&q);
    Push(&q, 1);
    Push(&q, 3);
    Push(&q, 4);
    Push(&q, 2);
    Size(&q);
    PrintQueue(&q);
    Pop(&q);
    Pop(&q);
    Pop(&q);
    Pop(&q);
    Pop(&q);
    Size(&q);
    PrintQueue(&q);
    return 0;
}

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

特性:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-492242.html

  • 順序存儲(chǔ),先進(jìn)先出,頭刪尾增
  • 初始化設(shè)定空間容量CAPACITY,數(shù)據(jù)存儲(chǔ)量比空間容量少1(空位區(qū)分滿(mǎn)和空)
  • head和tail的加減要考慮隊(duì)列是否存滿(mǎn)以及和CAPACITY的關(guān)系
  • 判空:return tail == head;
  • 判滿(mǎn):return (tail + 1) % CAPACITY == head;
  • Push:判斷非滿(mǎn),tail = (tail + 1)% CAPACITY;
  • Pop: 判斷非空,head = (head + 1)% CAPACITY;
  • 優(yōu)點(diǎn):空間可重復(fù)利用,支持隨機(jī)訪問(wèn)
  • 缺點(diǎn):空間有限不可擴(kuò)容
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

#define CAPACITY 5     //總?cè)萘繛?,數(shù)據(jù)容量為4
typedef int CQData;

typedef struct CirQue 
{
    CQData* data;
    int head;
    int tail;
    int size;
}CirQue;

void Init(CirQue* cq) 
{
    assert(cq);
    cq->data = (CQData*)malloc(sizeof(CQData) * CAPACITY); //多開(kāi)辟一個(gè)空間
    cq->head = cq->tail = cq->size = 0;
}

bool Empty(CirQue* cq) 
{
    assert(cq);
    return cq->head == cq->tail;
}

bool Full(CirQue* cq) 
{
    assert(cq);
    return (cq->tail + 1) % CAPACITY == cq->head;
}

int Size(CirQue* cq) 
{
    assert(cq);
    return (cq->tail + CAPACITY - cq->head) % CAPACITY;
}

void Push(CirQue* cq, CQData x) 
{
    assert(cq);
    if (!Full(cq)) 
    {
        cq->data[cq->tail] = x;
        cq->tail = (cq->tail + 1) % CAPACITY;
    }
}

void Pop(CirQue* cq) 
{
    assert(cq);
    if (!Empty(cq)) 
        cq->head = (cq->head + 1) % CAPACITY;
}

void PrintCirQue(CirQue* cq) 
{
    assert(cq);
    if (!Empty(cq)) 
    {
        int pos = cq->head;
        int size = Size(cq);
        while (size--) 
        {
            printf("%d ", cq->data[pos]);
            pos = (pos + 1) % CAPACITY;
        }
        printf("\n");
    }
}

int main () 
{
    CirQue cq;
    Init(&cq);
    Push(&cq, 1);
    Push(&cq, 3);
    Push(&cq, 5);
    printf("the CirQue size is %d\n", Size(&cq));
    PrintCirQue(&cq);//1 3 5
    Push(&cq, 2);
    Push(&cq, 4);
    Push(&cq, 6);
    printf("the CirQue size is %d\n", Size(&cq));
    PrintCirQue(&cq);//1 3 5 2
    Pop(&cq);
    Pop(&cq);
    Pop(&cq);
    printf("the CirQue size is %d\n", Size(&cq));
    PrintCirQue(&cq);//2
    Push(&cq, 10);
    Push(&cq, 20);
    Push(&cq, 30);
    Push(&cq, 40);
    printf("the CirQue size is %d\n", Size(&cq));
    PrintCirQue(&cq);//2 10 20 30
    Pop(&cq);
    Pop(&cq);
    Pop(&cq);
    Pop(&cq);
    Pop(&cq);
    Pop(&cq);
    printf("the CirQue size is %d\n", Size(&cq));
    PrintCirQue(&cq);
    return 0;
}

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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ù)據(jù)結(jié)構(gòu)】棧與隊(duì)列

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

    2024年02月13日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——棧與隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)——棧與隊(duì)列

    目錄 一、棧 1.棧的定義 ?2.棧的分類(lèi)與基本操作 1. 順序棧 2.鏈棧 3.棧與遞歸的實(shí)現(xiàn) 1.遞歸的簡(jiǎn)單描述 2.遞歸過(guò)程及與棧的關(guān)聯(lián) 3.遞歸過(guò)程示意圖 二.隊(duì)列 1.隊(duì)列的定義 ?2.隊(duì)列的分類(lèi)與基本操作 1.順序隊(duì)列 2.鏈隊(duì)列 3.循環(huán)隊(duì)列 1.假溢出 ?2.循環(huán)隊(duì)列 3.循環(huán)隊(duì)列相關(guān)操作實(shí)現(xiàn):

    2024年02月04日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列詳解

    數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列詳解

    棧和隊(duì)列是一種特殊的線性結(jié)構(gòu),他與之前學(xué)的線性結(jié)構(gòu)不同,棧和隊(duì)列是擁有一種特殊規(guī)則的線性結(jié)構(gòu),雖然它是用數(shù)組或者鏈表實(shí)現(xiàn),但是只有符合這種規(guī)則才能被稱(chēng)作?;蛘哧?duì)列 棧:一種特殊的線性表,其只允許在固定的一端進(jìn)行插入和刪除元素操作。進(jìn)行數(shù)據(jù)插入和

    2024年01月16日
    瀏覽(32)
  • 【數(shù)據(jù)結(jié)構(gòu)】 棧與隊(duì)列的相互實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】 棧與隊(duì)列的相互實(shí)現(xiàn)

    隊(duì)列與棧的操作算法是筆試面試中較為常見(jiàn)的題目。 本文將著重介紹平時(shí)面試中常見(jiàn)的關(guān)于隊(duì)列與棧的應(yīng)用題目,馬上要進(jìn)行秋招了。希望對(duì)你們有幫助 _?? 請(qǐng)你僅使用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。 實(shí)現(xiàn)

    2024年02月10日
    瀏覽(17)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧與隊(duì)列經(jīng)典oj題

    【數(shù)據(jù)結(jié)構(gòu)】棧與隊(duì)列經(jīng)典oj題

    ??write in front?? ??所屬專(zhuān)欄:初階數(shù)據(jù)結(jié)構(gòu) ???博客主頁(yè):睿睿的博客主頁(yè) ???代碼倉(cāng)庫(kù):??VS2022_C語(yǔ)言倉(cāng)庫(kù) ??您的點(diǎn)贊、關(guān)注、收藏、評(píng)論,是對(duì)我最大的激勵(lì)和支持?。。?關(guān)注我,關(guān)注我,關(guān)注我 , 你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容?。???棧兩種線性表示都能實(shí)現(xiàn)

    2024年02月03日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)例題代碼及其講解-棧與隊(duì)列

    棧Stack 后進(jìn)先出 ? 棧的結(jié)構(gòu)體定義及基本操作。 初始化 ? 這里初始化時(shí)是將棧頂指針指向-1,有些則是指向0,因此后續(xù)入棧出棧的代碼略微有點(diǎn)區(qū)別 判斷棧是否為空 壓棧操作 由于初始時(shí)棧頂指針指向-1,因此需要先變化棧頂指針,然后入棧操作; 且當(dāng)MaxSize為50時(shí)候,數(shù)

    2024年02月10日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧與隊(duì)列經(jīng)典選擇題

    【數(shù)據(jù)結(jié)構(gòu)】棧與隊(duì)列經(jīng)典選擇題

    ??write in front?? ??所屬專(zhuān)欄: ???博客主頁(yè):睿睿的博客主頁(yè) ???代碼倉(cāng)庫(kù):??VS2022_C語(yǔ)言倉(cāng)庫(kù) ??您的點(diǎn)贊、關(guān)注、收藏、評(píng)論,是對(duì)我最大的激勵(lì)和支持?。?! 關(guān)注我,關(guān)注我,關(guān)注我 , 你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容??! ??在前面的學(xué)習(xí)中外面學(xué)習(xí)了棧與隊(duì)列。

    2023年04月23日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)內(nèi)容-----第四章 棧與隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)內(nèi)容-----第四章 棧與隊(duì)列

    棧(Stack)是計(jì)算機(jī)科學(xué)中的一種抽象數(shù)據(jù)類(lèi)型,它是一個(gè)只能在一端進(jìn)行插入和刪除操作的線性數(shù)據(jù)結(jié)構(gòu)。棧按照后進(jìn)先出(LIFO)的原則存儲(chǔ)數(shù)據(jù),即最后放入的元素最先被取出。類(lèi)比物理世界中的堆疊物品,每次加入的物品都被放在上面,取出時(shí)也只能從上面取出,最后

    2024年02月07日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個(gè)隊(duì)列實(shí)現(xiàn)棧與兩個(gè)棧實(shí)現(xiàn)隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個(gè)隊(duì)列實(shí)現(xiàn)棧與兩個(gè)棧實(shí)現(xiàn)隊(duì)列

    ? ????????????????????????????????????????? 食用指南:本文在有C基礎(chǔ)的情況下食用更佳 ?? ?????????????????????????????????????????? 這就不得不推薦此專(zhuān)欄了: C語(yǔ)言 ??????????????????????????????????????????

    2024年02月13日
    瀏覽(17)
  • Java------數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列(簡(jiǎn)單講解)

    Java------數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列(簡(jiǎn)單講解)

    本篇碎碎念 :時(shí)隔n個(gè)月,繼續(xù)寫(xiě)博客,假期落下的進(jìn)度,在開(kāi)學(xué)后努力追趕, 假期不努力,開(kāi)學(xué)徒傷悲啊,此時(shí)此刻真想對(duì)自己說(shuō)一句,活該啊~~~~ 欠下的鏈表練習(xí)題講解會(huì)在下次更新~~~~ 今日份勵(lì)志文案: ?萬(wàn)物皆有裂痕,那是光照進(jìn)來(lái)的地方 棧:一種特殊的線性表,其只允

    2024年04月14日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包