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

【C++】【數(shù)據(jù)結(jié)構(gòu)】循環(huán)隊列的基本操作(初始化、入隊、出隊、取隊頭元素、遍歷輸出隊列、求隊列長度)順序隊列的算法實現(xiàn)【附全代碼】

這篇具有很好參考價值的文章主要介紹了【C++】【數(shù)據(jù)結(jié)構(gòu)】循環(huán)隊列的基本操作(初始化、入隊、出隊、取隊頭元素、遍歷輸出隊列、求隊列長度)順序隊列的算法實現(xiàn)【附全代碼】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

C++實現(xiàn)循環(huán)隊列的算法+步驟(附全代碼):

使用c++完成數(shù)據(jù)結(jié)構(gòu)循環(huán)隊列的基本操作,包括(初始化、入隊、出隊、取隊頭元素、遍歷輸出隊列、求隊列長度等),可直接編譯運行。

隊列又稱為 “先進先出” (FIFO)線性表。限定插入操作只能在隊尾進行,而刪除操作只能在隊首進行。
循環(huán)隊列——采用順序存儲結(jié)構(gòu)來實現(xiàn),用一組連續(xù)的存儲單元依次存放從隊首到隊尾的元素,附設(shè)兩個整型變量front和rear分別指向隊首元素和隊尾元素的位置。

循環(huán)隊列的定義:

#define MAXQSIZE 100
typedef int QElemType;
typedef int Status;

//隊列的順序存儲結(jié)構(gòu)
typedef struct
{
	QElemType* base;  //存儲空間的基地址
	int front;		  //頭指針
	int rear;         //尾指針
}SqQueue;

循環(huán)隊列的初始化:

【算法步驟】

① 為隊列分配一個最大容量為MAXQSIZE的數(shù)組空間,base指向數(shù)組空間首地址。
② 頭指針和尾指針置為零,表示隊列為空。

【算法描述】

//循環(huán)隊列的初始化
Status InitQueue(SqQueue& Q)
{//構(gòu)造一個空隊列Q

	Q.base = new QElemType[MAXQSIZE];
	if(!Q.base)
		exit(OVERFLOW);    //存儲分配失敗
	Q.front = Q.rear = 0;
	return OK;
}

循環(huán)隊列的入隊:

【算法步驟】

① 判斷隊列是否滿,滿則返回ERROR。
② 將新元素插入隊尾。
③ 隊尾指針加1。

【算法描述】

//循環(huán)隊列的入隊
Status EnQueue(SqQueue& Q, QElemType e)
{//插入元素e為Q的新的隊尾元素

	if ((Q.rear + 1) % MAXQSIZE == Q.front)  
		return ERROR;    //尾指針在循環(huán)意義上加1后等于頭指針,表明隊滿
	Q.base[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MAXQSIZE;
	return OK;
}

循環(huán)隊列的出隊:

【算法步驟】

① 判斷隊列是否為空,若空則返回ERROR。
② 保存隊頭元素。
③ 隊頭指針加1。

【算法描述】

//循環(huán)隊列的出隊
Status DeQueue(SqQueue& Q, QElemType &e) 
{//刪除Q的隊頭元素,用e返回其值

	if (Q.front == Q.rear)
		return ERROR;
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXQSIZE;
	return OK;
}

取循環(huán)隊列的隊頭元素:

【算法步驟】

① 判斷隊列是否空。
② 返回隊頭元素的值,隊頭指針不變。

【算法描述】

//取循環(huán)隊列的隊頭元素
Status GetHead(SqQueue Q)
{//返回Q的隊頭元素,不修改隊頭指針

	if (Q.front != Q.rear)   //隊列非空
		return Q.base[Q.front];   //返回隊頭元素的值,隊頭指針不變
}

取循環(huán)隊列的隊頭元素:

【算法步驟】

① 判斷隊列是否空,若空則返回ERROR。
② 循環(huán)輸出隊頭元素。

【算法描述】

//遍歷輸出循環(huán)隊列
Status QueueTraverse(SqQueue Q)
{
	cout << "當前隊列為:";
	if (Q.front == Q.rear)
		return ERROR;
	while (Q.front != Q.rear)   //隊列非空
	{
		cout << Q.base[Q.front] << " ";
		Q.front = (Q.front + 1) % MAXQSIZE;
	}
	cout << endl;
}

求循環(huán)隊列長度:


【算法描述】

//求循環(huán)隊列長度
Status QueueLength(SqQueue Q)
{//返回Q的元素個數(shù)

	int len = (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
	cout << "循環(huán)隊列的長度為:" << len << endl;
	return OK;
}

全代碼如下:

//循環(huán)隊列的基本操作.cpp
#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
#define MAXQSIZE 100
typedef int QElemType;
typedef int Status;

//隊列的順序存儲結(jié)構(gòu)
typedef struct
{
	QElemType* base;  //存儲空間的基地址
	int front;		  //頭指針
	int rear;         //尾指針
}SqQueue;

Status InitQueue(SqQueue&);	    //初始化隊列 
Status EnQueue(SqQueue&, QElemType);    //入隊
Status DeQueue(SqQueue&, QElemType &);  //出隊
Status GetHead(SqQueue);	    //取隊頭元素 
Status QueueTraverse(SqQueue);	//遍歷隊列
Status QueueLength(SqQueue);	//隊列長度

int main()
{
	SqQueue S;
	int e, a;
	if (InitQueue(S))
		cout << "循環(huán)隊列初始化成功!" << endl;
	else
		cout << "循環(huán)隊列初始化失??!" << endl;
	
	while (1)
	{
		cout << "\n【1】入隊  【2】出隊  【3】取隊頭元素  【4】輸出隊列  【5】求隊列長度  【0】退出" << endl;
		cout << "請選擇要進行的操作:";
		cin >> a;
		switch (a)
		{
		case 1:
			int x, n;
			cout << "請輸入要插入的元素個數(shù):";
			cin >> n;
			for (int i = 0; i < n; i++) 
			{
				cout << "請輸入第" << i + 1 << "元素值:";
				cin >> x;
				EnQueue(S, x);
			}
			cout << "入隊完成!" << endl;
			break;
		case 2:
			cout << "請輸入要刪除的元素個數(shù):";
			cin >> n;
			for (int j = 0; j < n; j++) {
				if (!DeQueue(S, e))
					cout << "出隊失?。? << endl;
				else
					cout << "第【" << j+1 << "】個元素:" << e << " 出隊成功!" << endl;
			}
			break;
		case 3:
			cout << "隊頭元素為:" << GetHead(S) << endl;
			break;
		case 4:
			if(!QueueTraverse(S))
				cout << "隊列為空!" << endl;
			break;
		case 5:
			QueueLength(S);
			break;
		case 0: return OK;
		default:
			return OK;
		}
	}
	return 0;
}

//循環(huán)隊列的初始化
Status InitQueue(SqQueue& Q)
{//構(gòu)造一個空隊列Q

	Q.base = new QElemType[MAXQSIZE];
	if(!Q.base)
		exit(OVERFLOW);    //存儲分配失敗
	Q.front = Q.rear = 0;
	return OK;
}

//循環(huán)隊列的入隊
Status EnQueue(SqQueue& Q, QElemType e)
{//插入元素e為Q的新的隊尾元素

	if ((Q.rear + 1) % MAXQSIZE == Q.front)  
		return ERROR;    //尾指針在循環(huán)意義上加1后等于頭指針,表明隊滿
	Q.base[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MAXQSIZE;
	return OK;
}

//循環(huán)隊列的出隊
Status DeQueue(SqQueue& Q, QElemType &e) 
{//刪除Q的隊頭元素,用e返回其值

	if (Q.front == Q.rear)
		return ERROR;
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXQSIZE;
	return OK;
}

//取循環(huán)隊列的隊頭元素
Status GetHead(SqQueue Q)
{//返回Q的隊頭元素,不修改隊頭指針

	if (Q.front != Q.rear)   //隊列非空
		return Q.base[Q.front];   //返回隊頭元素的值,隊頭指針不變
}

//遍歷輸出循環(huán)隊列
Status QueueTraverse(SqQueue Q)
{
	cout << "當前隊列為:";
	if (Q.front == Q.rear)
		return ERROR;
	while (Q.front != Q.rear)   //隊列非空
	{
		cout << Q.base[Q.front] << " ";
		Q.front = (Q.front + 1) % MAXQSIZE;
	}
	cout << endl;
}

//求循環(huán)隊列長度
Status QueueLength(SqQueue Q)
{//返回Q的元素個數(shù)

	int len = (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
	cout << "循環(huán)隊列的長度為:" << len << endl;
	return OK;
}

運行結(jié)果:

【C++】【數(shù)據(jù)結(jié)構(gòu)】循環(huán)隊列的基本操作(初始化、入隊、出隊、取隊頭元素、遍歷輸出隊列、求隊列長度)順序隊列的算法實現(xiàn)【附全代碼】

美美的解決!文章來源地址http://www.zghlxwxcb.cn/news/detail-415015.html

到了這里,關(guān)于【C++】【數(shù)據(jù)結(jié)構(gòu)】循環(huá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)】棧和隊列(棧的基本操作和基礎(chǔ)知識)

    【數(shù)據(jù)結(jié)構(gòu)】棧和隊列(棧的基本操作和基礎(chǔ)知識)

    ??個人主頁: 秦jh__ https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 ???系列專欄: 《數(shù)據(jù)結(jié)構(gòu)》 https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 目錄 ?前言 棧 棧的概念和結(jié)構(gòu) 棧的實現(xiàn) ?編輯 數(shù)組棧的實現(xiàn) 總的聲明 初始化 ?插入 刪除 取棧頂元素 銷毀 判斷是否為空

    2024年02月03日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)(C語言實現(xiàn))——棧和隊列的介紹及基本操作的實現(xiàn)(動態(tài)順序棧+鏈隊)

    今天我們來學習另外兩個線性結(jié)構(gòu)——棧和隊列,棧和隊列是操作受限的線性表,因此,可稱為限定性的數(shù)據(jù)結(jié)構(gòu)。 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的一端 稱為棧頂,另一端稱為棧底。棧中的數(shù)據(jù)元素遵守

    2023年04月19日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——單鏈表基本操作實現(xiàn) (c++)

    數(shù)據(jù)結(jié)構(gòu)——單鏈表基本操作實現(xiàn) (c++)

    單鏈表鏈式存儲結(jié)構(gòu)的特點是:用一組任意的存儲單元存儲線性表的數(shù)據(jù)元素(這里存儲單元可以是連續(xù)的,也可以是不連續(xù)的),為了表示每個數(shù)據(jù)元素a與其直接后繼數(shù)據(jù)元素之間的邏輯關(guān)系,除了存儲信息本身外還要存儲一個指示其直接后繼的信息(地址). 這兩部分信

    2024年02月03日
    瀏覽(88)
  • 數(shù)據(jù)結(jié)構(gòu)-線性表的順序表基本操作代碼實現(xiàn)(超級詳細清晰 C++實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)-線性表的順序表基本操作代碼實現(xiàn)(超級詳細清晰 C++實現(xiàn))

    順序表是用一段 物理地址連續(xù)的存儲單元 依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲。在數(shù)組上完成數(shù)據(jù)的增刪查改。 順序表: 可動態(tài)增長的數(shù)組,要求數(shù)據(jù)是連續(xù)存儲的 特點: 隨機訪問 順序既可以 靜態(tài)分配 ,也可以 動態(tài)分配 。在靜態(tài)分配時,由于數(shù)組

    2024年02月07日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)—循環(huán)隊列(環(huán)形隊列)

    數(shù)據(jù)結(jié)構(gòu)—循環(huán)隊列(環(huán)形隊列)

    循環(huán)隊列是一種線性數(shù)據(jù)結(jié)構(gòu),其操作表現(xiàn)基于 FIFO(先進先出)原則并且 隊尾被連接在隊首之后以形成一個循環(huán) 。它也被稱為“ 環(huán)形緩沖器 ”。 循環(huán)隊列的一個好處是可以利用這個隊列之前用過的空間。在一個普通隊列里,一旦一個隊列滿了,我們就不能插入下一個元素

    2024年02月11日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)--隊列與循環(huán)隊列

    數(shù)據(jù)結(jié)構(gòu)--隊列與循環(huán)隊列

    ? ? ? ? 隊列是什么,先聯(lián)想一下隊,排隊先來的人排前面先出,后來的人排后面后出;隊列的性質(zhì)也一樣,先進隊列的數(shù)據(jù)先出,后進隊列的后出;就像圖一的樣子: ?圖1 ? ? ? ? 如圖1,1號元素是最先進的,開始出隊時,那么他就是最先出的,然后12進隊,就應該排在最

    2024年02月10日
    瀏覽(15)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】--隊列的特殊結(jié)構(gòu)-循環(huán)隊列

    【數(shù)據(jù)結(jié)構(gòu)和算法】--隊列的特殊結(jié)構(gòu)-循環(huán)隊列

    循環(huán)隊列是隊列的一種特殊結(jié)構(gòu),它的 長度是固定的 k ,同樣是 先進先出 ,理論結(jié)構(gòu)是 首尾相連的環(huán)形循環(huán)結(jié)構(gòu) 。其理論結(jié)構(gòu)大致如下: 具體結(jié)構(gòu)描述可以參考 LeetCode : 622. 設(shè)計循環(huán)隊列的題目要求,大致如下: 設(shè)計你的循環(huán)隊列實現(xiàn)。 循環(huán)隊列是一種 線性數(shù)據(jù)結(jié)構(gòu) ,

    2024年02月04日
    瀏覽(16)
  • 數(shù)據(jù)結(jié)構(gòu):循環(huán)隊列的實現(xiàn)(leetcode622.設(shè)計循環(huán)隊列)

    數(shù)據(jù)結(jié)構(gòu):循環(huán)隊列的實現(xiàn)(leetcode622.設(shè)計循環(huán)隊列)

    ? 目錄 一.循環(huán)隊列簡單介紹 二.用靜態(tài)數(shù)組實現(xiàn)循環(huán)隊列 1.數(shù)組循環(huán)隊列結(jié)構(gòu)設(shè)計 2.數(shù)組循環(huán)隊列的堆區(qū)內(nèi)存申請接口? 3.數(shù)據(jù)出隊和入隊的接口實現(xiàn) 4.其他操作接口 5.數(shù)組循環(huán)隊列的實現(xiàn)代碼總覽? 三.靜態(tài)單向循環(huán)鏈表實現(xiàn)循環(huán)隊列? 1.鏈表循環(huán)隊列的結(jié)構(gòu)設(shè)計 2.創(chuàng)建靜態(tài)

    2024年02月03日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)--串的基本操作

    數(shù)據(jù)結(jié)構(gòu)--串的基本操作

    第五話 數(shù)據(jù)結(jié)構(gòu)之串 文章目錄 一、了解什么是串 二、串的基本特征 三、串的基本操作 串的初始化 串的輸出? 四、串的匹配模式 五、總結(jié) 串(即字符串)是一種特殊的線性表,在信息檢索、文本編輯等領(lǐng)域有廣泛的應用。其特殊性體現(xiàn)在組成線性表的每個數(shù)據(jù)元素是單個

    2023年04月17日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu)--圖的基本操作

    數(shù)據(jù)結(jié)構(gòu)--圖的基本操作

    使用的存儲模式: 圖的基本操作: ? Adjacent(G,x,y):判斷圖G是否存在邊x, y或(x, y)。 ? Neighbors(G,x):列出圖G中與結(jié)點x鄰接的邊。 ? InsertVertex(G,x):在圖G中插入頂點x。 ? DeleteVertex(G,x):從圖G中刪除頂點x。 ? AddEdge(G,x,y):若無向邊(x, y)或有向邊x, y不存在,則向圖G中添加該

    2024年02月16日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包