利用鏈式佇列輸出楊輝三角形和演算法輸出楊輝三角形
鏈式佇列
標頭檔案
#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