注册 登录
编程论坛 数据结构与算法

用队列方式输出杨辉三角!程序改错,请求帮忙!谢谢了

jj369258 发布于 2011-11-04 11:10, 1612 次点击
#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#include<malloc.h>

typedef struct Qnode
{
    int data;
    struct Qnode *next;
}Qtype;

typedef struct LinkQueue
{
    Qtype *front;
    Qtype *rear;
}LinkQueue;

int InitQueue(LinkQueue *Q)
{
    Qtype *p;
    p=(Qtype*)malloc(sizeof(Qtype));
    if(!p)
        return 0;
    p->next=NULL;
    Q->front=Q->rear=p;
    return 1;
}

int EnQueue(LinkQueue *Q,int e)
{
    Qtype *Newnode;
    Newnode=(Qtype*)malloc(sizeof(Qtype));
    if(!Newnode)
        return 0;
    Newnode->data=e;
    Newnode->next=Q->rear->next;
    Q->rear->next=Newnode;
    Q->rear=Newnode;
    return 1;
}
int Empty(LinkQueue *Q)
{
    return(Q->front==Q->rear?1:0);
}

int DeQueue(LinkQueue *Q,int *e)
{
    Qtype *p;
    if(Empty(Q))
        return 0;
    p=Q->front->next;
    *e=p->data;
    Q->front->next=p->next;
    if(Q->front->next==NULL)
        Q->rear=Q->front;
    free(p);
    return 1;
}
int Gethead(LinkQueue *Q,int *e)
{
    if(Empty(Q))
        return 0;
    *e=Q->front->next->data;
    return 1;
}

int main()//yanghuisanjiao
{
    int i,j,n,temp,e;
    LinkQueue Q;
    InitQueue(&Q);
    EnQueue(&Q,1);//第一行元素入队
    cin>>n;
    for(i=2;i<=n;i++)
    {
        EnQueue(&Q,1);//第n行的第一个元素入队
        for(j=0;j<=i-2;j++)
        {
            DeQueue(&Q,&temp);
            cout<<temp;//打印第n-1行的元素
            Gethead(Q,&e);
            temp=temp+e;//利用第n-1行的元素产生第n行的元素
            EnQueue(&Q,temp);
        }
        DeQueue(&Q,&e);
        cout<<e;//打印第n-1行的最后一个元素
        EnQueue(&Q,1);//最后一个元素入队
    }
    return 0;
}


4 回复
#2
无名可用2011-11-04 15:14
程序代码:
int main()//yanghuisanjiao
{
    int i,j,n,temp,e;
    LinkQueue Q;
    InitQueue(&Q);
    cin>>n;
    cout << "1" << endl;
    ::EnQueue( &Q, 1 );
    ::EnQueue( &Q, 2 );
    ::EnQueue( &Q, 1 );
    for(i=3;i<=n+1;i++)
    {
        EnQueue(&Q,1);//第n行的第一个元素入队
        for(j=1;j<=i-1;j++)
        {
            DeQueue(&Q,&temp);
            cout<<temp<<" ";//打印第n-1行的元素
            Gethead(&Q,&e);
            temp=temp+e;//利用第n-1行的元素产生第n行的元素
            EnQueue(&Q,temp);
        }
        DeQueue(&Q,&e);
        cout<< e << " ";//打印第n-1行的最后一个元素
        EnQueue(&Q,1);//最后一个元素入队
        cout << endl;
    }
    system( "pause" );
    return 0;
}
初始化的时候将杨辉三角整个第二行一起入队,因为第二行无法根据第一行递推得来
#3
jj3692582011-11-08 18:55
谢谢
#4
leizisdu2011-11-12 21:40
回复 楼主 jj369258
楼主,您的思路是对的,我把您的程序复制到VC6.0的新工程里运行了。只是main函数中内层for循环的j初始应该从1开始,到i-2结束,共i-2次,表示第i行中间的i-2项:
for (j=1; j<=i-2; ++j);
另外,为了能打印出第n行(最后一行),可以再单独加个for循环

[ 本帖最后由 leizisdu 于 2011-11-12 21:43 编辑 ]
#5
wjx2948019712011-11-18 21:03
学习,谢谢
1