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

【“棧、隊(duì)列”的應(yīng)用】408數(shù)據(jù)結(jié)構(gòu)代碼

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

王道數(shù)據(jù)結(jié)構(gòu)強(qiáng)化課——【“棧、隊(duì)列”的應(yīng)用】代碼,持續(xù)更新
【“棧、隊(duì)列”的應(yīng)用】408數(shù)據(jù)結(jié)構(gòu)代碼,學(xué)業(yè)課程,數(shù)據(jù)結(jié)構(gòu),考研文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728857.html

鏈?zhǔn)酱鎯?chǔ)棧(單鏈表實(shí)現(xiàn)),并基于上述定義,棧頂在鏈頭,實(shí)現(xiàn)“出棧、入棧、判空、判滿”四個(gè)基本操作

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

// 定義鏈表節(jié)點(diǎn)
struct Node {
    int data;
    struct Node* next;
};

// 定義棧結(jié)構(gòu)
struct Stack {
    struct Node* top; // 棧頂指針
};

// 初始化棧
void initStack(struct Stack* stack) {
    stack->top = NULL;
}

// 入棧操作
void push(struct Stack* stack, int value) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) {
        printf("內(nèi)存分配失敗,無(wú)法執(zhí)行入棧操作\n");
        return;
    }
    newNode->data = value;
    newNode->next = stack->top;
    stack->top = newNode;
}

// 出棧操作
int pop(struct Stack* stack) {
    if (stack->top == NULL) {
        printf("棧為空,無(wú)法執(zhí)行出棧操作\n");
        return -1; // 返回一個(gè)錯(cuò)誤值
    }
    struct Node* temp = stack->top;
    int poppedValue = temp->data;
    stack->top = temp->next;
    free(temp);
    return poppedValue;
}

// 判空操作
int isEmpty(struct Stack* stack) {
    return (stack->top == NULL);
}

// 判滿操作(對(duì)于鏈?zhǔn)酱鎯?chǔ)的棧,通常不會(huì)滿,所以返回0表示不滿)
int isFull(struct Stack* stack) {
    return 0;
}

// 釋放棧內(nèi)存
void freeStack(struct Stack* stack) {
    while (stack->top != NULL) {
        struct Node* temp = stack->top;
        stack->top = temp->next;
        free(temp);
    }
}

int main() {
    struct Stack stack;
    initStack(&stack);

    // 入棧操作
    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);

    // 出棧操作
    printf("出棧操作: %d\n", pop(&stack));

    // 判空操作
    printf("棧是否為空: %s\n", isEmpty(&stack) ? "是" : "否");

    // 判滿操作
    printf("棧是否滿: %s\n", isFull(&stack) ? "是" : "否");

    // 釋放棧內(nèi)存
    freeStack(&stack);

    return 0;
}

鏈?zhǔn)酱鎯?chǔ)棧(雙向鏈表實(shí)現(xiàn))

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

// 定義鏈表節(jié)點(diǎn)
struct Node {
    int data;
    struct Node* next;
    struct Node* prev;
};

// 定義棧結(jié)構(gòu)
struct Stack {
    struct Node* top; // 棧頂指針,鏈尾
};

// 初始化棧
void initStack(struct Stack* stack) {
    stack->top = NULL;
}

// 入棧操作
void push(struct Stack* stack, int value) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) {
        printf("內(nèi)存分配失敗,無(wú)法執(zhí)行入棧操作\n");
        return;
    }
    newNode->data = value;
    newNode->next = NULL;

    if (stack->top == NULL) {
        newNode->prev = NULL;
        stack->top = newNode;
    } else {
        newNode->prev = stack->top;
        stack->top->next = newNode;
        stack->top = newNode;
    }
}

// 出棧操作
int pop(struct Stack* stack) {
    if (stack->top == NULL) {
        printf("棧為空,無(wú)法執(zhí)行出棧操作\n");
        return -1; // 返回一個(gè)錯(cuò)誤值
    }
    struct Node* temp = stack->top;
    int poppedValue = temp->data;

    if (stack->top->prev != NULL) {
        stack->top = stack->top->prev;
        stack->top->next = NULL;
    } else {
        stack->top = NULL;
    }

    free(temp);
    return poppedValue;
}

// 判空操作
int isEmpty(struct Stack* stack) {
    return (stack->top == NULL);
}

// 判滿操作(對(duì)于鏈?zhǔn)酱鎯?chǔ)的棧,通常不會(huì)滿,所以返回0表示不滿)
int isFull(struct Stack* stack) {
    return 0;
}

// 釋放棧內(nèi)存
void freeStack(struct Stack* stack) {
    while (stack->top != NULL) {
        struct Node* temp = stack->top;
        stack->top = temp->prev;
        free(temp);
    }
}

int main() {
    struct Stack stack;
    initStack(&stack);

    // 入棧操作
    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);

    // 出棧操作
    printf("出棧操作: %d\n", pop(&stack));

    // 判空操作
    printf("棧是否為空: %s\n", isEmpty(&stack) ? "是" : "否");

    // 判滿操作
    printf("棧是否滿: %s\n", isFull(&stack) ? "是" : "否");

    // 釋放棧內(nèi)存
    freeStack(&stack);

    return 0;
}

順序存儲(chǔ)的隊(duì)列(數(shù)組實(shí)現(xiàn))

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

#define MAX_QUEUE_SIZE 10 // 隊(duì)列的最大容量

// 定義隊(duì)列結(jié)構(gòu)
struct Queue {
    int front, rear; // 前后指針
    int data[MAX_QUEUE_SIZE];
};

// 初始化隊(duì)列
void initQueue(struct Queue* queue) {
    queue->front = -1;
    queue->rear = -1;
}

// 判空操作
int isEmpty(struct Queue* queue) {
    return (queue->front == -1);
}

// 判滿操作
int isFull(struct Queue* queue) {
    return ((queue->rear + 1) % MAX_QUEUE_SIZE == queue->front);
}

// 入隊(duì)操作
void enqueue(struct Queue* queue, int value) {
    if (isFull(queue)) {
        printf("隊(duì)列已滿,無(wú)法執(zhí)行入隊(duì)操作\n");
        return;
    }
    
    if (isEmpty(queue)) {
        queue->front = 0;
    }

    queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE;
    queue->data[queue->rear] = value;
}

// 出隊(duì)操作
int dequeue(struct Queue* queue) {
    if (isEmpty(queue)) {
        printf("隊(duì)列為空,無(wú)法執(zhí)行出隊(duì)操作\n");
        return -1; // 返回一個(gè)錯(cuò)誤值
    }

    int dequeuedValue = queue->data[queue->front];
    
    if (queue->front == queue->rear) {
        // 隊(duì)列中只有一個(gè)元素,出隊(duì)后隊(duì)列為空
        queue->front = -1;
        queue->rear = -1;
    } else {
        queue->front = (queue->front + 1) % MAX_QUEUE_SIZE;
    }
    
    return dequeuedValue;
}

int main() {
    struct Queue queue;
    initQueue(&queue);

    // 入隊(duì)操作
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    enqueue(&queue, 3);

    // 出隊(duì)操作
    printf("出隊(duì)操作: %d\n", dequeue(&queue));

    // 判空操作
    printf("隊(duì)列是否為空: %s\n", isEmpty(&queue) ? "是" : "否");

    // 判滿操作
    printf("隊(duì)列是否滿: %s\n", isFull(&queue) ? "是" : "否");

    return 0;
}

鏈?zhǔn)酱鎯?chǔ)隊(duì)列(單鏈表實(shí)現(xiàn))

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

// 定義鏈表節(jié)點(diǎn)
struct Node {
    int data;
    struct Node* next;
};

// 定義隊(duì)列結(jié)構(gòu)
struct Queue {
    struct Node* front; // 隊(duì)列前端
    struct Node* rear;  // 隊(duì)列后端
};

// 初始化隊(duì)列
void initQueue(struct Queue* queue) {
    queue->front = NULL;
    queue->rear = NULL;
}

// 判空操作
int isEmpty(struct Queue* queue) {
    return (queue->front == NULL);
}

// 判滿操作(對(duì)于鏈?zhǔn)酱鎯?chǔ)的隊(duì)列,通常不會(huì)滿,所以返回0表示不滿)
int isFull(struct Queue* queue) {
    return 0;
}

// 入隊(duì)操作
void enqueue(struct Queue* queue, int value) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) {
        printf("內(nèi)存分配失敗,無(wú)法執(zhí)行入隊(duì)操作\n");
        return;
    }
    newNode->data = value;
    newNode->next = NULL;
    
    if (isEmpty(queue)) {
        queue->front = newNode;
    } else {
        queue->rear->next = newNode;
    }
    
    queue->rear = newNode;
}

// 出隊(duì)操作
int dequeue(struct Queue* queue) {
    if (isEmpty(queue)) {
        printf("隊(duì)列為空,無(wú)法執(zhí)行出隊(duì)操作\n");
        return -1; // 返回一個(gè)錯(cuò)誤值
    }
    
    struct Node* temp = queue->front;
    int dequeuedValue = temp->data;
    
    queue->front = temp->next;
    free(temp);
    
    if (queue->front == NULL) {
        // 如果出隊(duì)后隊(duì)列為空,需要更新rear指針
        queue->rear = NULL;
    }
    
    return dequeuedValue;
}

// 釋放隊(duì)列內(nèi)存
void freeQueue(struct Queue* queue) {
    while (queue->front != NULL) {
        struct Node* temp = queue->front;
        queue->front = temp->next;
        free(temp);
    }
}

int main() {
    struct Queue queue;
    initQueue(&queue);

    // 入隊(duì)操作
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    enqueue(&queue, 3);

    // 出隊(duì)操作
    printf("出隊(duì)操作: %d\n", dequeue(&queue));

    // 判空操作
    printf("隊(duì)列是否為空: %s\n", isEmpty(&queue) ? "是" : "否");

    // 判滿操作
    printf("隊(duì)列是否滿: %s\n", isFull(&queue) ? "是" : "否");

    // 釋放隊(duì)列內(nèi)存
    freeQueue(&queue);

    return 0;
}

到了這里,關(guān)于【“棧、隊(duì)列”的應(yīng)用】408數(shù)據(jù)結(jié)構(gòu)代碼的文章就介紹完了。如果您還想了解更多內(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ì)列的應(yīng)用

    【頭歌】數(shù)據(jù)結(jié)構(gòu)-隊(duì)列的應(yīng)用

    ? 第1關(guān):循環(huán)隊(duì)列 任務(wù)描述 本關(guān)任務(wù):編寫一個(gè)循環(huán)隊(duì)列,實(shí)現(xiàn)入隊(duì)、出隊(duì)操作,判斷隊(duì)空、隊(duì)滿等特殊情況。 相關(guān)知識(shí) 為了完成本關(guān)任務(wù),你需要掌握:1.循環(huán)隊(duì)列定義,2.入隊(duì)、出隊(duì)的定義,3.隊(duì)空、隊(duì)滿的情況。 循環(huán)隊(duì)列定義 循環(huán)隊(duì)列將數(shù)組存儲(chǔ)區(qū)看成是一個(gè)首尾相

    2024年02月08日
    瀏覽(62)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧和隊(duì)列的應(yīng)用

    【數(shù)據(jù)結(jié)構(gòu)】棧和隊(duì)列的應(yīng)用

    ??積薪高于山,焉用先后別 ?? ? ?? 正式開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)啦~此專欄作為學(xué)習(xí)過(guò)程中的記錄 ?? 對(duì)于編譯器來(lái)說(shuō),我們?cè)诖蠖鄶?shù) I D E IDE I D E 內(nèi)進(jìn)行編碼時(shí),都會(huì)提示括號(hào)的匹配標(biāo)志,可能用不同顏色或者距離差加以區(qū)分,那么,編譯器中是如何實(shí)現(xiàn)這些操作的呢? 其實(shí)

    2024年02月10日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)---最小生成樹的應(yīng)用

    數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)---最小生成樹的應(yīng)用

    1.問(wèn)題 假定有這么一個(gè)問(wèn)題,有11個(gè)城市,城市之間有一些天然氣管道,鋪設(shè)天然氣管道需要花費(fèi)不同的金額,現(xiàn)在要你選擇其中一些天然氣管道,使得所有城市可以互相聯(lián)通且花費(fèi)最小。 2.分析 我們把這個(gè)問(wèn)題抽象為一張圖,每個(gè)城市是一個(gè)頂點(diǎn),城市與城市之間的管道是

    2024年02月08日
    瀏覽(26)
  • 數(shù)據(jù)庫(kù)原理課程設(shè)計(jì) — 學(xué)業(yè)課程預(yù)警系統(tǒng)

    數(shù)據(jù)庫(kù)原理課程設(shè)計(jì) — 學(xué)業(yè)課程預(yù)警系統(tǒng)

    一、選題背景 21世紀(jì)的社會(huì)可謂日新月異,科學(xué)技術(shù)突飛猛進(jìn),經(jīng)濟(jì)知識(shí)和信息產(chǎn)業(yè)初見端倪,特別是信息技術(shù)和網(wǎng)絡(luò)技術(shù)的訊速發(fā)展和廣泛應(yīng)用,對(duì)社會(huì)的政治、經(jīng)濟(jì)、軍事、文化等領(lǐng)域產(chǎn)生越來(lái)越深刻的影響。學(xué)校也不例外地快速發(fā)展著,而且要求也在不斷變化。學(xué)生的

    2024年02月13日
    瀏覽(20)
  • 深入理解數(shù)據(jù)結(jié)構(gòu):隊(duì)列的實(shí)現(xiàn)及其應(yīng)用場(chǎng)景

    深入理解數(shù)據(jù)結(jié)構(gòu):隊(duì)列的實(shí)現(xiàn)及其應(yīng)用場(chǎng)景

    隊(duì)列(Queue)是一種具有先進(jìn)先出(FIFO)特性的數(shù)據(jù)結(jié)構(gòu)。在隊(duì)列中,數(shù)據(jù)的插入和刪除操作分別在隊(duì)列的兩端進(jìn)行。插入操作在隊(duì)列的尾部進(jìn)行,而刪除操作則在隊(duì)列的頭部進(jìn)行。這種特性使得隊(duì)列在很多實(shí)際應(yīng)用中非常有用,比如任務(wù)調(diào)度、緩沖區(qū)管理等。 線性表是一種

    2024年04月28日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu) - 堆(優(yōu)先隊(duì)列)+ 堆的應(yīng)用 + 堆練習(xí)

    數(shù)據(jù)結(jié)構(gòu) - 堆(優(yōu)先隊(duì)列)+ 堆的應(yīng)用 + 堆練習(xí)

    1、本文章適合新學(xué)和復(fù)習(xí)用,都是用c語(yǔ)言實(shí)現(xiàn)的,包含了堆的講解、堆的應(yīng)用、堆的練習(xí)。 2、有圖解和代碼都注釋,放心食用哦 那么開始: 一、什么是堆 堆(Heap)是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu),是最高效的優(yōu)先級(jí)隊(duì)列。堆通常是一個(gè)可以被看作一棵完全二叉樹的數(shù)組

    2024年03月11日
    瀏覽(29)
  • 數(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ì)列(源代碼?圖解?習(xí)題)

    數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(源代碼?圖解?習(xí)題)

    ? ? ? ? 在學(xué)過(guò)棧之后,會(huì)了解到棧的底層是根據(jù)順序表或者鏈表來(lái)構(gòu)建的,那么我們今天要學(xué)習(xí)的隊(duì)列是否也是基于順序表和鏈表呢?那我們直接進(jìn)入正題吧! ? ? ? ? 還是跟上節(jié)一樣,依舊用圖解的方式讓大家更好的理解概念。 ? ? ? ? 隊(duì)列: 隊(duì)列指的是圖中黑色邊框

    2024年02月06日
    瀏覽(16)
  • 數(shù)據(jù)結(jié)構(gòu):隊(duì)列的鏈表結(jié)構(gòu)(含完整代碼,可復(fù)制)

    1.輸出隊(duì)列 2.入隊(duì)一個(gè)元素 3.出隊(duì)一個(gè)元素 5.建立鏈表隊(duì)列 6.完整代碼

    2024年01月16日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】15 隊(duì)列應(yīng)用實(shí)例:多項(xiàng)式加法運(yùn)算

    我們準(zhǔn)備采用不帶頭節(jié)點(diǎn)的單向鏈表結(jié)構(gòu)表示一元多項(xiàng)式,并按照指數(shù)遞減的順序排列各項(xiàng)。 對(duì)列表存放的兩個(gè)多項(xiàng)式進(jìn)行加法運(yùn)算時(shí),可以使用兩個(gè)指針p1和p2。初始時(shí)的p1和p2分別指向這兩個(gè)多項(xiàng)式第1個(gè)節(jié)點(diǎn)(指數(shù)的最高項(xiàng))。通過(guò)循環(huán)不斷比較p1和p2所指的節(jié)點(diǎn),比較結(jié)

    2024年02月21日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包