标题:如何利用队列写出杨辉三角的算法?
只看楼主
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
 问题点数:0 回复次数:12 
如何利用队列写出杨辉三角的算法?
帮帮忙啦,急用啊~~
搜索更多相关主题的帖子: 队列 算法 杨辉三角 
2008-10-13 15:22
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
得分:0 
为什么没人教我啊??
2008-10-13 18:17
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
为什么要用队列?
2008-10-13 18:53
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
得分:0 
老师要求啊,而我们刚刚学而已,而老师就马上要求要用队列啊,我不是很懂,所以便上来请教一下啦
2008-10-13 21:07
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
哪位高手麻烦告诉我一下杨辉三角形为什么会用到队列……
2008-10-13 21:47
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
得分:0 
刚用队列写的,请参考:

#include<iostream.h>
#include"LinkedQueue.h"

///////////////////////////////////////////////////
//YANGVI()函数   利用队列显示杨辉三角形的算法
///////////////////////////////////////////////////
void YANGVI(int n)
{
    //整型链队
    LinkedQueue<int> LQ;
    int A,B,k,s;
    //循环打印n层
    for(k=1;k<=n;k++)
    {
        //控制格式用的显示字符
        for(int i=1;i<=n-k;i++)
        {
            cout<<" ";
        }
        //计算每一行的杨辉三角
        LQ.EnQueue(1);
        cout<<1<<" ";
        for(i=1;i<k;i++)
        {
            LQ.DeQueue(A);
            LQ.getFront(B);
            s=A+B;
            LQ.EnQueue(s);
            cout<<s<<" ";
        }
        cout<<1<<" "<<endl;
    }
};
///////////////////////////////////YANGVI()函数结束
2008-10-14 09:26
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
得分:0 
#include"LinkedQueue.h"这个头文件你没写啊~~?
2008-10-14 17:36
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
得分:0 
写了,是我编写的链式队列,代码你要么?
2008-10-14 19:16
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
得分:0 
做个慷慨的人,以下是LinkedQueue.h的内容,是链式的队列,是个完整的队列,
这回你可以运行了:
#ifndef LINKEDQUEUE_H
#define LINKEDQUEUE_H

#include<iostream.h>
#include<stdlib.h>
#include<assert.h>

////////////////////////////////////////////////
//链队的结点结构体定义
////////////////////////////////////////////////
template <class T>
struct LinkQNode//:public Queue<T>
{
    //数据域
    T data;
    //指针域
    LinkQNode<T>* link;
    //结点构造函数,只用指针初始化
    LinkQNode(LinkQNode<T>* ptr=NULL)
    {
        //用参数初始化
        link=ptr;
    };
    //结点构造函数,用数据和指针初始化
    LinkQNode(const T& item,LinkQNode<T>* ptr=NULL)
    {
        //初始化数据
        data=item;
        //初始化指针
        link=ptr;
    };    
};
////////////////////////////////////结点定义结束

////////////////////////////////////////////////
//链队LinkedQueue类模板的声明和定义
////////////////////////////////////////////////
template<class T>
class LinkedQueue
{
public:
    //构造函数
    LinkedQueue():rear(NULL),front(NULL){};
    //析构函数
    ~LinkedQueue()
    {makeEmpty();cout<<"内存释放完毕!"<<endl;};
    //将x进入队列的尾部
    bool EnQueue(const T& x);
    //删除队头元素,其删除的值用x返回
    bool DeQueue(T& x);
    //读取队头元素的值,把读取的值放入x
    bool getFront(T& x)const;
    //把队列置空
    void makeEmpty();
    //判断队列是否为空
    bool IsEmpty()const{return (front==NULL)?true:false;};
    //得到队列中元素的个数
    int getSize()const;
    //友元重载<<运算符输出队列中的所有元素
    friend ostream& operator<<(ostream& os,LinkedQueue<T>& LQ);
protected:
    //队头指针
    LinkQNode<T>* front;
    //队尾指针
    LinkQNode<T>* rear;
};
///////////////////////////LinkedQueue类声明结束

////////////////////////////////////////////////
//makeEmpty()公有成员函数  清空链队并释放内存
////////////////////////////////////////////////
template<class T>
void LinkedQueue<T>::makeEmpty()
{
    //游标指针
    LinkQNode<T>* ptr=front;
    //暂存要删除的结点的指针
    LinkQNode<T>* del;
    while(ptr!=NULL)
    {
        del=ptr;
        ptr=ptr->link;
        delete del;
    }
    //队头队尾指针置空
    front=NULL;
    rear=NULL;
};
/////////////////////////////makeEmpty()函数结束

////////////////////////////////////////////////
//EnQueue()公有成员函数
//将x进入队列的尾部
////////////////////////////////////////////////
template<class T>
bool LinkedQueue<T>::EnQueue(const T& x)
{
    //如果队列为空,则要新建一个结点
    if(front==NULL)
    {
        //以x为数据新建一个结点
        front=new LinkQNode<T>(x);
        //断言内存分配成功
        assert(front!=NULL);
        //同时该结点也是队尾结点
        rear=front;
    }
    //如果队列不空
    else
    {
        //为数据x新建一个结点
        //并把结点挂入尾结点的后面
        rear->link=new LinkQNode<T>(x);
        //断言结点内存分配成功
        assert(rear->link!=NULL);
        rear=rear->link;
    }
    return true;
};
////////////////////////////////////////////////

////////////////////////////////////////////////
//DeQueue()公有成员函数  队头元素出队
////////////////////////////////////////////////
template<class T>
bool LinkedQueue<T>::DeQueue(T& x)
{
    LinkQNode<T>* del;//暂存待删除的结点的指针
    //如果队列为空
    if(front==NULL)
    {
        cout<<"队列为空!"<<endl;
        return false;
    }
    //如果队列不空
    else
    {
        del=front;
        //取出要删除的结点的数据
        x=front->data;
        front=front->link;
        delete del;
    }
    return true;
};
///////////////////////////////DeQueue()函数结束

////////////////////////////////////////////////
//getFront()公有成员函数  读取队头元素
////////////////////////////////////////////////
template<class T>
bool LinkedQueue<T>::getFront(T& x)const
{
    if(IsEmpty())
    {
        cout<<"队列为空!"<<endl;
        return false;
    }
    else
    {
        x=front->data;
        return true;
    }
};
//////////////////////////////getFront()函数结束

////////////////////////////////////////////////
//友元重载<<运算符输出队列中的所有元素
////////////////////////////////////////////////
template<class T>
ostream& operator<<(ostream& os,LinkedQueue<T>& LQ)
{
    //如果队列为空
    if(LQ.IsEmpty())
    {
        os<<"队列为空!"<<endl;
    }
    else
    {
        //游标指针
        LinkQNode<T>* ptr=LQ.front;
        cout<<"(front)"<<" ";
        while(ptr!=NULL)
        {
            os<<ptr->data<<" ";
            ptr=ptr->link;
        }
        cout<<"(rear)"<<endl;
    }

    return os;
};
//////////////////////////////////运算符重载结束

////////////////////////////////////////////////
//getSize()公有成员函数  得到队列中元素的个数
////////////////////////////////////////////////
template<class T>
int LinkedQueue<T>::getSize()const
{
    if(IsEmpty())
    {
        cout<<"队列为空!"<<endl;
        return 0;
    }
    else
    {
        int count=0;
        //游标指针
        LinkQNode<T>* ptr=front;
        //计数
        while(ptr!=NULL)
        {
            count++;
            ptr=ptr->link;
        }
        return count;
    }
};
///////////////////////////////getSize()函数结束

#endif
2008-10-14 19:21
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
得分:0 
哇塞,好长啊~~呵呵,要啊。我要慢慢学习啊,呵呵
2008-10-15 13:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-237967-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.256239 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved