1. 程式人生 > >利用鏈式佇列輸出楊輝三角形和演算法輸出楊輝三角形

利用鏈式佇列輸出楊輝三角形和演算法輸出楊輝三角形

鏈式佇列

標頭檔案

#ifndef _SEQUENCEQUEUE_H
#define _SEQUENCEQUEUE_H

#include <stdio.h>
#include <stdlib.h>

#define SIZE    1000

#define SUCCESS   10000
#define FAILURE   10001
#define TRUE      10002
#define FALSE     10003

struct queue
{
	int data[SIZE];
	int front;            //隊頭指標(下標)
	int rear;             //隊尾指標
};
typedef struct queue Queue;

int InitQueue(Queue *q);
int EnterQueue(Queue *q, int e);
int GetFront(Queue q);
int LengthQueue(Queue q);
int DeleteQueue(Queue *q);

#endif

main函式

#include <stdio.h>
#include "SequenceQueue.h"
#include <stdlib.h>

void Traverse(Queue q)
{
	int i;
	for(i = q.front; i != q.rear; i++)
	{
		if (q.data[i] != 0)
		{
			printf("%d ", q.data[i]);
		}
	}
	printf("\n");
}

int main()
{	
	int ret, num, i, top;
	Queue q1, q2;

	if (InitQueue(&q1) != SUCCESS || InitQueue(&q2) != SUCCESS)
	{
		printf("Init Failure!\n");
		exit(1);
	}

	printf("Plesae input line:\n");
	scanf("%d", &num);

	for (i = 0; i < num; i++)
	{
		if (i == 0)
		{
			EnterQueue(&q1, 0);
			EnterQueue(&q1, 1);
			EnterQueue(&q1, 0);
		}
		else
		{
			while (LengthQueue(q1) != 1)
			{
				top = DeleteQueue(&q1);
				EnterQueue(&q2, top + GetFront(q1));
			}
			while (LengthQueue(q2) != 0)
			{
				EnterQueue(&q1, DeleteQueue(&q2));
			}
			EnterQueue(&q1, 0);
		}
		Traverse(q1);	
	}
	return 0;
}

 自定義函式

#include "SequenceQueue.h"

int InitQueue(Queue *q)
{
	if (NULL == q)
	{
		return FAILURE;
	}

	q->rear = q->front = 0;   //初始化空隊

	return SUCCESS;
}


int EnterQueue(Queue *q, int e)
{
	if (NULL == q)
	{
		return FAILURE;
	}

	if ((q->rear + 1) % SIZE == q->front)   //隊滿
	{
		return FAILURE;
	}

	q->data[q->rear] = e;
	q->rear = (q->rear + 1) % SIZE;

	return SUCCESS;
}

int GetFront(Queue q)
{
	if (q.rear == q.front)
	{
		return FAILURE;
	}

	return q.data[q.front];
}

int LengthQueue(Queue q)
{
	return (q.rear - q.front + SIZE) % SIZE;
}

int DeleteQueue(Queue *q)
{
	if (NULL == q)
	{
		return FAILURE;
	}
	if (q->rear == q->front)
	{
		return FAILURE;
	}

	int e = q->data[q->front];
	q->front = (q->front + 1) % SIZE;

	return e;
}

結果:

[[email protected] SequenceQueue]# ./triangle
Plesae input line:
8
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 

 演算法實現楊輝三角

思路:

原始碼

#include<stdio.h>

int main()
{
    int i, j, n = 13;  //若超過13行,linux輸出的格式就不是三角形
    printf("N=");
    while(n > 12)
    {
        scanf("%d", &n);    //輸入正確值保證螢幕輸出正確的圖形
    }
    for( i = 0; i <= n; i++)//控制輸出N行
    {
        for( j = 0; j < 12-i; j++)
            printf("   ");         //控制輸出第i行前面的空格
        for( j = 1; j < i+2; j++)
            printf("%6d", c(i , j)); //輸出第i行的第j個值
        printf("\n\n");
    }
    return 0;
}

int c(x , y)         //求楊輝三角形中第x行第y列的值
    int x , y;
{
        int z;
        if((y == 1) || (y == x + 1)) //若為x行的第一或者第x+1列,輸出1
            return (1);
        z = c(x-1 , y-1) + c(x-1 , y);//否則,其值為前面一行中第y-1列與第y列值的和
        return(z);
}

執行結果

[[email protected] 9]# ./9
N=8
                                         1

                                      1     1

                                   1     2     1

                                1     3     3     1

                             1     4     6     4     1

                          1     5    10    10     5     1

                       1     6    15    20    15     6     1

                    1     7    21    35    35    21     7     1

                 1     8    28    56    70    56    28     8     1

相關推薦

利用佇列輸出三角形演算法輸出三角形

鏈式佇列 標頭檔案 #ifndef _SEQUENCEQUEUE_H #define _SEQUENCEQUEUE_H #include <stdio.h> #include <stdlib.h> #define SIZE 1000

利用佇列實現二叉樹的層次遍歷(C語言)

規則: 判斷樹是否為空,為空則返回; 若不空,從樹的第一層。也就是根節點開始訪問。 從上而下逐層遍歷, 在同一層中,按從左到右的順序對節點逐個訪問。 #include<stdio.h> #include<stdlib.h> t

表示的佇列——佇列2——三角問題

列印楊輝三角。楊輝三角是一個由數字排列成的三角形數表,一個8階的楊輝三角如下所示。                              

資料結構--佇列

文章目錄 linkqueue.h linkqueue.c main.c 執行結果 linkqueue.h #ifndef __LINKQUEUE_H__ #define __LINKQUEUE_H__ #inclu

資料結構 佇列C/C++

列隊分為鏈式儲存 與 順序儲存 下面給出小編寫的順序儲存的連結https://blog.csdn.net/qq_40990854/article/details/82846939 這篇是小編寫的鏈式儲存。 思路: 佇列是一個先進先出的特點,在連結串列的表頭 head作為固定不動的

C++實現隊類——合肥工業大學資料結構實驗5:佇列

實驗5 5.1 實驗目的 熟練掌握佇列的順序鏈式儲存結構。 熟練掌握佇列的有關演算法設計,並在鏈佇列上實現。 根據具體給定的需求,合理設計並實現相關結構和演算法。 5.2 實驗要求 5.2.1鏈佇列實驗要求 本次實驗中的鏈佇列結構指不帶頭結點的單鏈表; 鏈佇列結構和運算定義,演算法的實現以庫檔

Java的佇列

參考https://www.cnblogs.com/lixiaolun/p/4646312.html java實現鏈佇列的類程式碼: 1 package linkqueue; 2 3 public class LinkQueue { 4 5 class Elemen

佇列 (c語言)

結構體: 結點結構體 typedef struct TreeNODE { char date; struct TreeNODE *next; }Queue; 隊頭、尾結構體: typedef struct { Queue *front; Queue

表示的佇列——佇列3——判斷是否為迴文

編寫一個演算法,判斷任意給定的字元序列是否為迴文。所謂迴文是指一個把字元序列的中間字元作為基準,兩字元完全相同,即從兩個方向看,都是相同的字元序列。 例如,字元序列“ABCDEFEDCBA”為迴文,而字元序列“xabcdcaax”不是迴文。 【分析】 這個題目考察對棧的“後進先出”思

表示的佇列——佇列1——基本內容

【定義】 鏈式佇列通常用連結串列實現。在佇列中分別需要一個指向隊頭和隊尾的指標表示隊頭和隊尾,這兩個指標分別稱為隊頭指標和隊尾指標,不帶頭結點的鏈式佇列和帶頭結點的鏈式佇列分別如圖所示。 對於帶頭結點的鏈式佇列,當佇列為空時,隊頭指標front和隊尾指標rear都指向頭結點,如圖所示

Java實現佇列——順序佇列佇列

Java實現佇列——順序佇列、鏈式佇列 概念 先進者先出,這就是典型的“佇列”。(First In, First Out,FIFO)。 我們知道,棧只支援兩個基本操作:入棧push()和出棧pop()。佇列跟棧非常相似,支援的操作也很有限,最基本的操作也是兩個:入隊和出隊。入

C++資料結構之佇列模版實現

鏈佇列的儲存結構   將對頭指標front指向鏈佇列的頭結點(頭節點為空,不存資料),隊尾指標rear指向終端結點。元素從隊尾進入,隊首出列。 元素為空時,隊尾指標指向隊頭指標。 鏈式佇列模版實現: 功能: 1 建立 2 遍歷 4 入隊,出隊 5 獲取

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

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

C++資料結構 13佇列

先進先出 #ifndef _QueenList_H__ #define _QueenList_H__ template <class T> class Queue{ public:

資料結構---線性表(佇列)

LinkQueue.h #ifndef __LINKQUEUE__H_ #define __LINKQUEUE__H_ //一些庫函式的標頭檔案包含 #include <string.h> #include <ctype.h> #include <malloc.h

Go資料結構與演算法-實現佇列

title: Go資料結構與演算法-實現鏈式佇列 tags: go,演算法 介紹 前面我們看了佇列的陣列實現,本文來看看用連結串列實現佇列的方法。 演示 package main import "fmt" //連結串列單節點 type QNode str

C++習題練習(佇列

函式宣告: #include <iostream> #include <stdio.h> using namespace std; #define TRUE 1 #define FALSE 0 typedef int ElemType; cla

資料結構——線性表:順序佇列佇列(C++)

內容概要: 佇列的相關概念 注意事項 code:佇列抽象類、順序佇列類、鏈式佇列類 一、佇列的相關概念 佇列是一種受限制的線性表,其特點是“先進先出”(FIFO)。 佇列元素只能從隊尾插入(入隊操作:enqueue)、從隊首刪除(出隊操作:deque

【筆記】佇列

一、鏈式佇列的表示 1.鏈式佇列   用連結串列表示的佇列,簡稱為鏈佇列。鏈式佇列在插入和刪除過程中不需要移動大量的元素,只需要改變指標的位置即可。   一個鏈式佇列顯然需要兩個分別指示隊頭和隊尾的指標(分別稱為頭指標和尾指標)才能唯一確定。空的鏈佇

連結串列、棧、佇列、二叉樹的C簡要實現

/*單鏈表簡要實現 * * */ #include <stdio.h> #include <stdlib.h> struct Node; typedef struct