数据结构上机4队列-杨辉三角1

#include <stdio.h>
#include <malloc.h>
#define OK 1
#define OVERFLOW -1
#define ERROR 0

typedef int Status, QElemType;

typedef struct {
  QElemType *base;
  int front;
  int rear;
} SqQueue;

Status InitQueue(SqQueue *Q, int Qsize) {
  Q->base = (QElemType *)malloc(Qsize * sizeof(QElemType));
  if (!Q->base)
    return OVERFLOW;
  Q->front = Q->rear = 0;
  return OK;
}
Status EnQueue(SqQueue *Q, int Qsize, QElemType e) {
  if ((Q->rear + 1) % Qsize == Q->front)
    return ERROR;
  Q->base[Q->rear] = e;
  Q->rear = (Q->rear + 1) % Qsize;
  return OK;
}
int getlength(SqQueue *Q, int Qsize) {
  return (Q->rear - Q->front + Qsize) % Qsize;
}
Status DeQueue(SqQueue *Q, int Qsize) {
  if (Q->front == Q->rear)
    return ERROR;

  Q->front = (Q->front + 1) % Qsize;
  return OK;
}

Status print(SqQueue *Q, int Qsize) {
  int i;
  if (Q->rear == Q->front)
    return ERROR;
  i = Q->front;
  printf("%*c", 3 * (Qsize - getlength(Q, Qsize)), ‘ ‘);
  while (i != Q->rear) {
    printf(" %*d", (i + Qsize) / Qsize > 1 ? -5 : 5, Q->base[i]);
    i = (1 + i) % Qsize;
  }
  printf("\n");
  return OK;
}

void yanghuisanjiao(SqQueue *Q, int n) {
  //       1
  //     1   1
  //   1   2   1
  // 1   3   3   1
  int Qsize = n + 1;
  int i;
  printf("%d行的杨辉三角\n", n);
  InitQueue(Q, Qsize);
  for (i = 1; i <= n; i++) {
    while (getlength(Q, Qsize) >= 2) {
      EnQueue(Q, Qsize, Q->base[Q->front] + Q->base[(Q->front + 1) % Qsize]);
      DeQueue(Q, Qsize);
      if (Q->base[Q->front] == 1)
        break;
    }
    EnQueue(Q, Qsize, 1);
    print(Q, Qsize);
  }
}
int main(void) {
    int n;
    SqQueue Q;
    puts("循环队列实现杨辉三角的计算:");
    puts("请输入有多少行? (为了观察建议20以内)");
    scanf("%d", &n);
    yanghuisanjiao(&Q, n);
    return 0;
}
时间: 2024-12-21 00:19:41

数据结构上机4队列-杨辉三角1的相关文章

数据结构上机4队列-杨辉三角2

#include <stdio.h> #include <malloc.h> #define OK 1 #define OVERFLOW -1 #define ERROR 0 typedef int Status, QElemType; //队列结构定义 typedef struct { QElemType *base; int front; int rear; } SqQueue; //初始化队列 Status InitQueue(SqQueue *Q, int Qsize) {

数据结构总结系列(四)——循环队列之杨辉三角

今天我们来写一个循环队列的应用哦! 解决的是杨辉三角问题~~ 对于这样一个上下多层之间有密切联系的数据,如果只是用数组和循环来解决的话,显然会浪费大量的空间和时间, 所以我们用队列来解决这一问题: 之所以选用循环队列也是因为它对于空间的利用是非常有效的,方便我们的工作: 开始定义结构体: typedef struct //定义循环队列 { int data[MAXMIZE]; int Front; int Rear; }RollQueue; 这里的最大值(MAXMIZE)大家可以用宏定义来自己定

使用队列求解杨辉三角的第K层的所有元素

Java代码   package queue; import java.util.concurrent.ConcurrentLinkedDeque; /** * Created by Lanxiaowei * Craated on 2016/12/12 9:03 * 求解杨辉三角的第K层的所有元素 * 使用队列求解 */ public class YHTriangleWithQueue { public static void main(String[] args) throws Interru

杨辉三角——队列的应用

杨辉三角形是形如: 1 1   1 1   2   1 1   3   3   1 1   4   6   4   1 的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和. 使用<队列>的思想来实现杨辉三角的流程: 1>首先,需要初始化一个队列,即对头=队尾=0: 2>将第一行的元素1入队,接着操作第二行(一二行不需要求和操作,直接将元素入队即可): 3>从第三行开始,现在的对头

用队列打印杨辉三角

#include<iostream> #include<cstdio> #include<queue> #include<algorithm> using namespace std; queue<int> Q; int temp; void tringle(const int n) { Q.push(1); for(int i=2;i<=n;i++) { Q.push(1); for(int j=1;j<=i-2;j++) { te

打印杨辉三角(STL版队列)

#include <iostream> #include <queue> using namespace std; void YangHuiTriangle(int n); int main() { cout<<"请输入杨辉三角的层数:"; int x; cin>>x; YangHuiTriangle(x); return 0; } void YangHuiTriangle(int n) { queue<int> q; q.p

Java的二维数组的应用及杨辉三角的编写

(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个,即该位置上的元素在该行上最大,在该列上最小(注:一个二维数组也可能没有这样的鞍点). /** * * @author liuhui *@version Java上机实验三 *@time 2016.10.30 */ public class javatest2 { public static int

HDOJ2032杨辉三角

★杨辉三角的规律是很明显的: ◇每一行的第一个数和最后一个数都为1: ◇从第三行开始,除去第一个数和最后一个数,其余的数都是上一行中两个数的和: ◇每个实例最后一行的数字个数都等于这个实例的层数: 因此这个题目的关键就是用代码将上述规律描述清楚的过程,没有复杂的数据结构和算法. ★代码实现: #include <stdio.h> static int a[100][100]; int main() { int i,j,num; while(scanf("%d",&n

杭州电子科技大学 Online Judge 之 “杨辉三角(ID2032)”解题报告

杭州电子科技大学 OnlineJudge 之 "杨辉三角(ID2032)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) Problem Description 还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Input 输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<