1. 程式人生 > >利用迴圈佇列列印輸出楊輝三角

利用迴圈佇列列印輸出楊輝三角

對於計算機專業的童鞋來說,學習每一門專業課,列印楊輝三角總是一個亙古不變的話題,這不,連《資料結構》這麼高大上的科目,也通過迴圈佇列的實現來找上了我們。

首先,先來大致解釋一下什麼是迴圈佇列。回憶起學習一般的線性表和特殊的線性表—棧時,我們都是先去學習其順序結構,因為順序結構由於是物理結構和邏輯一致,好理解也好實現,掌握好順序結構之後又去學習其鏈式結構。而學習佇列時卻恰恰相反,我們卻先學習了鏈佇列,後又學習順序佇列,就是因為正常來使用順序佇列會產生假溢位的情況,所以我們不得不通過一種對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[