利用迴圈佇列列印輸出楊輝三角
對於計算機專業的童鞋來說,學習每一門專業課,列印楊輝三角總是一個亙古不變的話題,這不,連《資料結構》這麼高大上的科目,也通過迴圈佇列的實現來找上了我們。
首先,先來大致解釋一下什麼是迴圈佇列。回憶起學習一般的線性表和特殊的線性表—棧時,我們都是先去學習其順序結構,因為順序結構由於是物理結構和邏輯一致,好理解也好實現,掌握好順序結構之後又去學習其鏈式結構。而學習佇列時卻恰恰相反,我們卻先學習了鏈佇列,後又學習順序佇列,就是因為正常來使用順序佇列會產生假溢位的情況,所以我們不得不通過一種對Maxsize求餘的演算法,引入迴圈佇列,這樣即可以解決假溢位的問題,又可以充分利用空間,何樂而不為呢!
迴圈佇列實現方法:
約定:
1. 隊首指標指向隊首元素的前一個,且隊首指標處於沒有元素的位置;
2. 隊尾指標指向隊尾元素
初始化: Q.rear=Q.front=0;
入隊操作: Q.rear=(Q.rear+1)%Maxsize;
出隊操作: Q.front=(Q.front+1)%Maxsize;
判斷隊滿: (Q.rear+1)%Maxsize==Q.front;
判斷隊空: Q.rear==Q.front;
佇列中元素的個數: (Q.rear-Q.front+Maxsize)%Maxsize;
程式碼實現:(迴圈佇列基本實現+列印前n行楊輝三角)
#include <iostream> #include <cstdio> #include <cstdlib> #define Maxsize 1000000 #define OK 1 #define OVERFLOW -2 using namespace std; typedef long long ElemType; typedef struct { ElemType *base; int front; int rear; } SeqQueue; int InitQueue(SeqQueue &Q) { Q.base=(ElemType *)malloc(Maxsize*sizeof(ElemType)); if(!Q.base) exit(OVERFLOW); Q.front = Q.rear =0; return OK; } int GetSum(SeqQueue&Q) { int sum=Q.base[Q.front+1]+Q.base[Q.front+2]; return sum; } int EnQueue(SeqQueue &Q,ElemType e) { if((Q.rear+1)%Maxsize==Q.front) { cout<<"Queue Full"<<endl; return 0; } Q.rear = (Q.rear+1)%Maxsize; Q.base[Q.rear]=e; return 1; } int DeleQueue(SeqQueue &Q,ElemType &e) { if(Q.front==Q.rear) { cout<<"Queue Empty"<<endl; return 0; } Q.front=(Q.front+1)%Maxsize; e=Q.base[Q.front]; return 1; } int QueueLength(SeqQueue Q) { return (Q.rear-Q.front+Maxsize)%Maxsize; } int main() { SeqQueue QQ; int flag; int n; while(scanf("%d",&n)!=EOF) { flag=InitQueue(QQ); int k; if(flag==1) { for(k=1; k<=n; k++) { for(int i=1; i<=k-2; i++) { int sum=GetSum(QQ); flag=EnQueue(QQ,sum); if(flag==0) break; ElemType e; flag=DeleQueue(QQ,e); if(flag==0) break; } // if(flag==0) break; flag=EnQueue(QQ,1); if(flag==1) { for(int i=1; i<=k; i++) { cout<<QQ.base[QQ.front+i]<<" "; } cout<<endl; } } } if(flag==0) { cout<<"Can not do it"<<endl; } } return 0; }
最多列印30行左右
相關推薦
利用迴圈佇列列印輸出楊輝三角
對於計算機專業的童鞋來說,學習每一門專業課,列印楊輝三角總是一個亙古不變的話題,這不,連《資料結構》這麼高大上的科目,也通過迴圈佇列的實現來找上了我們。 首先,先來大致解釋一下什麼是迴圈佇列。回憶起學習一般的線性表和特殊的線性表—棧時,我們都是先去學習其順序結構,因為順序結
列印輸出楊輝三角
import java.util.Scanner; public class Exercise3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out
利用二維陣列輸出楊輝三角(前10行)
public class yanghuisanjiao { public static void main(String[] args) { // TODO Auto-generated method stub int N=10,i,j; int a[][]=
利用迴圈佇列列印楊輝三角(c語言實現)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAXQSIZE 200 typedef int QElemType; typedef stru
佇列輸出楊輝三角
#include "queue.h" int main() { int n = 8; QueuePtr Q = InitQueue(); //初始化 int s = 0, t; EnQueue(Q, 0);//入隊 EnQueue(Q,
迴圈連結串列佇列C++程式設計--楊輝三角
楊輝三角原理 下一行的資料都是有上一行對應的兩個資料相加得到,第一行資料就只有一個1,最左邊和最右邊沒有資料就用0替代 1 1 1 1 2 1
佇列的應用—輸出楊輝三角
#include"Queue.h" #include<iostream> using namespace std; const int total_row = 6; void main() { void Pascal_Triangle();//函式宣告 Pa
C語言實現輸出楊輝三角
1.倒推法實現輸出楊輝三角有半部分,程式碼如下: 1 #include<stdio.h> 2 int main() 3 { 4 int n,i,j,a[100]; 5 printf("請輸入行數n:"); 6 scanf("%d",&n); 7
C語言筆記--利用二維陣列輸出楊輝三角形
楊輝三角形又稱帕斯卡三角形,其餘的話就不多說,先看下面的三角形: &nb
java陣列學習:使用二維陣列輸出楊輝三角
import java.util.Scanner;/* 輸出二維陣列"楊輝三角"i\j 0 1 2 3 4 50 11 1 12 1 2 13 1 3 3 1 &
python-輸出楊輝三角
#列印輸出楊輝三角 triange = [1] print(triange) triange.append(0) n=10 for i in range(1,n): newline = [] for j in range(i+1): value = triange[
C語言 輸出楊輝三角
輸出以下的楊輝三角形(要求輸出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 。。。 這道題其實不難,重在思路,思路一通,解題分分鐘。 首先設個a[10][10],包含10列10行的楊輝三角. 定義個行的迴圈變數i,列的迴圈變數j 觀察圖可以
jzxx1050輸出楊輝三角的前N行
題目描述 輸出楊輝三角的前N行(N<10)。 輸入 輸入只有一行,包括1個整數N。(N<10) 輸出 輸出只有N行. 樣例輸入 5 樣例輸出 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 滿分程式碼: #include<ios
Python 輸出楊輝三角--生成器
生成器寫法呢 # -*- coding: UTF-8 -*- def triangles(): i,one=1,[1] while i: yield one tran = [0]+one+[0] lenght = len(tra
動態輸出楊輝三角
package javacore; import java.util.Scanner; /** * @author lixw * @date created in 14:03 2018/12/17 */ public class YanghuiTriangle { publ
c++實現輸出楊輝三角
#include "stdafx.h" #include<iostream> using namespace std; #include <iomanip> //寫一個函式,通過呼叫函式,實現列印輸出楊輝三角的前10行 int _tmain(int argc, _T
java控制檯程式輸出楊輝三角前10行
public class Mains { public static void main(String[] args) { int n = 10; int mat[][] = new int[10][]; int i, j; for (i = 0; i < n
資料結構學習之鏈佇列c++實現楊輝三角
#ifndef LINKQUEUE_H #define LINKQUEUE_H #include <iostream> #include <assert.h> using namespace std; template <class T>
c語言:二維陣列輸出楊輝三角!
今天做了楊輝三角的題目。在草稿上面寫好了思路,回到宿舍就開始開始敲程式碼。就幾行,不過除錯的時候搞錯了兩個地方,一個是i=j還有一個是j=0;好久不搞這個,居然犯這麼低階的錯誤!,改好之後就好了! 楊輝三角你只要是明白了思路就好辦,下面是我的思路:
Java編程-輸出楊輝三角前10行
兩個 大小 特點 i++ oid public i+1 其他 楊輝三角 public class YanghuiTriangle { public static void main(String[] args) { int triangle[