码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-17 00:30:49      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

#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;
}

 

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

标签:

原文地址:http://www.cnblogs.com/startnow/p/5052598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!