首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

己写的Queue类循环的,push()函数有点有关问题

2012-03-20 
己写的Queue类循环的,push()函数有点问题#include iostreamusingnamespacestdtemplate classTstructN

己写的Queue类循环的,push()函数有点问题
#include <iostream>

using   namespace   std;
template <class   T>
struct   Node
{
        T   data;
        Node <T>   *next;
};

template <class   T>
class   Queue
{
        public:
                Queue(){rear   =   NULL;};
                Queue(Queue   &x);
                ~Queue();
                bool   empty(){return   rear   ==   NULL;};
                T   Front();
                T   Top();
                void   push(const   T   x);
                void   pop();
                void   operator   =   (Queue   &x);
        private:
                Node <T>   *rear;
};
template <class   T>
Queue <T> ::Queue(Queue   &x)
{
        while(!x.empty())
        {
                push(x.Front());
                x.pop();
        }
}
template <class   T>
Queue <T> ::~Queue()
{
        while(!empty())
        {
                pop();
        }
}
template <class   T>
void   Queue <T> ::operator   =(Queue   &x)
{
        while(!x.empty())
        {
                push(x.Front());
                x.pop();
        }
}
template <class   T>
void   Queue <T> ::push(const   T   x)
{
        Node <T>   *p   =   new   Node <T> ;
        p-> data   =   x;
        p-> next   =   NULL;
        if(!empty())
        {
                p-> next   =   rear-> next;  
                rear-> next   =   p;
                rear   =   p;
        }
        else
        {
                rear   =   p;
                rear-> next   =   rear;
        }
}
template <class   T>
void   Queue <T> ::pop()
{
        if(!empty())
        {
                Node <T>   *p;


                p   =   rear-> next;
                rear-> next   =   p-> next;
                delete   p;
        }
}
template <class   T>
T   Queue <T> ::Front()
{
        if(!empty())
        {
                return   rear-> next-> data;
        }
}
template <class   T>
T   Queue <T> ::Top()
{
        if(!empty())
        {
                return   rear-> data;
        }
}
int   main()
{
        Queue <int>   a;
        //a.push(2);
        //a.push(5);
        //cout < <a.Front();
        //cout < <a.Top();
        return   0;
}

掉用push后,运行会出问题
谁帮我看看

[解决办法]
簡單看了一下push出錯的問題,改一下pop函數就行了,其他問題你自己在測試
template <class T>
void Queue <T> ::pop()
{
if(!empty())
{
Node <T> *p;
p = rear-> next;
rear-> next = p-> next;
rear=rear==p?NULL:rear;//增加了一句
delete p;
}
}
[解决办法]
template <class T>
void Queue <T> ::pop()
{
if(!empty())
{
Node <T> *p;
p = rear-> next;
if(p == rear) //剩下一个结点时
{
delete p;
p = NULL;
rear = NULL;
}
else
{
rear-> next = p-> next;
p-> next = NULL;
delete p;
p = NULL;
}

}
}

热点排行