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

C++?棧和隊列的實現(xiàn)超詳細解析

 更新時間:2022年03月24日 09:05:27   作者:程序猿教你打籃球  
棧和隊列,嚴格意義上來說,也屬于線性表,因為它們也都用于存儲邏輯關(guān)系為?"一對一"?的數(shù)據(jù),但由于它們比較特殊,因此將其單獨作為一章,做重點講解

可算是把鏈表給結(jié)束了,很多小伙伴已經(jīng)迫不及待想看到棧和隊列了,那么它來了!相信有了順序表和鏈表的基礎(chǔ),棧和隊列對于你們來講也是輕輕松松,那我就廢話不多說,直接進入今天的重點:

1、棧的介紹:

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

壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數(shù)據(jù)在棧頂。

出棧:棧的刪除操作叫做出棧。出數(shù)據(jù)也在棧頂。

棧的實現(xiàn)一般可以使用數(shù)組或者鏈表實現(xiàn),相對而言數(shù)組的結(jié)構(gòu)實現(xiàn)更優(yōu)一些。因為數(shù)組在尾上 插入數(shù)據(jù)的代價比較小。

本次我們是用動態(tài)數(shù)組來實現(xiàn)棧!靜態(tài)棧在實際中一般不實用!

2、棧的常用接口實現(xiàn) 

 ?? 首先是我們動態(tài)棧的結(jié)構(gòu):

 有了順序表和鏈表的基礎(chǔ)我就直接上代碼了!

typedef int STDataType;
 
typedef struct Stack
{
	STDataType* a;
	int top;
	int capacity;
}ST;

?? 棧的初始化:

 ? 入棧操作:

 ?? 出棧操作:

出棧就很簡單了,我們直接使top--就可以了,因為我們插入數(shù)據(jù)是先在top位置插入,然后再top++,這樣我們下次插入數(shù)據(jù)就會覆蓋pos位置的數(shù)據(jù)!注意:當棧沒有初始化,沒有數(shù)據(jù)的情況下不能進行出棧操作!

void StackPop(ST* ps)
{
	assert(ps);
	assert(ps->top > 0);
	ps->top--;
}

 ?? 取棧頂元素操作:

 我們知道top是棧頂元素的后一個,所以我們直接取top-1下標位置的數(shù)據(jù)就可以!

STDataType StackTop(ST* ps)
{
	assert(ps);
	assert(ps->top > 0);
	return ps->a[ps->top - 1];
}

??  求棧的節(jié)點個數(shù):

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

?? 判斷棧是否為空:

 我們使用返回值為bool型的函數(shù),bool類型只會返回true或false見下代碼:

bool StackEmpty(ST* ps)
{
	assert(ps);
	return ps->top == 0;
}

 ?? 銷毀棧操作:

 記得養(yǎng)成釋放動態(tài)內(nèi)存的習(xí)慣哦!

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

 棧相對來說還是比較簡單了,棧的基本接口就到這里了,下面我們來實現(xiàn)隊列的基本接口操作!

3、隊列的介紹

隊列:只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出FIFO(First In First Out) 入隊列:進行插入操作的一端稱為隊尾出隊列,進行刪除操作的一 端稱為隊頭!

隊列也可以數(shù)組和鏈表的結(jié)構(gòu)實現(xiàn),使用鏈表的結(jié)構(gòu)實現(xiàn)更優(yōu)一些,因為如果使用數(shù)組的結(jié)構(gòu), 出隊列在數(shù)組頭上出數(shù)據(jù),效率會比較低。

4、隊列的常用接口實現(xiàn) 

?? 隊列的結(jié)構(gòu): 

 結(jié)構(gòu)搭建這里我們就不多說了,直接走代碼!

typedef int QDataType;
 
typedef struct QueueNode
{
	struct QueueNode* next;
	QDataType data;
}QNode;
 
typedef struct Queue
{
	QNode* head;
	QNode* tail;
}Queue;

?? 隊列的初始化:

這里我們只需要初始化隊頭指針和隊尾指針就可以了! 

void QueueInit(Queue* pq)
{
	assert(pq);
	pq->head = pq->tail = NULL;
}

?? 隊尾入節(jié)點:

 ?? 隊頭出節(jié)點:

??  取隊頭節(jié)點數(shù)據(jù):

QDataType QueueFront(Queue* pq)
{
	assert(pq);
	assert(pq->head);
	
	return pq->head->data;
}

?? 取隊尾節(jié)點數(shù)據(jù):

QDataType QueueBack(Queue* pq)
{
	assert(pq);
	assert(pq->head);
 
	return pq->tail->data;
}

??  求隊列節(jié)點個數(shù):

int QueueSize(Queue* pq)
{    
    int size = 0;
    QNode* cur = pq->head;
    assert(pq);
    while (cur)
    {
        ++size;
        cur = cur->next;
    }
    return size;
}

?? 判斷隊列是否為空:

跟上面棧一樣使用bool型類型

bool QueueEmpty(Queue* pq)
{
	assert(pq);
	return pq->head == NULL;
}

?? 銷毀隊列操作:

void QueueDestory(Queue* pq)
{
	assert(pq);
	QNode* cur = pq->head;
	while (cur)
	{
		QNode* next = cur->next;
		free(cur);
		cur = next;
	}
	pq->head = pq->tail = NULL;
}

其實棧和隊列這一章算簡單的,如果有前面順序表和鏈表的基礎(chǔ),這個就是輕輕松松的事,所以我只在重點的地方畫了圖解,沒畫圖解的地方相信小伙伴們也是看得懂的!

gitee(碼云):Mercury. (zzwlwp) - Gitee.com       

到此這篇關(guān)于C++ 棧和隊列的實現(xiàn)超詳細解析的文章就介紹到這了,更多相關(guān)C++ 棧和隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Qt中的雙緩沖機制與實例應(yīng)用

    詳解Qt中的雙緩沖機制與實例應(yīng)用

    所謂雙緩沖機制,是指在繪制控件時,首先將要繪制的內(nèi)容繪制在一個圖片中,再將圖片一次性地繪制到控件上。本文主要為大家介紹了Qt中的雙緩沖機制與實例應(yīng)用,希望對大家有所幫助
    2023-03-03
  • C語言實現(xiàn)ATM自動取款機系統(tǒng)的示例代碼

    C語言實現(xiàn)ATM自動取款機系統(tǒng)的示例代碼

    ATM自動取款機系統(tǒng)是銀行業(yè)務(wù)流程中十分重要且必備的環(huán)節(jié)之一,在銀行業(yè)務(wù)流程中起著承上啟下的作用。本文將用C語言實現(xiàn)一個簡單的ATM自動取款機系統(tǒng),需要的可以參考一下
    2022-08-08
  • c++重載的詳細總結(jié)

    c++重載的詳細總結(jié)

    作為成員函數(shù)重載符,對于雙目操作符重載函數(shù)只需一個形參,對于單目操作符重載函數(shù)不需要形參
    2013-09-09
  • C語言?棧與數(shù)組的實現(xiàn)詳解

    C語言?棧與數(shù)組的實現(xiàn)詳解

    棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入?;驂簵?,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素
    2022-04-04
  • Visual Studio新建類從默認internal改為public

    Visual Studio新建類從默認internal改為public

    本文將介紹如何將Visual Studio中的internal修飾符更改為public,以實現(xiàn)更廣泛的訪問和重用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • c++中的繼承關(guān)系

    c++中的繼承關(guān)系

    繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的層次結(jié)構(gòu),體現(xiàn)了由簡單到復(fù)雜的認知過程,本文給大家介紹c++中的繼承關(guān)系,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C++ 中字符串操作--寬窄字符轉(zhuǎn)換的實例詳解

    C++ 中字符串操作--寬窄字符轉(zhuǎn)換的實例詳解

    這篇文章主要介紹了C++ 中字符串操作--寬窄字符轉(zhuǎn)換的實例詳解的相關(guān)資料,希望通過本文能幫助到大家實現(xiàn)這樣的功能更,需要的朋友可以參考下
    2017-09-09
  • C++實現(xiàn)旋轉(zhuǎn)數(shù)組的二分查找

    C++實現(xiàn)旋轉(zhuǎn)數(shù)組的二分查找

    這篇文章主要介紹了C++實現(xiàn)旋轉(zhuǎn)數(shù)組的二分查找方法,涉及數(shù)組的操作,有值得借鑒的技巧,需要的朋友可以參考下
    2014-09-09
  • C++實現(xiàn)接兩個鏈表實例代碼

    C++實現(xiàn)接兩個鏈表實例代碼

    這篇文章主要介紹了C++實現(xiàn)接兩個鏈表實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++實現(xiàn)教職工管理系統(tǒng)課程設(shè)計

    C++實現(xiàn)教職工管理系統(tǒng)課程設(shè)計

    這篇文章主要為大家詳細介紹了C++實現(xiàn)教職工管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

固安县| 左云县| 易门县| 远安县| 叶城县| 宁德市| 江陵县| 资兴市| 贡山| 新安县| 西乡县| 专栏| 乌鲁木齐县| 阿坝| 环江| 通化县| 图木舒克市| 运城市| 托克逊县| 日喀则市| 京山县| 海盐县| 扬州市| 延川县| 金乡县| 河东区| 红安县| 五台县| 昌宁县| 射阳县| 临澧县| 邹城市| 唐山市| 卢氏县| 和林格尔县| 阿克苏市| 枣阳市| 陕西省| 青岛市| 东方市| 南靖县|