#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define TRUE 1
struct Node{
int data;
struct Node* next;
};
struct QNode{
struct Node *rear;
struct Node *front;
};
typedef struct QNode *queue;
void InitialQ(queue q)
{
struct Node *p;
p=(struct Node*)malloc(sizeof(struct Node));
if(p==NULL){
return ;
}
q->front=q->rear=p;
q->rear->next=NULL;
}
void AddQ(queue ptr,int x)
{
struct Node *NewNode;
NewNode=(struct Node*)malloc(sizeof(struct Node));
if(NewNode!=NULL){
NewNode->data=x;
NewNode->next=NULL;
ptr->rear->next=NewNode;
ptr->rear=NewNode;
return ;
}
}
int DeleteQ(queue ptr)
{
struct Node* frontcell;
int x;
if(ptr->front==ptr->rear){
return ERROR;
}
else{
frontcell=(ptr)->front->next;
x=frontcell->data;
(ptr)->front->next=frontcell->next;
free(frontcell);
if(ptr->front->next==NULL){
ptr->rear=ptr->front;
}
return x;
}
}
int getfront(queue q)
{
return q->front->next->data;
}
int IsEmpty(queue q)
{
if(q->rear==q->front)
return 1;
else
return 0;
}
int main()
{
int n;
scanf("%d",&n);
int i=0,j=0;
int a=0,b=0;
queue q=(queue)malloc(sizeof(struct QNode));//很无语这个没写就跑不起来
InitialQ(q);
AddQ(q,1);
for(i=2;i<=n;i++)
{
AddQ(q,1);
for(j=1;j<=i-2;j++){
a=DeleteQ(q);
printf("%d ",a);
b=getfront(q);
AddQ(q,a+b);
}
a=DeleteQ(q);
printf("%d ",a);
AddQ(q,1);
printf("\n");
}
while (!IsEmpty(q))
{
a=DeleteQ(q);
printf("%d ", a);
}
}
数据结构之用队列打印杨辉三角
最新推荐文章于 2024-03-26 21:47:27 发布