1.函数
1.1创建队列函数
int InitQueue(Cqueue *Q)
{
Q->base = (ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
Q->length = 0;//当前队列长度
Q->fornt = 0;//头指针
Q->rear = 0;//尾指针
return OK;
}
1.2入队函数
int Enqueue(Cqueue *Q,ElemType en_elem)
{
if(Q->length == MAXSIZE)
{
printf("full\n");//队列已满
return NO;
}
Q->base[Q->rear] = en_elem;
Q->rear = (Q->rear+1)%MAXSIZE;
Q->length++;
return OK;
}
1.3出队函数
int Outqueue(Cqueue *Q,Elemtype *out_elem)
{
if (Q->length == 0)
{
printf("Empety\n");
return NO;
}
*out_elem = Q->base[Q->fornt];
Q->fornt = (Q->fornt+1)%MAXSIZE;
Q->length--;
return OK;
}
1.4输出当前队列
int PrintQueue(Cqueue *Q)
{
if(Q->length == 0)
{
return NO;
}
int p = Q->fornt;
for(int i = 0; i < Q->length ; i++)
{
printf("%d ",Q->base[p]);
p++;
}
printf("\n");
return OK;
}
1.5获取队头元素的值
int GetHeadElem(Cqueue *Q,ElemType *head_elem)
{
if (Q->length == 0)
{
printf("Empety\n");
return NO;
}
*head_elem = Q->base[Q->fornt];
return OK;
}
算法思想:
1.首先将第一行元素1入队,然后将第二行的1入队
2.第一行元素出队此时指针指向第二行首元素
3.第三行的元素1入队
4.队头元素出队并且把值保存在A中,并且获取此时队头元素,并且保存在B中
5.将A+B的值入队
6.循环执行第四第五步
7.将每行最后的固定的元素1入队
8.输出当前队列
完整代码如下:
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define NO 0
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
ElemType *base;
int rear;
int fornt;
int length;
}Cqueue;
int InitQueue(Cqueue *Q)
{
Q->base = (ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
Q->length = 0;//当前队列长度
Q->fornt = 0;//头指针
Q->rear = 0;//尾指针
return OK;
}
int Enqueue(Cqueue *Q,ElemType en_elem)
{
if(Q->length == MAXSIZE)
{
printf("full\n");//队列已满
return NO;
}
Q->base[Q->rear] = en_elem;
Q->rear = (Q->rear+1)%MAXSIZE;
Q->length++;
return OK;
}
int Outqueue(Cqueue *Q,ElemType *out_elem)
{
if (Q->length == 0)
{
return NO;
}
*out_elem = Q->base[Q->fornt];
Q->fornt = (Q->fornt+1)%MAXSIZE;
Q->length--;
return OK;
}
int PrintQueue(Cqueue *Q)
{
if(Q->length == 0)
{
return NO;
}
int p = Q->fornt;
for(int i = 0; i < Q->length ; i++)
{
printf("%d ",Q->base[p]);
p++;
}
printf("\n");
return OK;
}
int GetHeadElem(Cqueue *Q,ElemType *head_elem)
{
if (Q->length == 0)
{
return NO;
}
*head_elem = Q->base[Q->fornt];
return OK;
}
int main()
{
Cqueue Q;
ElemType A,B;
int n,i,j;
printf("请输入杨辉三角的行数\n");
scanf("%d",&n);
InitQueue(&Q);
Enqueue(&Q,1);//入队
printf("1\n");//输出第一行
for(i = 0;i < n-1 ; i++)
{
for(j = 0 ; j < i ;j++)
{
Outqueue(&Q,&A);//队头元素出队,并且其值保存在A中
GetHeadElem(&Q,&B);//当前队头元素的值保存在B中
Enqueue(&Q,A+B);//A+B入队
}
Enqueue(&Q,1);//每行的最后一个元素入队
PrintQueue(&Q);//输出队列(也就是最后一行元素)
}
return 0;
}