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

王道408用數(shù)組,鏈表以及雙向鏈表實(shí)現(xiàn)棧、隊(duì)列

這篇具有很好參考價(jià)值的文章主要介紹了王道408用數(shù)組,鏈表以及雙向鏈表實(shí)現(xiàn)棧、隊(duì)列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

我在電腦上敲了一遍,又在紙上模擬了一遍

下面記錄在電腦上敲的:

一、用數(shù)組實(shí)現(xiàn)棧

#include <stdio.h>
#include <string.h>
#define MaxSize 50
typedef struct{
    int data[MaxSize];
    int top;
}stack;

void InitStack(stack & S){
    S.top = -1;
    S.data[0] = 5;
    memset(S.data,0,sizeof(S.data));
    // printf("%x\n%x\n\n\n",S.data,&S.data);          // 這倆地址指向了同一個(gè)位置a
}

bool IsEmpty(stack S){
    if(S.top == -1)
        return 1;
    return 0;
}

bool IsFull(stack S){
    if(S.top == MaxSize-1)
        return 1;
    return 0;
}

bool Push(stack &S,int x){
    if(IsFull(S))
        return 0;
    S.data[++S.top] =  x;
    return 1;
}

bool Pop(stack &S,int &x){
    if(IsEmpty(S))
        return 0;
    x = S.data[S.top--];
    return 1;
}

int main(){
    stack sk;
    InitStack(sk);
    Push(sk,1);
    Push(sk,2);
    Push(sk,3);
    Push(sk,4);
    Push(sk,5);
    int ans;
    for(int i=0;i<=7;i++){
        if(Pop(sk,ans)){
            printf("%d\n",ans);
        }
        else{
            puts("Empty Stack!!!");
        }
    }
    return 0;
}

二、用單鏈表實(shí)現(xiàn)棧

#include <stdio.h>
#include <malloc.h>

#include <typeinfo>
typedef struct SNode{
    int data;
    struct SNode *next;
} SNode,*Listack;


void InitStack(Listack &S){  // 定義頭節(jié)點(diǎn)
    S = (Listack )malloc(sizeof(SNode));
    S->next = NULL;
    return ;
}

bool IsStackEmpty(Listack S){
    if(S->next == NULL){
        return 1;
    }
    return 0;
}
bool StackPush(Listack &S,int x){
    SNode * p = (SNode *)malloc(sizeof(SNode));
    p->data = x;
    p->next = S->next;
    S->next = p;
    return 1;
}
bool StackPop(Listack &S,int &x){
    if(IsStackEmpty(S)){
        return 0;
    }
    SNode * p = S->next;
    x = p->data;
    S->next = p->next;
    free(p);
    return 1;
}

int main(){
    SNode * sn;
    InitStack(sn);
    StackPush(sn,1);
    StackPush(sn,2);
    StackPush(sn,3);
    StackPush(sn,4);
    StackPush(sn,5);
    int ans;
    for(int i = 0;i<=7;i++){
        if(StackPop(sn,ans)){
            printf("%d\n",ans);
        }
        else{
            printf("EmptyStack!!!\n");
        }
    }
    return 0;
}

三、用雙鏈表實(shí)現(xiàn)棧

#include <stdio.h>
#include <malloc.h>
typedef struct _DbNode{
    int data;
    struct _DbNode * next;
    struct _DbNode * last;
}DbNode,*PDNode;


typedef struct _LiDbNode{           // 定義這個(gè)結(jié)構(gòu)體只是為了管理收尾兩個(gè)節(jié)點(diǎn),中間的節(jié)點(diǎn)還是全部由DbNode構(gòu)成的
    DbNode * head;
    DbNode * rear;
}LiDbNode,*PDbStack;

void InitDbNode(PDbStack &S){
    DbNode * p = (DbNode *)malloc(sizeof(DbNode));
    S = (LiDbNode *)malloc(sizeof(LiDbNode));
    p->last = p->next = NULL;
    S->head = S->rear = p;
}

bool DbStackPush(PDbStack  &S,int x){
    DbNode * p = (DbNode *)malloc(sizeof(DbNode));
    p->data = x;
    p->next = NULL;
    p->last = S->rear;
    S->rear->next = p;
    S->rear = p;
    return 1;
}

bool IsDbStackEmpty(PDbStack S){
    if(S->head == S->rear){
        return 1;
    }
    return 0;
}

bool DbStackPop(PDbStack &S,int &x){
    if(IsDbStackEmpty(S)){
       return 0;
    }
    
    DbNode * p = S->rear;           // 注意這里 S->rear指向的就是尾節(jié)點(diǎn),而在后續(xù)用單鏈表實(shí)現(xiàn)Queue的時(shí)候,S-front指向的是頭節(jié)點(diǎn),也就是說(shuō)S->front->next才是指向的節(jié)點(diǎn),這是一個(gè)小坑,注意!!
    p->last->next = NULL;
    S->rear = p->last;
    x = p->data;
    free(p);    
    return 1;
}

int main(){
    PDbStack sn;
    InitDbNode(sn);
    DbStackPush(sn,1);
    DbStackPush(sn,2);
    DbStackPush(sn,3);
    DbStackPush(sn,4);
    DbStackPush(sn,5);
    int ans;
    for(int i = 0;i<=7;i++){
        if(DbStackPop(sn,ans)){
            printf("%d\n",ans);
        }
        else{
            printf("EmptyStack!!!\n");
        }
    }


    return 0;
}

四、用數(shù)組實(shí)現(xiàn)隊(duì)列

#include <stdio.h>
#include <string.h>
#define MaxSize 50

typedef struct{
    int data[MaxSize];
    int head,rear;
}queue;

void InitQueue(queue &q){
    memset(q.data,0,sizeof(q.data));
    q.head = q.rear = 0;
}

bool IsEmpty(queue q){
    if(q.rear == q.head)
        return 1;
    return 0;
}

bool IsFull(queue q){
    if((q.rear + 1) % MaxSize == q.head)
        return 1;
    return 0;
}

bool EnPush(queue &q,int x){
    if(IsFull(q)) return 0;
    q.data[q.rear] = x;             // 這里為了區(qū)分隊(duì)列是否滿/空,我們犧牲了一個(gè)存儲(chǔ)單元,使rear永遠(yuǎn)指向最后一個(gè)數(shù)據(jù)的下一位置,這也是不用++q.rear的原因,小坑...
    q.rear = (q.rear+1) % MaxSize;
    return 1;
}

bool DePop(queue &q,int &x){
    if(IsEmpty(q)) return 0;
    x = q.data[q.head];             // head 一直指向最開(kāi)始的數(shù)據(jù)單元
    q.head = (q.head + 1) % MaxSize;
    return 1;
}

int main(){
    queue qe;
    InitQueue(qe);
    for(int i = 0;i<=70;i++){
        if(!EnPush(qe,i))
            printf("%d -- ",i);
            puts("Full Queue!!!");
    }
    
    int ans;
    for(int i=0;i<=70;i++){
        if(DePop(qe,ans)){
            printf("%d\n",ans);
        }
        else{
            printf("%d -- ",i);
            puts("Empty Queue!!!");
        }
    }

    return 0;
}

五、用單鏈表實(shí)現(xiàn)隊(duì)列

#include <stdio.h>
#include <malloc.h>
typedef struct _QNode{
    int data;
    struct _QNode * next;    
}QNode,*pQNode;

typedef struct _LinkQueue{
    QNode* rear;
    QNode* front;
}LinkQueue,*pLinkQueue;

void InitQueue(pLinkQueue &Q){  // 初始化隊(duì)列,創(chuàng)建頭節(jié)點(diǎn),使隊(duì)頭指向頭節(jié)點(diǎn),隊(duì)尾指向頭節(jié)點(diǎn)//
    Q = (LinkQueue *)malloc(sizeof(LinkQueue));
    QNode *q = (QNode *)malloc(sizeof(QNode));
    q->next = NULL;
    Q->rear = Q->front = q;
}

bool IsEmpty(pLinkQueue Q){
    if(Q->front == Q->rear) return 1;
    return 0;
}

bool EnPush(pLinkQueue &Q,int x){
    QNode *q = (QNode *)malloc(sizeof(QNode));
    q->next = NULL;
    q->data = x;
    Q->rear->next = q;
    Q->rear = q;
    return 1;
}


bool DePop(pLinkQueue &Q,int &x){
    if(IsEmpty(Q)) return 0;
    QNode *q = Q->front->next;              //要注意這里和前面用雙向鏈表實(shí)現(xiàn)棧的時(shí)候不太一樣,當(dāng)時(shí)S->rear指的是最后一個(gè)節(jié)點(diǎn),而這里的S->front指的是頭節(jié)點(diǎn),而不是第一個(gè)節(jié)點(diǎn),我們需要用S->front->next來(lái)獲得第一個(gè)節(jié)點(diǎn),切記切記!!!
    x = q->data;
    Q->front->next = q->next;

    if(Q->rear == q)                //當(dāng)原隊(duì)列中只有一個(gè)節(jié)點(diǎn)時(shí),刪除后,讓尾指針重新指向頭結(jié)點(diǎn)!!//
        Q->rear = Q->front;        
    free(q);
    return 1; 
}

int main(){         
    pLinkQueue qe;
    InitQueue(qe);
    EnPush(qe,1);
    EnPush(qe,2);
    EnPush(qe,3);
    EnPush(qe,4);
    EnPush(qe,5);
    int ans;
    for(int i=0;i<=7;i++){
        if(DePop(qe,ans)){
            printf("%d\n",ans);
        }
        else{
            puts("Empty Queue!!!");
        }
    }
    return 0;    
}

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

?

到了這里,關(guān)于王道408用數(shù)組,鏈表以及雙向鏈表實(shí)現(xiàn)棧、隊(duì)列的文章就介紹完了。如果您還想了解更多內(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)和算法】使用數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)鏈表(單向或雙向)

    【數(shù)據(jù)結(jié)構(gòu)和算法】使用數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)鏈表(單向或雙向)

    上文我們通過(guò)結(jié)構(gòu)體的結(jié)構(gòu)實(shí)現(xiàn)了隊(duì)列 、以及循環(huán)隊(duì)列的實(shí)現(xiàn),我們或許在其他老師的教學(xué)中,只學(xué)到了用結(jié)構(gòu)體的形式來(lái)實(shí)現(xiàn)鏈表、隊(duì)列、棧等數(shù)據(jù)結(jié)構(gòu),本文我想告訴你的是,我們 可以使用數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)鏈表、單調(diào)棧、單調(diào)隊(duì)列 目錄 前言 一、用數(shù)組結(jié)構(gòu)的好處 1.數(shù)

    2024年01月20日
    瀏覽(96)
  • golang 基于數(shù)組、切片、鏈表實(shí)現(xiàn)隊(duì)列

    數(shù)組 切片 鏈表 鏈表加鎖實(shí)現(xiàn)線程安全 cas 實(shí)現(xiàn) 無(wú)鎖隊(duì)列

    2024年02月04日
    瀏覽(20)
  • Leetcode循環(huán)隊(duì)列(數(shù)組實(shí)現(xiàn)及鏈表實(shí)現(xiàn))

    Leetcode循環(huán)隊(duì)列(數(shù)組實(shí)現(xiàn)及鏈表實(shí)現(xiàn))

    這道題十分考驗(yàn)我們對(duì)隊(duì)列的理解。 隊(duì)列的介紹 ? 隊(duì)列是一種只允許在一段進(jìn)行插入,在另一端進(jìn)行刪除的數(shù)據(jù)操作的特殊線性結(jié)構(gòu),,因此決定了他具有先入先出的特點(diǎn),其中進(jìn)行插入操作的一段叫做隊(duì)尾,出隊(duì)列的一端叫做隊(duì)頭。 隊(duì)列的實(shí)現(xiàn) ? 隊(duì)列可以使用鏈表或者

    2024年02月05日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu):隊(duì)列(鏈表和數(shù)組模擬實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu):隊(duì)列(鏈表和數(shù)組模擬實(shí)現(xiàn))

    目錄 1.何為隊(duì)列 2.鏈表模擬實(shí)現(xiàn) 2.1 節(jié)點(diǎn)和隊(duì)列創(chuàng)建 2.2 初始化隊(duì)列 2.3 入隊(duì)操作 2.4 出隊(duì)操作 2.5 遍歷隊(duì)列 2.6 獲取隊(duì)首和隊(duì)尾元素 2.7 判斷隊(duì)列是否為空 2.8 完整實(shí)現(xiàn) 3.?數(shù)組模擬實(shí)現(xiàn) 3.1 創(chuàng)建隊(duì)列 3.2 入隊(duì)和出隊(duì)操作 3.3 遍歷隊(duì)列 3.4 獲取隊(duì)首和隊(duì)尾元素 ?3.5 判斷隊(duì)列是否為空

    2024年02月03日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】24王道考研筆記——棧、隊(duì)列和數(shù)組

    【數(shù)據(jù)結(jié)構(gòu)】24王道考研筆記——棧、隊(duì)列和數(shù)組

    基本概念 棧是 只允許在一端進(jìn)行插入或刪除操作 的線性表。 棧頂:線性表允許進(jìn)行插入刪除的那一端 棧底:固定的,不允許進(jìn)行插入刪除的那一端 空棧:不含任何元素的空表 特點(diǎn): 先進(jìn)后出 基本操作: ??碱}型: [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片

    2024年02月09日
    瀏覽(49)
  • 【算法】Java-使用數(shù)組模擬單向鏈表,雙向鏈表

    【算法】Java-使用數(shù)組模擬單向鏈表,雙向鏈表

    目錄 試題1:實(shí)現(xiàn)一個(gè)單鏈表,并實(shí)現(xiàn)以下功能: 試題2:實(shí)現(xiàn)一個(gè)雙鏈表,并實(shí)現(xiàn)以下功能 思路總結(jié): 什么情況下可能涉及到用數(shù)組實(shí)現(xiàn)鏈表呢? ? ? ? 在學(xué)習(xí)時(shí)了解到了可以用數(shù)組模擬鏈表,使其兼顧數(shù)據(jù)查找快,鏈表新增和刪除快的缺點(diǎn),找來(lái)一些試題實(shí)現(xiàn)了下,如下

    2024年02月09日
    瀏覽(26)
  • 一篇學(xué)完:王道考研408數(shù)據(jù)結(jié)構(gòu)(全)

    一篇學(xué)完:王道考研408數(shù)據(jù)結(jié)構(gòu)(全)

    PDF版本附在 ?lengyueling.cn?對(duì)應(yīng) 文章結(jié)尾,歡迎下載訪問(wèn)交流 數(shù)據(jù)結(jié)構(gòu)在學(xué)什么 如何用程序代碼把現(xiàn)實(shí)世界的問(wèn)題信息化 如何用計(jì)算機(jī)高效地處理這些信息從而創(chuàng)造價(jià)值 數(shù)據(jù)結(jié)構(gòu)的基本概念 什么是數(shù)據(jù): 數(shù)據(jù)是信息的載體,是描述客觀事物屬性的數(shù)、字符及所有能輸入到

    2023年04月08日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】【王道408】——PPT截圖與思維導(dǎo)圖

    【數(shù)據(jù)結(jié)構(gòu)】【王道408】——PPT截圖與思維導(dǎo)圖

    自用視頻PPT截圖 視頻網(wǎng)址王道B站鏈接 23考研 408新增考點(diǎn): 并查集,紅黑樹(shù) 2023年408真題數(shù)據(jù)結(jié)構(gòu)篇 408考綱解讀 考綱變化 希爾排序 冒泡排序 快速排序 簡(jiǎn)單排序算法 堆排序

    2024年02月15日
    瀏覽(24)
  • 【23考研】計(jì)算機(jī)408數(shù)據(jù)結(jié)構(gòu)代碼題強(qiáng)化階段劃重點(diǎn)(王道書(shū))

    視頻鏈接:【23考研】10分鐘帶你整理408數(shù)據(jù)結(jié)構(gòu)強(qiáng)化階段代碼題復(fù)習(xí)重點(diǎn) 本篇只適合考408的同學(xué),請(qǐng)自主命題的同學(xué)自覺(jué)右上角×掉 因?yàn)橥醯罆?shū)為了照顧自主命題的同學(xué),所以很多算法也給出了代碼實(shí)現(xiàn),實(shí)際上對(duì)于考408的同學(xué),很多代碼是不需要掌握的,畢竟408的代碼題沒(méi)

    2024年02月15日
    瀏覽(47)
  • 數(shù)據(jù)結(jié)構(gòu)——線性數(shù)據(jù)結(jié)構(gòu)(數(shù)組,鏈表,棧,隊(duì)列)

    數(shù)據(jù)結(jié)構(gòu)——線性數(shù)據(jù)結(jié)構(gòu)(數(shù)組,鏈表,棧,隊(duì)列)

    數(shù)組(Array) 是一種很常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)。它由相同類型的元素(element)組成,并且是使用一塊連續(xù)的內(nèi)存來(lái)存儲(chǔ)。 我們直接可以利用元素的索引(index)可以計(jì)算出該元素對(duì)應(yīng)的存儲(chǔ)地址。 數(shù)組的特點(diǎn)是: 提供隨機(jī)訪問(wèn) 并且容量有限。 2.1. 鏈表簡(jiǎn)介 鏈表(LinkedList) 雖然是

    2024年02月11日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包