-
2021-04-11 16:08:30
戳这里还有其他数据结构的题目噢
https://blog.csdn.net/qq_45724947/article/details/115625130?spm=1001.2014.3001.5501
设计并验证以下算法:利用队列的基本操作输出图3.1所示的杨辉三角,并分析两种递归算法与采用队列算法的时间复杂度。
直接上代码:
#include <stdio.h> #define MAXSIZE 50 typedef int Queue; typedef struct { Queue element[MAXSIZE]; int front; int rear; }SeqQueue; void InitQueue(SeqQueue *Q) { Q->front = Q->rear = 0; } void EnterQueue(SeqQueue *Q, Queue x) { if (Q->rear + 1 == Q->front) { printf("队列已满不能入队\n"); return; } Q->element[Q->rear] = x; Q->rear = Q->rear + 1; } void printQ(SeqQueue Q) { int i; i = Q.front; while (i != Q.rear) { if (i == MAXSIZE) { i = 0; } printf(" %d ", Q.element[i]); i++; } printf("\n"); } void DeleteQueue(SeqQueue *Q, Queue *x) { if (Q->front == Q->rear) { printf("队列为空不能出队\n"); return; } *x = Q->element[Q->front]; Q->front = Q->front + 1; } void GetHead(SeqQueue *Q, Queue *x) { if (Q->front == Q->rear) { printf("队列为空不能取值\n"); return; } *x = Q->element[Q->front]; } int main() { SeqQueue Q; Queue x, temp; int n,N; int i; InitQueue(&Q); EnterQueue(&Q, 1);//第一行元素入队 printf("请输入杨辉三角行数:(大于等于2)\n"); scanf("%d",&N); if(N < 2) { printf("输入格式错误!"); return 0; } for (n = 2; n <= N; n++)//产生第n行元素并入队,同时打印第n-1行的元素 { EnterQueue(&Q,1);//第n行的第一个元素入队 for (i = 1; i <= n - 2; i++)//利用队中第n-1行元素产生第n行的中间n-2个元素并入队 { DeleteQueue(&Q, &temp); printf(" %d ", temp); //打印出来第n-1行的元素 GetHead(&Q, &x); temp = temp + x; // 利用队列中第n-1行元素产生第n行元素 EnterQueue(&Q, temp); } DeleteQueue(&Q, &x); printf(" %d ", x); //打印第n-1行的最后一个元素 EnterQueue(&Q,1); //让第n行的最后一个元素入队 printf("\n"); } while (Q.front != Q.rear)//打印最后一行元素 { DeleteQueue(&Q, &x); printf(" %d ", x); } return 0; }
(请不要直接复制使用。代码仅供参考,希望读者借此代码自身可以理解学习)
如果代码对您有帮助,不要忘记评论收藏噢~更多相关内容 -
【数据结构】队列 杨辉三角
2021-03-16 17:10:28杨辉三角形是形如:111121133114641使用《队列》的思想来实现杨辉三角的流程:1>首先,需要初始化一个队列,即对头=队尾=0;2>将第一行的元素1入队,接着操作第二行(一二行不需要求和操作,直接将元素入队即可...杨辉三角形是形如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
使用《队列》的思想来实现杨辉三角的流程:
1>首先,需要初始化一个队列,即对头=队尾=0;
2>将第一行的元素1入队,接着操作第二行(一二行不需要求和操作,直接将元素入队即可);
3>从第三行开始,现在的对头指向N-1行,先将每行的固定元素1入队,然后循环操作求和过程:
将队首元素出队,并保存它的值temp;
获取当前队首的元素x,并进行temp=temp+x,且将temp入队;
4>循环结束后,队首在N-1行的最后一个元素处,现将其出队,然后将每行最后的固定元素1入队;
5>循环3、4步就可以输出杨辉三角形了。
注意:杨辉三角的特点是第N行的中间值等于N-1行两值的和,队列采用的是单进单出。
or///
其基本算法如下:
假设n行
当n=1时将1入队
当n>=2时当生成第n行第j个时
如果j=1时,将1入队
如果j=n时,将1入队,并将队列第一个出对
当1
代码:【前部分为循环队列初始化 插入(队尾) 删除(队首) 取队首 是否空】
//使用队列输出杨辉三角
#include "stdafx.h"#include
#define MAXSIZE 50
#define FALSE 0
#define TRUE 1typedefintQueueElemType;
typedefstruct{
QueueElemType element[MAXSIZE];int front;//队头
int rear;//队尾
}SeqQueue;void InitQueue(SeqQueue *Q)//初始化
{
Q->front = Q->rear = 0;
}int EnterQueue(SeqQueue *Q, QueueElemType x)//入队
{if ((Q->rear + 1) % MAXSIZE == Q->front)///队列已经满了
returnFALSE;
Q->element[Q->rear] =x;
Q->rear = (Q->rear + 1) %MAXSIZE;returnTRUE;
}int DelQueue(SeqQueue *Q, QueueElemType *x)//出对
{if (Q->front == Q->rear)returnFALSE;*x = Q->element[Q->front];
Q->front = (Q->front + 1) %MAXSIZE;returnTRUE;
}int GetHead(SeqQueue *Q, QueueElemType *x)//取对头元素
{if (Q->front == Q->rear)returnFALSE;*x = Q->element[Q->front];returnTRUE;
}int IsEmpty(SeqQueue *Q)
{if (Q->rear == Q->front)returnTRUE;else
returnFALSE;
}//创建杨辉三角,N表示三角形的行数
void YangHuiTriangle(intN)
{intn, i, x, temp;
SeqQueue Q;
InitQueue(&Q);
EnterQueue(&Q, 1);//第一行元素入队
for (n = 2; n <= N; n++)
{
EnterQueue(&Q, 1);//入队
for (i = 1; i <= n - 2; i++)
{
DelQueue(&Q, &temp);//出队的数赋给temp
printf("%d", temp);
GetHead(&Q, &x);
temp= temp +x;
EnterQueue(&Q, temp);
}
DelQueue(&Q, &x);//出队
printf("%d", x);
EnterQueue(&Q, 1);
printf("\n");
}while (!IsEmpty(&Q))
{
DelQueue(&Q, &x);
printf("%d", x);
}
}voidmain()
{intN;
printf("please input the N:");
scanf("%d", &N);
YangHuiTriangle(N);
printf("\n");
}
-
杨辉三角循环队列实现(数据结构c语言版)
2021-06-01 09:45:49【问题描述】杨辉三角形是由〖(a+b)〗n二项式展开的各项系数形成的,当n=0,系数为1,生成第一行的元素;...请利用队列打印杨辉三角形前n行元素。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6【问题描述】杨辉三角形是由〖(a+b)〗n二项式展开的各项系数形成的,当n=0,系数为1,生成第一行的元素;当a=1,a+b的各项系数组成第二行的元素;当n=2,a2+2ab+b^2的各项系数组成第三行的元素,以此类推。杨辉三角形的特点每一行的第一个元素和最后一个元素都为1;其他位置上的数字是上一行中与之相邻的两个整数之和。请利用队列打印杨辉三角形前n行元素。
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
【基本要求】
输入一个整数,表示打印杨辉三角形的行数
按照图示的三角形的形式在屏幕上打印出杨辉三角形。
【测试数据】
输入打印杨辉三角形的行数3,输出
1
1 1
1 2 1
输入打印杨辉三角形的行数7,输出
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
【实现提示】
可以利用循环队列实现打印杨辉三角形的过程:再循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行元素并入队。//函数声明 #include <stdio.h> #define MAX 100 #define FALSE 0 #define TRUE 1 //循环队列 typedef struct { int element[MAX]; int front; //头指针 int rear; //尾指针 } SeqQueue; //初始化循环队列 void InitQueue(SeqQueue *q) { q->front = q->rear = 0; } //入队 int EnterQueue(SeqQueue *q, int x) { if ((q->rear + 1) % MAX == q->front) { printf("---队列已满---"); return FALSE; } q->element[q->rear] = x; q->rear = (q->rear + 1) % MAX; return TRUE; } //出队 int DeleteQueue(SeqQueue *q, int *x) { if (q->front == q->rear) { printf("---队列为空---"); return FALSE; } *x = q->element[q->front]; q->front = (q->front + 1) % MAX; return TRUE; } //取对头元素 int GetHead(SeqQueue *q, int *x) { if (q->front == q->rear) return FALSE; *x = q->element[q->front]; return TRUE; } //判断队列是否为空 int IsEmpty(SeqQueue *q) { if (q->front == q->rear) return TRUE; else return FALSE; } //打印杨辉三角 void YangHuiTriangle(int N) { SeqQueue q; InitQueue(&q); int n, i, x, temp; EnterQueue(&q, 1); //第一行元素入队 for (n = 2; n <= N; n++) { EnterQueue(&q, 1); //第n行第一个元素入队 for (i = N; i >= n; i--) //给数字间加空格,打印出金字塔形状 printf(" "); // N为打印的行数,n为每行的元素个数 for (i = 1; i <= n - 2; i++) { //利用队中第n-1行元素产生第n行的中间n-2个元素并入队 DeleteQueue(&q, &temp); //出队元素赋给temp printf("%6d", temp); //打印第n-1行的元素 GetHead(&q, &x); temp = temp + x; //利用第n-1行元素产生第n行元素 EnterQueue(&q, temp); //可以利用画图理解 } DeleteQueue(&q, &x); printf("%6d", x); //打印n-1行最后一个元素 EnterQueue(&q, 1); printf("\n"); } while (!IsEmpty(&q)) { //打印最后一行 DeleteQueue(&q, &x); printf("%6d", x); } } //主函数: int main() { int N; printf("请输入想打印的行数:"); scanf("%d", &N); YangHuiTriangle(N); printf("\n"); return 0; }
-
数据结构实验报告二(栈、队列与杨辉三角).docx
2020-06-10 00:22:19数据结构 实验报告 项目名称 栈队列与杨辉三角 专业班级 软件工程工科试验班 学 号 3903120128 姓 名 谢江 实验成绩 批阅教师 2012年 5月 22 日 实验1单链表的建立与约瑟夫问题 实验学时 实验地点 寝室与实验室 实验... -
用队列的数据结构打印杨辉三角
2015-05-22 19:59:55数据结构课后作业,自己写的,用队列的方法打印杨辉三角 -
队列实现杨辉三角形(数据结构)(C语言)
2018-08-10 20:18:06利用队列的基本功能输出杨辉三角形: 实现方案: #include "SequenceQueue.h" int main() { int N, num, i; Queue *que1 = NULL, *que2 = NULL, *tmp = NULL; if(QueueInit(&que1) != ...利用队列的基本功能输出杨辉三角形:
- 实现方案:
#include "SequenceQueue.h" int main() { int N, num, i; Queue *que1 = NULL, *que2 = NULL, *tmp = NULL; if(QueueInit(&que1) != SUCCESS || QueueInit(&que2) != SUCCESS) { printf("Init Error!\n"); return 0; } printf("Please input:\n"); scanf("%d", &N); for(i = 0; i < N; i++) { if(0 == i) { Push(que1, 0); Push(que1, 1); Push(que1, 0); num = 1; printf("%4d", num); } else { Push(que2, 0); while(1 != QueueLength(que1)) { num = Pop(que1); num = num + Get(que1); Push(que2, num); printf("%4d ", num); } Push(que2, 0); tmp = que1; que1 = que2; que2 = tmp; QueueClear(que2); } printf("\n"); } return 0; }
- 头文件:
#ifndef _SEQUENCEQUEUE_H #define _SEQUENCEQUEUE_H #include <stdio.h> #include <stdlib.h> #define SIZE 1024 #define SUCCESS 10000 #define FAILURE 10001 #define TRUE 10002 #define FALSE 10003 typedef struct SequenceQueue { int data[SIZE]; int front; int rear; }Queue; int QueueInit(Queue **queue); int QueueEmpty(Queue *queue); int Push(Queue *queue, int i); int Get(Queue *queue); int QueueLength(Queue *queue); int Pop(Queue *queue); int QueueClear(Queue *queue); int QueueDestory(Queue **queue); #endif
- 功能函数:
#include "SequenceQueue.h" int QueueInit(Queue **queue) { if(queue == NULL) { return FAILURE; } *queue = (Queue *)malloc(sizeof(Queue)); if(*queue == NULL) { return FAILURE; } (*queue)->front = 0; (*queue)->rear = 0; return SUCCESS; } int QueueEmpty(Queue *queue) { if(queue == NULL) { return FAILURE; } if(queue->rear == queue->front) { return TRUE; } else { return FAILURE; } } int Push(Queue *queue, int i) { if(queue == NULL) { return FAILURE; } if((queue->rear+1)%SIZE == queue->front) { return FAILURE; } queue->data[queue->rear] = i; queue->rear++; return SUCCESS; } int Get(Queue *queue) { if(queue == NULL) { return FAILURE; } return queue->data[queue->front]; } int QueueLength(Queue *queue) { if(queue == NULL) { return FAILURE; } return (queue->rear-queue->front+SIZE)%SIZE; } int Pop(Queue *queue) { if(queue == NULL) { return FAILURE; } if(queue->front == queue->rear) { return FAILURE; } int e = queue->data[queue->front]; queue->front = (queue->front+1)%SIZE; return e; } int QueueClear(Queue *queue) { if(queue == NULL) { return FAILURE; } queue->front = queue->rear = 0; return SUCCESS; } int QueueDestory(Queue **queue) { if(queue == NULL || *queue == NULL) { return FAILURE; } free(*queue); return SUCCESS; }
-
队列实现杨辉三角(附详细图解)
2021-04-14 22:31:35之前我已经写了两篇关于队列的基本功能,今天我们使用循环顺序队来实现输出杨辉三角。 这是我们最终想要的效果:* 目录算法思路代码实现思考总结 算法思路 这里我将使用图示法配合文字。 代码实现 关于代码,这里只... -
数据结构--队列Queue--打印杨辉三角
2019-04-04 23:41:46杨辉三角大家很熟悉,不做介绍了,第n行的首末两元素均为1,中间n-2个元素由n-1行相邻两元素相加得到。 将第1行数据存在队列中(1) 第2行数据1入队(1,1) { 2行中间没有数据 } 打印1行结尾1,出队(1),2行... -
【数据结构队列的应用】用队列打印杨辉三角
2021-03-16 17:09:48数学中的杨辉三角大家都不陌生,...下面给出基于队列实现的杨辉三角。# include# define M 100typedef struct{int a[M];int front,rear;}sq;void init(sq *q){q->rear=q->front=0;}int enter(sq *q,int x){if... -
数据结构 顺序队列 和 用队列实现杨辉三角形
2018-08-09 10:58:18一、队列的定义 1. 队列是特殊的线性表,仅在线性表两端进行操作; 队头(Front):取出数据的一端; 队尾(Rear):放入数据的一端; 2. 队列的性质:先进先出 二、队列常用公式 一般使用循环队列... -
数据结构之用队列实现杨辉三角
2018-08-10 20:59:01/************************************************************** > File Name: PascalTriangle.c > Author: chengfeiyan >... Created Time: 2018年08月10日 星期五 16时3... -
数据结构之队列——输出杨辉三角形
2021-03-16 17:10:15顺序存储队列的顺序存储结构,除了存储的数组,还需要一个队尾指针(rear),和队头指针(front),初始化队列的时候,rear和front都指向同一个下标0,这shi队为空。当一个元素入队,队尾指针+1当一个元... -
数据结构——基于C语言实现杨辉三角
2021-08-11 15:22:28(1)始化一个空在循环队列 (2)循环队列入队操作 (3)循环队列出队操作 (4)取出头指针 (5)main 函数 -
数据结构 队列的应用之输出杨辉三角
2021-10-11 20:00:53最开始输出杨辉三角的最顶端 1 ,然后建立队列并将数据 0 1 1 一次插入到队列之中。其中 1 1是第一行的元素(三角的最顶端1不算行数),0就是行界值。行数k=1表示即将输出第一行(即 1 1)。进入while循环,while... -
数据结构_杨辉三角(队列实现c语言实现)
2020-08-06 16:15:42试编写函数,利用循环队列实现任意行杨辉三角的输出。 如果要求计算并输出杨辉三角前 n 行的值,则队列的最大空间应为 n + 2。(进进出出的) 假设队列中已存有第 k 行的计算结果,并为了计算方便,在两行之间添加一个... -
数据结构实验报告四基于队列的操作来实现杨辉三角.doc
2021-03-16 17:10:59数据结构实验报告四基于队列的操作来实现杨辉三角.doc杨辉三角显示问题描述:编写程序,根据输入的行数,屏幕显示杨辉三角。需求分析:需求分析:1、行数不大于20行。2、基于队列的操作来实现杨辉三角的不断生成过程。... -
Python实现数据结构与算法——杨辉三角 II
2020-04-03 18:08:05给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 3 输出: [1,3,3,1] 进阶: 你可以优化你的算法到 O(k) 空间复杂度吗? 来源:力扣... -
数据结构杨辉三角实验报告(c语言)
2021-05-20 02:51:22杨辉三角问题描述编写...(注:不要用其它的公式计算的方法或者二维数组来实现)(3) 基于数组实现队列的物理数据结构。输入输出输入 n= 6输出1 n=01 1 n=11 2 1 n=21 3 3 1 n=31 4 6 4 1 n=41 5 10 10 5 1 n=51 6 15... -
【数据结构(C++)】用链队列计算杨辉三角
2021-05-23 10:53:28目录第一节 概述第二节 开源代码第一节 概述杨辉三角是二项式系数在三角形中的一种几何排列,是中国古代数学的杰出研究成果之一。它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一... -
数据结构——栈和队列 02(杨辉三角队列解法)
2020-01-25 14:36:38杨辉三角的队列解法,编程输出几行杨辉三角形; 【】杨辉三角是由二项式(a+b)的 n 次方(n=1,2,3…)展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之... -
杨辉三角队列的实现.rar
2021-07-03 14:34:22杨辉三角队列的实现,C语言实现,数据结构课设,编译环境VS2019 -
【数据结构】C用队列实现杨辉三角
2010-11-30 16:13:46用队列实现杨辉三角 队列杨辉三角 c实现杨辉三角 c用队列实现杨辉三角 用队列实现杨辉三角 队列杨辉三角 c实现杨辉三角 c用队列实现杨辉三角 -
数据结构杨辉三角实验报告(c语言).doc
2021-05-20 10:00:27杨辉三角问题描述编写...(注:不要用其它的公式计算的方法或者二维数组来实现)(3) 基于数组实现队列的物理数据结构。输入输出输入 n= 6输出1 n=01 1 n=11 2 1 n=21 3 3 1 n=31 4 6 4 1 n=41 5 10 10 5 1 n=51 6 15... -
数据结构实验报告四—基于队列的操作来实现杨辉三角.doc
2021-03-16 17:10:33数据结构实验报告四—基于队列的操作来实现杨辉三角.doc 杨辉三角显示问题描述编写程序,根据输入的行数,屏幕显示杨辉三角。一、需求分析1、行数不大于20行。2、基于队列的操作来实现杨辉三角的不断生成过程。(注... -
用循环队列实现打印杨辉三角(数据结构)
2021-05-25 05:40:47如果要求计算并输出杨辉三角前N行的值,则队列的最大空间应为n+2(第N行有n+1个数,且根据循环队列的特性:“少用一个元素”,但在这里少用的那个元素用来存放临界值“0”)。#include"QueueSq.cpp"void ... -
【C语言实现】打印杨辉三角(队列的应用)
2021-05-21 01:46:57杨辉三角:杨辉三角一. 杨辉三角简单的观察下,我们可以找到规律:每一行的第一个数字和最后一个数字都是1其余数字等于上一行该位置左右的两个数字和如果把三角形以外的区域都看为0,我们可以把这个问题转化为不需要... -
杨辉三角(队列实现)
2021-10-05 16:46:31根据队列的性质(先进先出) 整体思路: 代码实现: #include <stdio.h> #include <iostream.h> #include "queue.h" void YANGHVI(int n) { Queue q(n+3); //队列初始化 q.MakeEmpty(); q....