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

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

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個隊列實現(xiàn)棧與兩個棧實現(xiàn)隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個隊列實現(xiàn)棧與兩個棧實現(xiàn)隊列,數(shù)據(jù)結(jié)構(gòu)與算法煉體 淬體中,數(shù)據(jù)結(jié)構(gòu),c語言

?

?????????????????????????????????????????食用指南:本文在有C基礎(chǔ)的情況下食用更佳??

??????????????????????????????????????????這就不得不推薦此專欄了:C語言

??????????????????????????????????????????本文前置知識:?C語言實現(xiàn)棧與隊列

??????????????????????????????????????????今日夜電波:怪獣の花唄—Vaundy

?????????????????????????????????????????3:12?━━━━━━???──────── 4:13? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????? ?? ? ?? ? ? ? ?? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????關(guān)注??點贊??收藏您的每一次鼓勵都是對我莫大的支持???


目錄

??兩個隊列實現(xiàn)棧

問題的描述以及要求

思路整理

具體的思路:

?每個操作的實現(xiàn)

?初始化

判空

入棧

?出棧

?取棧頂元素

?銷毀棧

??整體代碼

??兩個棧實現(xiàn)隊列

問題的描述以及要求

思路整理

具體的思路:??????????????

每個操作的實現(xiàn)?

?初始化

判空

入隊

出隊

?取隊頭元素

?銷毀隊列

??整體代碼


??兩個隊列實現(xiàn)棧

問題的描述以及要求

? ? ? ? 使用兩個隊列實現(xiàn)一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop?和?empty)。

思路整理

? ? ? ? 首先理清一點,隊列實現(xiàn)是先進先出,而棧是后進先出,我們需要使用兩個隊列來實現(xiàn)棧。對此,我的思路是一個隊列用于入棧用,而另外一個隊列用于出棧。對此,在這個基礎(chǔ)上設立了如下的結(jié)構(gòu)體:

typedef struct QNode//隊列節(jié)點
{
    int data;
    struct QNode* next;
}QNode;

typedef struct Queue//隊列
{
    QNode* front;
    QNode* tail;
}Queue;

typedef struct {
    QNode q1;
    QNode q2;
} MyStack;
具體的思路:

????????保持一個隊列在出棧前為空的狀態(tài),而另外一個隊列則是出棧前一直用于入隊。然后,當程序需要出棧了,我們將不為空的那個隊列,也就是用于入隊的隊列的前N-1個數(shù)據(jù)出隊,將原本為空的那個隊列入隊這N-1個數(shù)據(jù)。在此之后,我們發(fā)現(xiàn)原本作為入隊的隊列僅僅剩下了最后一個數(shù)據(jù),而原本為空的隊列擁有了N-1個數(shù)據(jù),此時那剩下的一個數(shù)據(jù)不就是棧頂?shù)臄?shù)據(jù)嗎?我們只需要將這個數(shù)據(jù)進行出隊操作便可。而在這個數(shù)據(jù)出隊操作完成后,這個兩個隊列的性質(zhì)進行了交換,原本為空的隊列,現(xiàn)在擁有N-1個數(shù)據(jù),原本不為空的隊列,現(xiàn)在為空了,因此,在接下來的操作需要轉(zhuǎn)換兩個隊列的入隊性質(zhì)

????????一圖帶你了解~?

【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個隊列實現(xiàn)棧與兩個棧實現(xiàn)隊列,數(shù)據(jù)結(jié)構(gòu)與算法煉體 淬體中,數(shù)據(jù)結(jié)構(gòu),c語言

?每個操作的實現(xiàn)

?初始化
MyStack* myStackCreate() {
    MyStack* new=(MyStack*)malloc(sizeof(MyStack));
    if(new==NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    QueueInit(&new->q1);
    QueueInit(&new->q2);
    return new;
}

? ? ? ? 這里對于為什么對new->q1,new->q2取地址做出解釋:由于前面結(jié)構(gòu)體的定義為?QNode q1;QNode q2;而QueueInit內(nèi)傳參為指針所以取地址&。

判空
bool myStackEmpty(MyStack* obj) {
    assert(obj);
    return QueueEmpty(&obj->q1)&&QueueEmpty(&obj->q2);
}
入棧
void myStackPush(MyStack* obj, int x) {
    if(!QueueEmpty(&obj->q1))
    {
        QueuePush(&obj->q1,x);
    }else
    {
        QueuePush(&obj->q2,x);
    }
}

? ? ? ? 入棧操作主要在于對于兩個隊列進行判斷,判斷出入上文思路所述,其中一個為空,以此,將空的隊列作為入棧操作。

?出棧
int myStackPop(MyStack* obj) {
    assert(obj);

    MyStack* empty=&obj->q1;
    MyStack* nonempty=&obj->q2;

    if(!QueueEmpty(empty))
    {
        empty=&obj->q2;
        nonempty=&obj->q1;
    }
    while(QueueSize(nonempty)>1)
    {
        QueuePush(empty,QueueTop(nonempty));
        QueuePop(nonempty);
    }
    int re=QueueTop(nonempty);
    QueuePop(nonempty);
    return re;
}  

? ? ? ? 出棧操作是用兩個隊列實現(xiàn)棧的最關(guān)鍵的一步。首先創(chuàng)建兩個結(jié)構(gòu)體指針,一個用于存放空的隊列,另外一個存不為空的隊列。這時候有人就要問了,你怎么知道哪個是空的哪個不是空的。別急,這不有個if的判斷語句來判斷嗎?(*^▽^*)。接著,按照思路,將不為空的隊列N-1個數(shù)據(jù)入隊到原來為空的的隊列,最后再對剩下的一個數(shù)據(jù)進行出棧。

?取棧頂元素
int myStackTop(MyStack* obj) {
    assert(obj);
    assert(!myStackEmpty(obj));
    if(!QueueEmpty(&obj->q1))
    {
        return QueueBack(&obj->q1);
    }
    else
    {
        return QueueBack(&obj->q2);
    }
}

? ? ? ? 這個簡單,只需要將不為空的隊列的最后一個元素給出去就好了!

?銷毀棧
void myStackFree(MyStack* obj) {
    assert(obj);
    QueueDestroy(&obj->q1);
    QueueDestroy(&obj->q2);
    free(obj);
    obj=NULL;
}

??整體代碼

typedef struct QNode//隊列節(jié)點
{
    int data;
    struct QNode* next;
}QNode;
typedef struct Queue//隊列
{
    QNode* front;
    QNode* tail;
}Queue;
//初始化
void QueueInit(Queue* queue);
//隊列是否為空
bool QueueEmpty(Queue* queue);
//進隊
void QueuePush(Queue* queue, int x);
//出隊
void QueuePop(Queue* queue);
//隊列頭部元素
int QueueTop(Queue* queue);
//隊列尾部元素
int QueueBack(Queue* queue);
//隊列有效元素個數(shù)
int QueueSize(Queue* queue);
//銷毀隊列
void QueueDestroy(Queue* queue);

void QueueInit(Queue* queue)//初始化
{
    assert(queue);
    queue->front = NULL;
    queue->tail = NULL;
}
//隊列是否為空
bool QueueEmpty(Queue* queue)
{
    assert(queue);
    return queue->tail == NULL;
}
//進隊
void QueuePush(Queue* queue, int x)
{
    assert(queue);
    QNode* newnode = (QNode*)malloc(sizeof(QNode));
    assert(newnode);
    newnode->data = x;
    newnode->next = NULL;
    if(queue->tail == NULL)
    {
        queue->front = queue->tail = newnode;
    }
    else
    {
        queue->tail->next = newnode;
        queue->tail = newnode;
    }
}
//出隊
void QueuePop(Queue* queue)
{
    assert(queue);
    QNode* next = queue->front->next;
    free(queue->front);
    queue->front = next;
    if(queue->front == NULL)
    {
        queue->tail = NULL;
    }
}
//隊列頭部元素
int QueueTop(Queue* queue)
{
    assert(queue);
    assert(queue->front);
    return queue->front->data;
}
//隊列尾部元素
int QueueBack(Queue* queue)
{
    assert(queue);
    assert(queue->tail);
    return queue->tail->data;
}
//隊列有效元素個數(shù)
int QueueSize(Queue* queue)
{
    assert(queue);
    int size = 0;
    QNode* cur = queue->front;
    while(cur != NULL)
    {
        ++size;
        cur = cur->next;
    }
    return size;
}
//銷毀隊列
void QueueDestroy(Queue* queue)
{
    assert(queue);
    QNode* next = queue->front;
    while(next != NULL)
    {
        next = queue->front->next;
        free(queue->front);
        queue->front = next;
    }
    queue->tail = NULL;
}


typedef struct {
    QNode q1;
    QNode q2;
} MyStack;


MyStack* myStackCreate() {
    MyStack* new=(MyStack*)malloc(sizeof(MyStack));
    if(new==NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    QueueInit(&new->q1);
    QueueInit(&new->q2);
    return new;
}

void myStackPush(MyStack* obj, int x) {
    if(!QueueEmpty(&obj->q1))
    {
        QueuePush(&obj->q1,x);
    }else
    {
        QueuePush(&obj->q2,x);
    }
}

int myStackPop(MyStack* obj) {
    assert(obj);
    MyStack* empty=&obj->q1;
    MyStack* nonempty=&obj->q2;
    if(!QueueEmpty(empty))
    {
        empty=&obj->q2;
        nonempty=&obj->q1;
    }
    while(QueueSize(nonempty)>1)
    {
        QueuePush(empty,QueueTop(nonempty));
        QueuePop(nonempty);
    }
    int re=QueueTop(nonempty);
    QueuePop(nonempty);
    return re;
}  

bool myStackEmpty(MyStack* obj);

int myStackTop(MyStack* obj) {
    assert(obj);
    assert(!myStackEmpty(obj));
    if(!QueueEmpty(&obj->q1))
    {
        return QueueBack(&obj->q1);
    }
    else
    {
        return QueueBack(&obj->q2);
    }
}

bool myStackEmpty(MyStack* obj) {
    assert(obj);
    return QueueEmpty(&obj->q1)&&QueueEmpty(&obj->q2);
}

void myStackFree(MyStack* obj) {
    assert(obj);
    QueueDestroy(&obj->q1);
    QueueDestroy(&obj->q2);
    free(obj);
    obj=NULL;
}

??兩個棧實現(xiàn)隊列

問題的描述以及要求

????????僅使用兩個棧實現(xiàn)先入先出隊列。隊列應當支持一般隊列支持的所有操作(push、pop、peekempty)。

思路整理

????????首先理清一點,棧實現(xiàn)是后進先出,而隊列是先進先出,我們需要使用兩個棧來實現(xiàn)隊列。對此,我的思路是一個棧用于入隊用,而另外一個棧用于出隊。對此,在這個基礎(chǔ)上設立了如下的結(jié)構(gòu)體:

typedef int STDataType;
typedef struct Stack//變長的數(shù)組棧
{
	STDataType* a;
	int top;
	int capacity;
}SLtack;

typedef struct {
    SLtack push;
    SLtack pop;
} MyQueue;
具體的思路:??????????????

?????????將一個棧當作輸入棧,用于壓入push 傳入的數(shù)據(jù);另一個棧當作輸出棧,用于 pop操作。每次 pop?時,若輸出棧為空則將輸入棧的全部數(shù)據(jù)依次彈出并壓入輸出棧,這樣輸出棧從棧頂往棧底的順序就是隊列從隊首往隊尾的順序。若不為空,則只有將所有輸出棧的數(shù)據(jù)都pop完后,才將輸入棧的數(shù)據(jù)彈入輸出棧。再對輸出棧進行pop操作。

????????一圖讓你了然~

?【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個隊列實現(xiàn)棧與兩個棧實現(xiàn)隊列,數(shù)據(jù)結(jié)構(gòu)與算法煉體 淬體中,數(shù)據(jù)結(jié)構(gòu),c語言

每個操作的實現(xiàn)?

?初始化
MyQueue* myQueueCreate() {
    MyQueue* new=(MyQueue*)malloc(sizeof(MyQueue));
    if(new==NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    StackInit(&new->push);
    StackInit(&new->pop);
    return new;
}

? ? ? ? 這里對于為什么對new->push,new->pop取地址做出解釋:由于前面結(jié)構(gòu)體的定義為SLtack push;SLtack pop;而StackInit內(nèi)傳參為指針所以取地址&。

判空
bool myQueueEmpty(MyQueue* obj) {

    return StackEmpty(&obj->push)&&StackEmpty(&obj->pop);
}
入隊
void myQueuePush(MyQueue* obj, int x) {
    
    StackPush(&obj->push,x);
}

? ? ? ? 入隊操作只需要對push棧進行入棧操作即可

出隊
int myQueuePop(MyQueue* obj) {

    assert(obj);
    assert(!myQueueEmpty(obj));
    if(StackEmpty(&obj->pop))
    {
        while(!StackEmpty(&obj->push))
        {
            StackPush(&obj->pop,StackTop(&obj->push));
            StackPop(&obj->push);
        }
    }
    int re=StackTop(&obj->pop);
    StackPop(&obj->pop);
    return re;
}

????????出隊操作是實現(xiàn)兩個棧實現(xiàn)隊列的關(guān)鍵。需要將push棧中的數(shù)據(jù)全都壓棧道pop棧,注意只有pop為空時才進行以上操作。然后就是對于pop棧進行正常的出棧操作即可。

?取隊頭元素
int myQueuePeek(MyQueue* obj) {
    assert(obj);
    assert(!myQueueEmpty(obj));
    if(StackEmpty(&obj->pop))
    {
        while(!StackEmpty(&obj->push))
        {
            StackPush(&obj->pop,StackTop(&obj->push));
            StackPop(&obj->push);
        }
    }
    return StackTop(&obj->pop);
}

? ? ? ? 這里主要還是同出隊操作差不多,取隊頭的元素需要在pop棧上的top?。?/p>

?銷毀隊列
void myQueueFree(MyQueue* obj) {
    StackDestroy(&obj->push);
    StackDestroy(&obj->pop);
    free(obj);
    obj==NULL;
}

??整體代碼

typedef int STDataType;
typedef struct Stack//變長的數(shù)組棧
{
	STDataType* a;
	int top;
	int capacity;
}SLtack;

// 初始化棧 
void StackInit(SLtack* ps);
// 入棧 
void StackPush(SLtack* ps, STDataType data);
// 出棧 
void StackPop(SLtack* ps);
// 獲取棧頂元素 
STDataType StackTop(SLtack* ps);
// 獲取棧中有效元素個數(shù) 
int StackSize(SLtack* ps);
// 檢測棧是否為空,如果為空返回非零結(jié)果,如果不為空返回0 
int StackEmpty(SLtack* ps);
// 銷毀棧 
void StackDestroy(SLtack* ps);

void StackInit(SLtack* ps)
{
	assert(ps);
	ps->a = NULL;
	ps->top = ps->capacity = 0;//top初始化為0,則top指向棧頂?shù)南乱粋€元素
}

void StackPush(SLtack* ps, STDataType data)
{
	assert(ps);
	if (ps->top == ps->capacity)
	{
		ps->capacity =ps->capacity== 0 ? 4 : ps->capacity * 2;
		ps->a = (STDataType*)realloc(ps->a, sizeof(int) * ps->capacity);
	}
	ps->a[ps->top] = data;
	ps->top++;
}

void StackPop(SLtack* ps)
{
	assert(ps);
	assert(!StackEmpty(ps));
	ps->top--;
}

STDataType StackTop(SLtack* ps)
{
	assert(ps);
	assert(!StackEmpty(ps));
	return ps->a[ps->top - 1];
}

int StackSize(SLtack* ps)
{
	assert(ps);
	return ps->top;
}

int StackEmpty(SLtack* ps)
{
	assert(ps);
	return ps->top == 0;
}

void StackDestroy(SLtack* ps)
{
	assert(ps);
	free(ps->a);
	ps->a = NULL;
	ps->top = ps->capacity = 0;
}

typedef struct {
    SLtack push;
    SLtack pop;
} MyQueue;


MyQueue* myQueueCreate() {
    MyQueue* new=(MyQueue*)malloc(sizeof(MyQueue));
    if(new==NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    StackInit(&new->push);
    StackInit(&new->pop);
    return new;
}

void myQueuePush(MyQueue* obj, int x) {
    
    StackPush(&obj->push,x);
}

bool myQueueEmpty(MyQueue* obj);

int myQueuePop(MyQueue* obj) {

    assert(obj);
    assert(!myQueueEmpty(obj));
    if(StackEmpty(&obj->pop))
    {
        while(!StackEmpty(&obj->push))
        {
            StackPush(&obj->pop,StackTop(&obj->push));
            StackPop(&obj->push);
        }
    }
    int re=StackTop(&obj->pop);
    StackPop(&obj->pop);
    return re;
}

int myQueuePeek(MyQueue* obj) {
    assert(obj);
    assert(!myQueueEmpty(obj));
    if(StackEmpty(&obj->pop))
    {
        while(!StackEmpty(&obj->push))
        {
            StackPush(&obj->pop,StackTop(&obj->push));
            StackPop(&obj->push);
        }
    }
    return StackTop(&obj->pop);
}

bool myQueueEmpty(MyQueue* obj) {
    return StackEmpty(&obj->push)&&StackEmpty(&obj->pop);
}

void myQueueFree(MyQueue* obj) {
    StackDestroy(&obj->push);
    StackDestroy(&obj->pop);
    free(obj);
    obj==NULL;
}

?????????????????感謝你耐心的看到這里?( ′???` )比心,如有哪里有錯誤請?zhí)咭荒_作者o(╥﹏╥)o!?

???????????????????????????????????????????????【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個隊列實現(xiàn)棧與兩個棧實現(xiàn)隊列,數(shù)據(jù)結(jié)構(gòu)與算法煉體 淬體中,數(shù)據(jù)結(jié)構(gòu),c語言

????????????????????????????????????????????????????????????????????????????????給個三連再走嘛~???文章來源地址http://www.zghlxwxcb.cn/news/detail-636911.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)經(jīng)典題目】—兩個隊列實現(xiàn)棧與兩個棧實現(xiàn)隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

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

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

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

    2024年02月03日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)】回溯算法公式化解題 leetcode經(jīng)典題目帶刷:全排列、組合、子集

    【數(shù)據(jù)結(jié)構(gòu)】回溯算法公式化解題 leetcode經(jīng)典題目帶刷:全排列、組合、子集

    一、什么是回溯算法 回溯算法(Backtracking Algorithm)是一種解決 組合問題 、 排列問題 、 選擇問題 等一類問題的常用算法。它通過嘗試所有可能的選擇來找到問題的解,當發(fā)現(xiàn)當前選擇不符合要求時,就回溯到之前的狀態(tài),然后嘗試其他的選擇。 1、基本思想: 從問題的起

    2024年02月11日
    瀏覽(35)
  • 經(jīng)典TopK問題、優(yōu)先級隊列 與 堆的糾葛一文為你解惑——數(shù)據(jù)結(jié)構(gòu)

    經(jīng)典TopK問題、優(yōu)先級隊列 與 堆的糾葛一文為你解惑——數(shù)據(jù)結(jié)構(gòu)

    前言: 本篇文章以 TopK 問題為引,具體闡述了 PriorityQueue 實現(xiàn)的基本邏輯——堆 數(shù)據(jù)結(jié)構(gòu),以及PriorityQueue 的常用方法。如有問題歡迎看官朋友指正,如果覺得文章還不錯的話,求點贊、收藏、評論 三連。 重點: 堆的基本實現(xiàn)邏輯 PriorityQueue 運用和源碼分析 TopK 問題的解法

    2023年04月22日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)—隊列的實現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu)—隊列的實現(xiàn)】

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、隊列 1.1隊列的概念及結(jié)構(gòu) 二、隊列的實現(xiàn) 2.1頭文件的實現(xiàn)—Queue.h 2.2源文件的實現(xiàn)—Queue.c 2.3源文件的測試—test.c 三、測試隊列實際數(shù)據(jù)的展示 3.1正常隊列的出入 3.2入隊列的同時存

    2024年02月04日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——隊列的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)——隊列的實現(xiàn)

    隊列 ,又稱為佇列(queue),計算機科學中的一種抽象資料類型,是先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中通常用鏈表或者數(shù)組來實現(xiàn)。隊列只允許在后端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。 這段代碼使用 typedef 定義了一個

    2024年02月10日
    瀏覽(32)
  • 數(shù)據(jù)結(jié)構(gòu) | 隊列的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu) | 隊列的實現(xiàn)

    隊列:只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出 FIFO(First In First Out) 入隊列:進行插入操作的一端稱為隊尾 出隊列:進行刪除操作的一端稱為隊頭 隊列也可以數(shù)組和鏈表的結(jié)構(gòu)實現(xiàn),使用鏈表的結(jié)構(gòu)實現(xiàn)更優(yōu)一些,因為如

    2024年02月05日
    瀏覽(15)
  • 數(shù)據(jù)結(jié)構(gòu)/隊列實現(xiàn)棧

    數(shù)據(jù)結(jié)構(gòu)/隊列實現(xiàn)棧

    在學習數(shù)據(jù)結(jié)構(gòu)的過程當中,我們會學到棧和隊列,在本篇文章中,重點講解的是隊列實現(xiàn)棧,在上篇文章中已經(jīng)簡單介紹過棧和隊列的使用說明,以及棧實現(xiàn)隊列。(2條消息) 數(shù)據(jù)結(jié)構(gòu)/棧實現(xiàn)隊列_Y君的進化史的博客-CSDN博客 關(guān)于一個隊列的簡單使用方式: ? ?關(guān)于一個棧的

    2024年02月02日
    瀏覽(17)
  • 【數(shù)據(jù)結(jié)構(gòu)】隊列及其實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】隊列及其實現(xiàn)

    目錄 ??前言 認識隊列 隊列的初始化 隊列判空 數(shù)據(jù)隊尾入隊 數(shù)據(jù)隊頭出隊 取隊頭數(shù)據(jù) 取隊尾數(shù)據(jù) 隊列數(shù)據(jù)的個數(shù) 隊列銷毀 總結(jié) 上次我們學習了棧及其實現(xiàn),當然也少不它的好兄弟隊列啦,今天我們開始隊列的學習 隊列的性質(zhì)是 先進先出 ,就比如車輛進出隧道一般,它

    2024年02月09日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)隊列的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)隊列的實現(xiàn)

    本章介紹數(shù)據(jù)結(jié)構(gòu)隊列的內(nèi)容,我們會從隊列的定義以及使用和OJ題來了解隊列,話不多說,我們來實現(xiàn)吧 隊列 1。隊列的概念及結(jié)構(gòu) 隊列:只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出 FIFO(First In First Out) 入隊列:進行插入

    2024年02月11日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】隊列的實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】隊列的實現(xiàn)

    隊列是一種常用的數(shù)據(jù)結(jié)構(gòu),也是一種操作受限制的線性表,特點是只允許在表的頭部進行刪除操作,在表的尾部進行插入操作,隊列具有先進先出FIFO(First In First Out)。 入隊列:進行插入操作的一端稱為隊尾 出隊列:進行刪除操作的一端稱為隊頭 我們實現(xiàn)可以用數(shù)組和鏈表

    2024年02月02日
    瀏覽(40)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包