1. 程式人生 > >資料結構學習之鏈佇列c++實現楊輝三角

資料結構學習之鏈佇列c++實現楊輝三角

#ifndef LINKQUEUE_H
#define LINKQUEUE_H
#include <iostream>
#include <assert.h>
using namespace std;
template <class T> class LinkQueueNode{
public:
	T data;
	LinkQueueNode<T>* link;
	LinkQueueNode(T& value):data(value),link(NULL){}
};

template <class T> class LinkQueue{	
	LinkQueueNode<T>* front;
	LinkQueueNode<T>* back;
	
public:
	LinkQueue():front(NULL),back(NULL){}
	void EnQueue(T element);
	T DelQueue();
	T& GetFront();
	void MakeEmpty();
	bool IsEmpty();
};
template <class T> void LinkQueue<T>::EnQueue(T value)
{
	LinkQueueNode<T>* add = new LinkQueueNode<T>(value);
	if(back == NULL)
	{
		front = back = add;
	}
	else
	{
		back->link = add;
		back = back->link;
	}
}
template <class T> T LinkQueue<T>::DelQueue()
{
	assert(!IsEmpty());
	LinkQueueNode<T>* old = front;
	T data = old->data;
	front = front->link;
	if(back == old)
		back = NULL;
	delete old;
	return
		data;
}
template <class T> T& LinkQueue<T>::GetFront()
{
	assert(!IsEmpty());
	return front->data;
}
template <class T> void LinkQueue<T>::MakeEmpty()
{
	while(!this->IsEmpty()){
		this->DelQueue();
	}
}

template <class T> bool  LinkQueue<T>::IsEmpty()
{
	return front == NULL;
}
#endif

template<class T> void evaluate(LinkQueue<T>& ori,LinkQueue<T>& target){
	ori.MakeEmpty();
	while(!target.IsEmpty()){
		ori.EnQueue(target.DelQueue());
	}
}

int main(){
	cout<<"請輸入楊輝三角階數i(i>2):";
	int num;
	cin>>num;
	LinkQueue<int> ori;
	ori.EnQueue(1);
	ori.EnQueue(1);
	LinkQueue<int> next;
	for(int i=0;i<num-2;i++){
		next.EnQueue(1);
		while(!ori.IsEmpty()){
			int i=ori.DelQueue();
			if(!ori.IsEmpty())
				next.EnQueue(i+ori.GetFront());
			if(ori.IsEmpty())
				next.EnQueue(i);
		}
		evaluate(ori,next);
	}
	cout<<"楊輝三角第"<<num<<"行內容如下:"<<endl;
	while(!ori.IsEmpty()){
		cout<<ori.DelQueue()<<" ";
	}
	cout<<endl;
	return 0;
}

相關推薦

資料結構學習佇列c++實現三角

#ifndef LINKQUEUE_H #define LINKQUEUE_H #include <iostream> #include <assert.h> using namespace std; template <class T>

java中leetcode用Arraylist List實現三角

要用java  ArrayLIsts實現下面的形式,題目是在leetcode上看到的,        1     1    1  1   2   1 1   3   3  1 具體看看用程式碼怎麼

迴圈連結串列佇列C++程式設計--三角

楊輝三角原理 下一行的資料都是有上一行對應的兩個資料相加得到,第一行資料就只有一個1,最左邊和最右邊沒有資料就用0替代                     1                  1    1               1    2   1

資料結構學習路4 佇列的基本操作(順序儲存的迴圈佇列+連結串列實現

佇列先進先出,這裡用了順序(陣列)和鏈式兩種方式實現,下次再用鏈式儲存實現以下堆疊試試 迴圈佇列: //順序儲存結構的迴圈佇列 #include<iostream> using namespace std; #define MAXSIZE 100 typedef

資料結構學習路(一)C語言對陣列的簡單實現

以下的程式只是在觀看郝斌老師講解的(C語言資料結構)之後自己做得簡單練習。# include <stdio.h> # include <stdlib.h> typedef struct MyArray{ int * pBase; //存放陣列第一個

資料結構-兩個式棧實現一個佇列

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { int data; struct node *nex

資料結構學習筆記-串(C語言實現

串由零個或多個字元組成,說白了就是字串。串的儲存方式相對於線性表來講有些不同,他分為以下幾種:順序儲存、堆分配儲存、鏈式儲存。順序儲存通常在陣列中的頭元素存放字串長度。堆分配儲存通常會動態分配空間。鏈式儲存分為兩種,一種是每個節點存放一個字元(比較浪費空間),另一種則是每個節

C#資料結構回顧迴圈佇列

引言: 佇列就和我們平常排隊買腎6一樣,排隊第一個肯定先能買到,也具有“先進先出”即所謂的FIFO,其實質用一維陣列來存放順序佇列中的資料元素。插入操作限定在表的尾部而其它操作限定在表的頭部進行的。隊頭位置設在陣列下標為0的端,用front表示;隊尾位置設在陣

資料結構佇列實現三角

/************************************************************** > File Name: PascalTriangle.c > Author: chengfeiyan > Mail:

資料結構筆記-棧與佇列python實現

概述 棧與佇列是程式設計中被廣泛應用的兩種重要的資料結構,都是在特定範圍的儲存單元記憶體儲資料,這些資料都可以被重新取出使用,與線性表相比,他們的插入和刪除受到更多的約束,固又稱限定性的線性表結構。他們是最簡單的快取結構,他們只支援資料項的儲存與訪問,不支援資料項之間的任何關係。因此,這兩種

資料結構——商品貨架管理(C++實現) 原始碼

*尚品貨架可以看成一個棧,棧頂商品的生產日期最早,棧底商品的生產日期最近。 *上貨時,需要倒貨架,以保證生產日期較新的商品在較靠裡的位置   針對一種特定商品,實現上述管理過程 測試資料:由學生自己確定一組測試資料。注意測試邊界資料,如空棧。 原始碼 #inclu

資料結構】棧的佇列實現

今天,再次實現一下資料結構中的棧和佇列 這次我們用的是C++實現棧和佇列,用到了C++多型的一種特性:泛型程式設計--模板 關於模板這個知識點,我們之前講過,這次就不多說了 Stack.h #pragma once #include<iostream> usi

資料結構】連結串列操作C實現

資料型別的定義 typedef int DataType; typedef struct ListNode { DataType data; struct ListNode *next; } ListNode; 連結串列的初始化和銷燬 連結串列的初

資料結構(三)——佇列實現、迴圈佇列實現

一、佇列    佇列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇

資料結構學習迴圈連結串列結構

注:本文的主要目的是為了記錄自己的學習過程,也方便與大家做交流。轉載請註明來自:         迴圈連結串列在單向連結串列及雙向連結串列的基礎之上作了一進步的概念延伸,迴圈連結串列讓連結串列操作變的更加靈活。這是因為,單向連結串列與雙向連結串列都具有連結串列的頭結點

資料結構學習二叉樹(面試易考題整理)

【摘要】電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。二叉樹是遞迴定義的,因此,與二叉樹有關的題目基本都可以用遞迴思想解決

資料結構學習弗洛伊德floyd演算法求最短路徑

#include "stdio.h" #include "stdlib.h" #define MAX 20 #define INFINITY 9999 typedef bool PathMatrix[MAX+1][MAX+1][MAX+1]; typedef int Di

資料結構學習雙向連結串列結構

注:本文的主要目的是為了記錄自己的學習過程,也方便與大家做交流。轉載請註明來自:         在前面總結的單向連結串列結構的基礎上,現在開始著手實踐實踐雙向連結串列結構,如果充分理解了單向連結串列資料結構,那對雙向連結串列結構的理解也就不再困難,換個角度而言,雙向連

資料結構系列迴圈佇列

                                        基於陣列的迴圈佇列的Java實現 1、藉助陣列建立一個迴圈佇列類 package 佇列; /*陣列實現的迴圈佇列*/ public class ArrayQueue { private in

資料結構學習路----------線性表順序儲存結構插入和刪除節點平均移動次數

假設線性表的長度為n。 首先來說線性表順序儲存的插入問題: 線性表元素有n個,那麼插入位置有n+1個。 插入第一個位置需要移動n個,第二個需要移動n-1個,第三個需要移動n-2個。以此類推,總共移動次數為n+(n-1)+(n-2)+...+2+1+0=(n+1)*n/2。