#include <stdio.h>
#include <stdlib.h>
//宏定义
#define OK 1
#define ERROR 0
//类型定义
typedef int QElemType;
typedef int Status;
//链队结点定义
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueueNode;
//链队定义
typedef struct LQueue
{
QueueNode front;
QueueNode rear;
}LQueue,*LinkQueue;
//构造一个空队列
Status InitQueue(LinkQueue Q)
{
Q->front=Q->rear=(QueueNode)malloc(sizeof(QNode));
if(!Q->front)
{
printf("构造空队列失败,系统内存不足!\n");
return ERROR;
}
Q->front->next=NULL;
return OK;
}
//销毁一个队列
Status DestroyQueue(LinkQueue Q)
{
while(Q->front)
{
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
free(Q);
printf("成功销毁该队列!\n");
return OK;
}
//插入元素e为Q的新的队尾元素
Status EnQueue(LinkQueue Q,QElemType e)
{
QueueNode p=(QueueNode)malloc(sizeof(QNode));
if(!p)
{
printf("插入元素失败,系统内存不足!\n");
return ERROR;
}
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
return OK;
}
//若队列不空,则删除Q的队头元素,并用e返回其值,并返回OK,否则返回ERROR
Status DeQueue(LinkQueue Q,QElemType *e)
{
QueueNode p;
if(Q->front==Q->rear)
{
printf("删除元素失败,队列已空!\n");
return ERROR;
}
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
{
Q->rear=Q->front;
}
free(p);
return OK;
}
//初始化杨辉三角
Status InitYangHui(LinkQueue Q)
{
EnQueue(Q,0);
EnQueue(Q,1);
EnQueue(Q,0);
return OK;
}
//打印杨辉三角
Status PrintYangHui(LinkQueue Q,int n)
{
int i,j,e;
//单独打印第一行
for(i=1;i<=n-1;i++)//对显示的数据进行排版
printf("\t");
printf("%d\n",Q->front->next->next->data);
//从第二行开始打印
for(i=2;i<=n;i++)
{
for(j=1;j<=n-i;j++) //对显示的数据进行排版
printf("\t");
do
{
DeQueue(Q,&e);
e=e+Q->front->next->data;
EnQueue(Q,e);
printf("%d\t\t",e);
}while(Q->front->next->data!=0); //当第二次取队头元素为0时,结束循环
printf("\n"); //每次打印一行过后,换行
EnQueue(Q,0); //每次循环后,在队尾增加一个0,以保证下次循环的进行
}
return OK;
}
int main()
{
int n;
LinkQueue Q=(LinkQueue)malloc(sizeof(LQueue));
InitQueue(Q);
InitYangHui(Q);
printf("请输入杨辉三角的层数n:\n");
scanf("%d",&n);
PrintYangHui(Q,n);
DestroyQueue(Q); //释放内存,防止内存泄漏
return 0;
}
杨辉三角的队列实现
原文作者:杨辉三角问题
原文地址: https://blog.csdn.net/qin_jin_blog/article/details/22063299
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qin_jin_blog/article/details/22063299
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。