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

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

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

前言:上次我們已經(jīng)學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)中一個(gè)重要的線性表—棧,那么我們這一次就來(lái)學(xué)習(xí)另外一個(gè)重要的線性表—隊(duì)列。

數(shù)據(jù)結(jié)構(gòu)—隊(duì)列的實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

目錄:

一、
隊(duì)列的概念
二、
隊(duì)列的實(shí)現(xiàn):
1.隊(duì)列的創(chuàng)建
三、
隊(duì)列的操作
1.初始化隊(duì)列
2.隊(duì)尾入隊(duì)列
3.隊(duì)頭出隊(duì)列
4.獲取隊(duì)列頭部元素
5.獲取隊(duì)列隊(duì)尾元素
6.獲取隊(duì)列中有效元素個(gè)數(shù)
7.檢測(cè)隊(duì)列是否為空,如果為空返回非零結(jié)果,如果非空返回0
8.銷毀隊(duì)列
四、
完整代碼展示

隊(duì)列的概念

隊(duì)列的概念及結(jié)構(gòu):隊(duì)列:只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表,隊(duì)列具有先進(jìn)先出FIFO(First In First Out) 入隊(duì)列:進(jìn)行插入操作的一端稱為隊(duì)尾 出隊(duì)列:進(jìn)行刪除操作的一端稱為隊(duì)頭。
數(shù)據(jù)結(jié)構(gòu)—隊(duì)列的實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

隊(duì)列的實(shí)現(xiàn)

隊(duì)列也可以數(shù)組和鏈表的結(jié)構(gòu)實(shí)現(xiàn),使用鏈表的結(jié)構(gòu)實(shí)現(xiàn)更優(yōu)一些,因?yàn)槿绻褂脭?shù)組的結(jié)構(gòu),出隊(duì)列在數(shù)組頭上出數(shù)據(jù),效率會(huì)比較低。
數(shù)據(jù)結(jié)構(gòu)—隊(duì)列的實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言
我們用三個(gè)文件來(lái)完成對(duì)它的操作。

隊(duì)列的創(chuàng)建:

typedef int QDataType;
// 鏈?zhǔn)浇Y(jié)構(gòu):表示隊(duì)列
typedef struct QueueNode
{
	QDataType val;
	struct QueueNode* next;
}QNode;

// 隊(duì)列的結(jié)構(gòu)
typedef struct Queue
{
	QNode* phead;
	QNode* ptail;
	int size;
}Queue;

隊(duì)列的實(shí)現(xiàn):

隊(duì)列的初始化:

void QueueInit(Queue* pq)
{
	assert(pq);
	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}

隊(duì)列里的頭和尾都為空。

隊(duì)尾入隊(duì)列:

void QueuePush(Queue* pq, QDataType x)
{
	assert(pq);

	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return;
	}

	newnode->val = x;
	newnode->next = NULL;

	if (pq->ptail == NULL)
	{
		pq->ptail = pq->phead = newnode;
	}
	else
	{
		pq->ptail->next = newnode;
		pq->ptail = newnode;
	}

	pq->size++;
}

如果我們的隊(duì)尾元素為空,那么我們的隊(duì)尾就是newnode,如果我們的隊(duì)尾不為空,我們的ptail的下一個(gè)指向newnode,現(xiàn)在的隊(duì)尾就為newnode。

隊(duì)頭出隊(duì)列:

void QueuePop(Queue* pq)
{
	assert(pq);
	// 
	assert(pq->phead);

	QNode* del = pq->phead;
	pq->phead = pq->phead->next;
	free(del);
	del = NULL;

	if (pq->phead == NULL)
		pq->ptail = NULL;

	pq->size--;
}

如果我們直接刪除隊(duì)頭元素那么我們就無(wú)法訪問(wèn)下一個(gè)元素,所以我們先把隊(duì)頭元素保存起來(lái),讓現(xiàn)在的隊(duì)頭元素為原來(lái)隊(duì)頭元素的下一個(gè)元素,在給原來(lái)的隊(duì)頭元素刪除。

獲取隊(duì)列頭部元素:

QDataType QueueFront(Queue* pq)
{
	assert(pq);
	// 
	assert(pq->phead);

	return pq->phead->val;
}

獲取隊(duì)列隊(duì)尾元素:

QDataType QueueBack(Queue* pq)
{
	assert(pq);
	// 
	assert(pq->ptail);

	return pq->ptail->val;
}

獲取隊(duì)列中有效元素個(gè)數(shù):

int QueueSize(Queue* pq)
{
	assert(pq);

	return pq->size;
}

size就是我們有效元素的個(gè)數(shù),這里返回size就可以了。

檢測(cè)隊(duì)列是否為空,如果為空返回非零結(jié)果,如果非空返回0:

bool QueueEmpty(Queue* pq)
{
	assert(pq);

	return pq->phead == NULL;
}

隊(duì)列為空返回0,不為空返回非0,后面測(cè)試代碼的循環(huán)條件就是不為0,就輸出,為0就跳出循環(huán)。

銷毀隊(duì)列:

void QueueDestroy(Queue* pq)
{
	assert(pq);

	QNode* cur = pq->phead;
	while (cur)
	{
		QNode* next = cur->next;
		free(cur);
		cur = next;
	}

	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}

完整代碼展示:

Queue.h:

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>

typedef int QDataType;
typedef struct QueueNode
{
	QDataType val;
	struct QueueNode* next;
}QNode;

typedef struct Queue
{
	QNode* phead;
	QNode* ptail;
	int size;
}Queue;

void QueueInit(Queue* pq);
void QueueDestroy(Queue* pq);
void QueuePush(Queue* pq, QDataType x);
void QueuePop(Queue* pq);
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);
bool QueueEmpty(Queue* pq);
int QueueSize(Queue* pq);

Queue.c:

#include"Queue.h"

void QueueInit(Queue* pq)
{
	assert(pq);
	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}

void QueueDestroy(Queue* pq)
{
	assert(pq);

	QNode* cur = pq->phead;
	while (cur)
	{
		QNode* next = cur->next;
		free(cur);
		cur = next;
	}

	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}

void QueuePush(Queue* pq, QDataType x)
{
	assert(pq);

	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return;
	}

	newnode->val = x;
	newnode->next = NULL;

	if (pq->ptail == NULL)
	{
		pq->ptail = pq->phead = newnode;
	}
	else
	{
		pq->ptail->next = newnode;
		pq->ptail = newnode;
	}

	pq->size++;
}

void QueuePop(Queue* pq)
{
	assert(pq);
	// 
	assert(pq->phead);

	QNode* del = pq->phead;
	pq->phead = pq->phead->next;
	free(del);
	del = NULL;

	if (pq->phead == NULL)
		pq->ptail = NULL;

	pq->size--;
}

QDataType QueueFront(Queue* pq)
{
	assert(pq);
	// 
	assert(pq->phead);

	return pq->phead->val;
}

QDataType QueueBack(Queue* pq)
{
	assert(pq);
	// 
	assert(pq->ptail);

	return pq->ptail->val;
}

bool QueueEmpty(Queue* pq)
{
	assert(pq);

	return pq->phead == NULL;
}

int QueueSize(Queue* pq)
{
	assert(pq);

	return pq->size;
}

代碼測(cè)試:
test.c:

#include"Queue.h"
int main()
{
	Queue q;
	QueueInit(&q);
	QueuePush(&q, 1);
	QueuePush(&q, 2);
	QueuePush(&q, 3);
	printf("%d ", QueueFront(&q));
	QueuePop(&q);
	printf("%d ", QueueFront(&q));
	QueuePop(&q);

	QueuePush(&q, 4);
	QueuePush(&q, 5);
	while (!QueueEmpty(&q))
	{
		printf("%d ", QueueFront(&q));
		QueuePop(&q);
	}

	QueueDestroy(&q);

	return 0;
}

這里我們先入隊(duì)1,2,3,隊(duì)頭就是1,隊(duì)尾就是3,我們?cè)诔鲫?duì),先輸出1,在把1出隊(duì),這樣我們就訪問(wèn)2,在輸出2之后把2出隊(duì),入隊(duì)4,5,如果我們的隊(duì)列不為0就輸出3,4,5。最后輸出的結(jié)果如下圖:
數(shù)據(jù)結(jié)構(gòu)—隊(duì)列的實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言

相信大家一定可以完美的拿捏隊(duì)列,感謝各位小伙伴的支持,我們下期再見(jiàn)!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759921.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)—隊(duì)列的實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(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ì)列的實(shí)現(xiàn)(C語(yǔ)言版)

    數(shù)據(jù)結(jié)構(gòu)-隊(duì)列的實(shí)現(xiàn)(C語(yǔ)言版)

    前言 ? ? ? ? 隊(duì)列是一種特殊的線性表,它只允許在一端對(duì)數(shù)據(jù)進(jìn)行插入操作,在另一端對(duì)數(shù)據(jù)進(jìn)行刪除操作的特殊線性表,隊(duì)列具有先進(jìn)先出的(FIFO)的?特性,進(jìn)行插入操作的一端稱為隊(duì)尾,進(jìn)行刪除操作的一端稱為隊(duì)頭。 ? ? ? ? 隊(duì)尾:元素在隊(duì)尾入隊(duì)。插入操作。

    2024年02月13日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))

    隊(duì)列也是一種數(shù)據(jù)結(jié)構(gòu),隊(duì)列也可以用來(lái)存放數(shù)字 每次只能向隊(duì)列里將入一個(gè)數(shù)字,每次只能從隊(duì)列里獲得一個(gè)數(shù)字 在隊(duì)列中,允許插入的一段稱為入隊(duì)口,允許刪除的一段稱為出隊(duì)口 它的原則是先進(jìn)先出(FIFO: first in first out),先進(jìn)入隊(duì)列的數(shù)據(jù)先出去,后進(jìn)入的后出去。

    2024年02月13日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】六、線性表中的隊(duì)列(C語(yǔ)言 -- 鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)隊(duì)列)

    【數(shù)據(jù)結(jié)構(gòu)初階】六、線性表中的隊(duì)列(C語(yǔ)言 -- 鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)隊(duì)列)

    ========================================================================= 相關(guān)代碼gitee自取 : C語(yǔ)言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】五、線性表中的棧(C語(yǔ)言 -- 順序表實(shí)現(xiàn)棧)_高高的胖子的博客-CSDN博客 ?

    2024年02月08日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)初階(用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu))--棧和隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)初階(用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu))--棧和隊(duì)列

    ??歡迎來(lái)到T_X_Parallel的博客!! ?????????博客主頁(yè):T_X_Parallel ?????????專欄 : 數(shù)據(jù)結(jié)構(gòu)初階 ?????????歡迎關(guān)注:??點(diǎn)贊??收藏??留言 這小貓真好看 言歸正傳,通過(guò)上篇有關(guān)順序表和鏈表的博客,可以了解到線性表的一些大致特征,這篇博

    2024年02月08日
    瀏覽(25)
  • (詳解)數(shù)據(jù)結(jié)構(gòu)-----------棧與隊(duì)列 c語(yǔ)言實(shí)現(xiàn)

    (詳解)數(shù)據(jù)結(jié)構(gòu)-----------棧與隊(duì)列 c語(yǔ)言實(shí)現(xiàn)

    本章將會(huì)詳細(xì)講解以下知識(shí)點(diǎn): 目錄 一:棧 ? ? ? ? 1:棧的定義,棧的特點(diǎn) ? ? ? ? 2:用什么結(jié)構(gòu)來(lái)實(shí)現(xiàn)棧與原因的分析? ? ? ? ??3:? (超詳解)棧的常用接口并且附上測(cè)試用例 二:隊(duì)列 ? ? ? ? 1:隊(duì)列的定義,隊(duì)列的特點(diǎn) ? ? ? ? 2:用什么結(jié)構(gòu)來(lái)實(shí)現(xiàn)隊(duì)列與原因的分析

    2024年02月11日
    瀏覽(23)
  • 入門數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言實(shí)現(xiàn)循環(huán)隊(duì)列實(shí)現(xiàn)(詳細(xì)篇)。

    入門數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言實(shí)現(xiàn)循環(huán)隊(duì)列實(shí)現(xiàn)(詳細(xì)篇)。

    目錄 一、前言 二、循環(huán)隊(duì)列的概念 三、實(shí)現(xiàn)循環(huán)隊(duì)列 1、頭文件與特殊函數(shù)介紹 2、循環(huán)隊(duì)列的結(jié)構(gòu)體 3、隊(duì)列的初始化 4、判斷隊(duì)列是否為空 5、隊(duì)列的進(jìn)隊(duì)操作 6、隊(duì)列的出隊(duì)操作 7、返回隊(duì)頭 8、返回隊(duì)列長(zhǎng)度 9、放回隊(duì)列容量大小 10、銷毀隊(duì)列 四、完成隊(duì)列(隊(duì)列完整代

    2024年02月06日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)】隊(duì)列基本操作的實(shí)現(xiàn)(C語(yǔ)言)

    【數(shù)據(jù)結(jié)構(gòu)】隊(duì)列基本操作的實(shí)現(xiàn)(C語(yǔ)言)

    ?? 作者簡(jiǎn)介:一名在后端領(lǐng)域?qū)W習(xí),并渴望能夠?qū)W有所成的追夢(mèng)人。 ?? 個(gè)人主頁(yè):蝸牛牛啊 ?? 系列專欄:??數(shù)據(jù)結(jié)構(gòu)、??C++ ?? 學(xué)習(xí)格言:博觀而約取,厚積而薄發(fā) ?? 歡迎進(jìn)來(lái)的小伙伴,如果小伙伴們?cè)趯W(xué)習(xí)的過(guò)程中,發(fā)現(xiàn)有需要糾正的地方,煩請(qǐng)指正,希望能夠與

    2024年02月16日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語(yǔ)言版)棧和隊(duì)列之隊(duì)列的介紹及實(shí)現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)入門(C語(yǔ)言版)棧和隊(duì)列之隊(duì)列的介紹及實(shí)現(xiàn)

    什么是隊(duì)列呢?我們先看下面的圖: 我們可以理解成高速公路上的隧道,根據(jù)這個(gè)圖的描述 我們把需入隊(duì)的元素看作一輛車,把隊(duì)列看作隧道,由此我們可以看出 隊(duì)列的特點(diǎn)是 只允許從一端進(jìn)入,從另一端離開。 隊(duì)列就是只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪

    2023年04月15日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】詳談隊(duì)列的順序存儲(chǔ)及C語(yǔ)言實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】詳談隊(duì)列的順序存儲(chǔ)及C語(yǔ)言實(shí)現(xiàn)

    大家好,很高興又和大家見(jiàn)面啦?。?! 在上一篇內(nèi)容中,我們?cè)诮榻B完隊(duì)列的基本概念、重要術(shù)語(yǔ)以及基本操作后,又回顧了一下數(shù)據(jù)結(jié)構(gòu)的三要素——數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)以及數(shù)據(jù)的運(yùn)算。 隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)我們已經(jīng)介紹了它的邏輯結(jié)構(gòu)以及數(shù)據(jù)運(yùn)算的定義

    2024年01月21日
    瀏覽(25)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】 C語(yǔ)言實(shí)現(xiàn)單鏈表隊(duì)列詳解

    【算法與數(shù)據(jù)結(jié)構(gòu)】 C語(yǔ)言實(shí)現(xiàn)單鏈表隊(duì)列詳解

    前面我們學(xué)習(xí)了隊(duì)列的順序表的實(shí)現(xiàn),本節(jié)將用單鏈表實(shí)現(xiàn)隊(duì)列。 隊(duì)列也可以數(shù)組和鏈表的結(jié)構(gòu)實(shí)現(xiàn), 使用鏈表的結(jié)構(gòu)實(shí)現(xiàn)更優(yōu)一些,因?yàn)槿绻褂脭?shù)組的結(jié)構(gòu),出隊(duì)列在數(shù)組頭上出數(shù)據(jù),效率會(huì)比較低 。下面我們先復(fù)習(xí)一下隊(duì)列的基本概念: 隊(duì)列:只允許在一端進(jìn)行插入

    2024年04月11日
    瀏覽(94)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包