国产 无码 综合区,色欲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)違法"按鈕提交疑問。

??????????本文將通過完成用隊(duì)列實(shí)現(xiàn)打印楊輝三角,代碼解釋標(biāo)注全面而且清晰,代碼書寫也十分規(guī)范,適合初學(xué)者進(jìn)行學(xué)習(xí),本篇文章算是本人的一些學(xué)習(xí)記錄分享,希望對(duì)有需要的小伙伴提供一些幫助~

希望能幫助大家掌握:

  1. 掌握定義順序隊(duì)和鏈隊(duì)的結(jié)點(diǎn)類型的方法;
  2. 熟悉隊(duì)列的入隊(duì)和出隊(duì)代表的實(shí)際意義;
  3. 掌握兩種存儲(chǔ)結(jié)構(gòu)下隊(duì)列的基本操作:入隊(duì)、出隊(duì)、輸出隊(duì)列等

一、鏈隊(duì)列楊輝三角:

(1)鏈隊(duì)列-楊輝三角
#include<iostream>
#include<fstream>
using namespace std;

#define OK 1
#define ERROR 
#define OVERFLOW -2
typedef int QElemType;
typedef int Status;
typedef int SElemType;

//- - - - - 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)- - - - - 
typedef struct QNode {
	QElemType data;
	struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
	QueuePtr front; //隊(duì)頭指針
	QueuePtr rear; //隊(duì)尾指針
} LinkQueue;

//算法3.16 鏈隊(duì)的初始化
LinkQueue InitQueue() {//構(gòu)造一個(gè)空隊(duì)列Q
	LinkQueue Q;
	Q.front = Q.rear = new QNode; //生成新結(jié)點(diǎn)作為頭結(jié)點(diǎn),隊(duì)頭和隊(duì)尾指針指向此結(jié)點(diǎn)
	Q.front->next = NULL; //頭結(jié)點(diǎn)的指針域置空
	return Q;
}

//算法3.17 鏈隊(duì)的入隊(duì)
LinkQueue InserQ(LinkQueue &Q, QElemType e) {//插入元素e為Q的新的隊(duì)尾元素
	QueuePtr p;
	p = new QNode; //為入隊(duì)元素分配結(jié)點(diǎn)空間,用指針p指向
	p->data = e; //將新結(jié)點(diǎn)數(shù)據(jù)域置為e
	p->next = NULL;
	Q.rear->next = p; //將新結(jié)點(diǎn)插入到隊(duì)尾
	Q.rear = p; //修改隊(duì)尾指針
	return Q;
}

//算法3.18 鏈隊(duì)的出隊(duì)
LinkQueue DeleteQ(LinkQueue &Q) {//刪除Q的隊(duì)頭元素,用e返回其值 
	QueuePtr p;
	int e;
	//if (Q.front == Q.rear)
	//	return ERROR; //若隊(duì)列空,則返回ERROR
	p = Q.front->next; //p指向隊(duì)頭元素
	e = p->data; //e保存隊(duì)頭元素的值
	Q.front->next = p->next; //修改頭指針
	if (Q.rear == p)
		Q.rear = Q.front; //最后一個(gè)元素被刪,隊(duì)尾指針指向頭結(jié)點(diǎn)
	delete p; //釋放原隊(duì)頭元素的空間
	return Q;
}

//算法3.19 取鏈隊(duì)的隊(duì)頭元素
SElemType GetHead(LinkQueue Q) {//返回Q的隊(duì)頭元素,不修改隊(duì)頭指針
	if (Q.front != Q.rear) //隊(duì)列非空
		return Q.front->next->data; //返回隊(duì)頭元素的值,隊(duì)頭指針不變
}

int main()
{  LinkQueue Q;
   int i,n,x,j;
   printf("輸入行數(shù)n:");
   scanf("%d",&n);     /* n為楊輝三角行數(shù) */
   Q=InitQueue();	/*初始化隊(duì)列*/
   Q=InserQ (Q, 1);         /* 第1行的1進(jìn)隊(duì)列 */
   for (i=2; i<=n; i++)     /* 打印第i-1行并生成第i行 */
   {  Q=InserQ (Q, 1);      /* 第i行中的第一個(gè)元素1進(jìn)隊(duì) */
      for(j=1; j<i-1; j++)  /* 打印第i-1行的第j個(gè)*/
      {   printf("%d ",Q.front->next->data);    /* 輸出隊(duì)頭 */
          x=GetHead (Q);  /*x獲得隊(duì)頭的值*/
          Q=DeleteQ (Q);  /*刪除隊(duì)頭元素-出隊(duì)*/
          x=x+ Q.front->next->data;      /* 計(jì)算第i行的值 */
          Q=InserQ (Q, x);  /*x入隊(duì)*/
      }
      printf("%d\n",Q.front->next->data); /* 打印第i-1行的最后一個(gè)1并換行 */
      Q=DeleteQ (Q);      /*刪除隊(duì)頭元素-出隊(duì)*/
      Q=InserQ (Q,1);       /* 第i行中的最后一個(gè)元素1進(jìn)隊(duì) */
  }
  while (Q.front!=Q.rear)     /* 輸出最后一行元素 */
  {   printf("%d ",Q.front->next->data); 
      Q=DeleteQ (Q);   /*刪除隊(duì)頭元素-出隊(duì)*/
  }
  return 0;
}

運(yùn)行結(jié)果如下:

數(shù)據(jù)結(jié)構(gòu)打印楊輝三角,C++,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c++,算法

二、循環(huán)隊(duì)列楊輝三角:

/***循環(huán)隊(duì)列楊輝三角基本操作***/



#include<iostream>

#include<fstream>

using namespace std;



#define MAXQSIZE 100

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef char QElemType;

typedef int SElemType;

typedef int Status;



typedef struct {

QElemType *base;//初始化時(shí)動(dòng)態(tài)分配存儲(chǔ)空間

int front;//頭指針

int rear;//尾指針

} SqQueue;



//算法3.11 循環(huán)隊(duì)列的初始化

SqQueue InitQueue() {//構(gòu)造一個(gè)空隊(duì)列Q

SqQueue Q;

Q.base = new QElemType[MAXQSIZE]; //為隊(duì)列分配一個(gè)最大容量為MAXSIZE的數(shù)組空間

if (!Q.base)

exit(OVERFLOW); //存儲(chǔ)分配失敗

Q.front = Q.rear = 0; //頭指針和尾指針置為零,隊(duì)列為空

return Q;

}



//算法3.12 求循環(huán)隊(duì)列的長(zhǎng)度

int QueueLength(SqQueue Q) {//返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度

return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;

}



//算法3.13 循環(huán)隊(duì)列的入隊(duì)

SqQueue InserQ(SqQueue &Q, QElemType e) {//插入元素e為Q的新的隊(duì)尾元素

//if ((Q.rear + 1) % MAXQSIZE == Q.front) //尾指針在循環(huán)意義上加1后等于頭指針,表明隊(duì)滿

// return ERROR;

Q.base[Q.rear] = e; //新元素插入隊(duì)尾

Q.rear = (Q.rear + 1) % MAXQSIZE; //隊(duì)尾指針加1

return Q;

}



//算法3.14 循環(huán)隊(duì)列的出隊(duì)

SqQueue DeleteQ(SqQueue &Q) {//刪除Q的隊(duì)頭元素,用e返回其值

int e=0;

//if (Q.front == Q.rear)

// return ERROR; //隊(duì)空

e = Q.base[Q.front]; //保存隊(duì)頭元素

Q.front = (Q.front + 1) % MAXQSIZE; //隊(duì)頭指針加1

return Q;

}



//算法3.15 取循環(huán)隊(duì)列的隊(duì)頭元素

SElemType GetHead(SqQueue Q) {//返回Q的隊(duì)頭元素,不修改隊(duì)頭指針

if (Q.front != Q.rear) //隊(duì)列非空

return Q.base[Q.front]; //返回隊(duì)頭元素的值,隊(duì)頭指針不變

}



int main()

{ ?SqQueue Q;

???int i,n,x,j;

???printf("輸入行數(shù)n:");

???scanf("%d",&n); ????/* n為楊輝三角行數(shù) */

???Q=InitQueue(); /*初始化隊(duì)列*/

???Q=InserQ (Q, 1); ????????/* 第1行的1進(jìn)隊(duì)列 */

???for (i=2; i<=n; i++) ????/* 打印第i-1行并生成第i行 */

???{ ?Q=InserQ (Q, 1); ?????/* 第i行中的第一個(gè)元素1進(jìn)隊(duì) */

??????for(j=1; j<i-1; j++) ?/* 打印第i-1行的第j個(gè)*/

??????{ ??printf("%4d",Q.base[Q.front]); ???/* 輸出隊(duì)頭 */

??????????x=GetHead (Q); ?/*x獲得隊(duì)頭的值*/

??????????Q=DeleteQ (Q); ?/*刪除隊(duì)頭元素-出隊(duì)*/

??????????x=x+ Q.base[Q.front]; ?????/* 計(jì)算第i行的值 */

??????????Q=InserQ (Q, x); ?/*x入隊(duì)*/

??????}

??????printf("%4d\n",Q.base[Q.front]); /* 打印第i-1行的最后一個(gè)1并換行 */

??????Q=DeleteQ (Q); ?????/*刪除隊(duì)頭元素-出隊(duì)*/

??????Q=InserQ (Q,1); ??????/* 第i行中的最后一個(gè)元素1進(jìn)隊(duì) */

??}

??while (Q.front!=Q.rear) ????/* 輸出最后一行元素 */

??{ ??printf("%4d",Q.base[Q.front]);

??????Q=DeleteQ (Q); ??/*刪除隊(duì)頭元素-出隊(duì)*/

??}

??return 0;

?運(yùn)行結(jié)果如下:

數(shù)據(jù)結(jié)構(gòu)打印楊輝三角,C++,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c++,算法

????????希望通過實(shí)現(xiàn)楊輝三角的打印能更好地掌握定義順序隊(duì)和鏈隊(duì)的結(jié)點(diǎn)類型的方法,熟悉隊(duì)列的入隊(duì)和出隊(duì)分別所代表的實(shí)際意義,對(duì)兩種存儲(chǔ)結(jié)構(gòu)下隊(duì)列的基本操作:入隊(duì)、出隊(duì)、輸出隊(duì)列等加深理解。

以上即是本文的全部?jī)?nèi)容,喜歡可以點(diǎn)贊收藏~文章來源地址http://www.zghlxwxcb.cn/news/detail-735320.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)!

本文來自互聯(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)

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

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

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

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

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

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

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

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

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

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

    前言:上次我們已經(jīng)學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)中一個(gè)重要的線性表—棧,那么我們這一次就來學(xué)習(xí)另外一個(gè)重要的線性表—隊(duì)列。 一、 隊(duì)列的概念 二、 隊(duì)列的實(shí)現(xiàn): 1.隊(duì)列的創(chuàng)建 三、 隊(duì)列的操作 1.初始化隊(duì)列 2.隊(duì)尾入隊(duì)列 3.隊(duì)頭出隊(duì)列 4.獲取隊(duì)列頭部元素 5.獲取隊(duì)列隊(duì)尾元素 6.獲

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

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

    前言 一、什么是隊(duì)列? 二、 隊(duì)列接口的實(shí)現(xiàn) 1. 隊(duì)列結(jié)構(gòu)的定義 2. 接口實(shí)現(xiàn) 總結(jié) 隊(duì)列是一種特殊的線性表。 特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作,和棧一樣,隊(duì)列是一種操作受限制的線性表。 進(jìn)行插入操作的端稱為

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

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

    隊(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ì)頭 隊(duì)列也可以數(shù)組和鏈表的結(jié)構(gòu)實(shí)現(xiàn),使用鏈表的結(jié)構(gòu)實(shí)現(xiàn)更優(yōu)一些,因?yàn)槿?/p>

    2024年02月07日
    瀏覽(15)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】用隊(duì)列實(shí)現(xiàn)棧&&用棧實(shí)現(xiàn)隊(duì)列&&設(shè)計(jì)循環(huán)隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)與算法】用隊(duì)列實(shí)現(xiàn)棧&&用棧實(shí)現(xiàn)隊(duì)列&&設(shè)計(jì)循環(huán)隊(duì)列

    ?? 作者:@ 阿亮joy. ?? 專欄:《數(shù)據(jù)結(jié)構(gòu)與算法要嘯著學(xué)》 ?? 座右銘:每個(gè)優(yōu)秀的人都有一段沉默的時(shí)光,那段時(shí)光是付出了很多努力卻得不到結(jié)果的日子,我們把它叫做扎根 請(qǐng)你僅使用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、

    2024年01月20日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】 隊(duì)列(Queue)與隊(duì)列的模擬實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】 隊(duì)列(Queue)與隊(duì)列的模擬實(shí)現(xiàn)

    隊(duì)列 :只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表,隊(duì)列具有==先進(jìn)先出FIFO(FirstIn First Out) ==入隊(duì)列: 進(jìn)行插入操作的一端稱為 隊(duì)尾(Tail/Rear) 出隊(duì)列: 進(jìn)行刪除操作的一端稱為 隊(duì)頭(Head/Front) 在Java中, Queue是個(gè)接口,底層是通過鏈表實(shí)現(xiàn)

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

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

    前言:本節(jié)博客分享了用棧實(shí)現(xiàn)隊(duì)列效果的思路以及代碼,有需要借鑒即可。 LINK 如果要用棧實(shí)現(xiàn)隊(duì)列,我們直到棧是先入后出的一個(gè)效果,所以我們可以用兩個(gè)棧,這樣逆轉(zhuǎn)兩次數(shù)不就是入棧之前數(shù)組的順序嘛。下面是一些圖輔助理解: 完。

    2024年03月10日
    瀏覽(59)
  • 數(shù)據(jù)結(jié)構(gòu)-用棧實(shí)現(xiàn)隊(duì)列

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

    前言: 請(qǐng)你僅使用兩個(gè)棧實(shí)現(xiàn)先入先出隊(duì)列。隊(duì)列應(yīng)當(dāng)支持一般隊(duì)列支持的所有操作(push、pop、peek、empty): 實(shí)現(xiàn) MyQueue 類: void push(int x) 將元素 x 推到隊(duì)列的末尾 int pop() 從隊(duì)列的開頭移除并返回元素 int peek() 返回隊(duì)列開頭的元素 boolean empty() 如果隊(duì)列為空,返回 true ;否

    2023年04月08日
    瀏覽(52)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包