为什么没有输出结果,关于模板.请大家帮忙.急.

bobshi 2003-05-20 04:35:34
//程序大体是这样一个queuenode类一个queue类.
//我的目的是建立一个队列然后输出结果. 可是没有结果请大家看看.
//queuenode.h
#ifndef QUEUENODE_H
#define QUEUENODE_H

template <class T>
class Queue;

template <class T>
class QueueNode
{
friend class Queue<T>;
public:
QueueNode(T d=0, QueueNode<T> *l=NULL );
private:
T data;
QueueNode<T> *next;

};

template <class T>
QueueNode<T>::QueueNode(T d, QueueNode<T> *l):data(d),next(l)
{

}
#endif
//下面类queue的定义.
//queue.h
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include "queuenode.h"
using namespace std;

template <class T>
class Queue
{

public:
Queue();//构造函数,建立空队列.

~Queue();//析构函数

void EnQueue(const T& item);//将item入队

int DeQueue();//删除队头元素并返回1,否则返回0

T GetFront();//查看队头元素的值

void MakeEmpty();//清空队列,实现与~Queue()相同

int IsEmpty() const;//判队列空否

void PrintQueue(Queue<T>* p);
private:
QueueNode<T> *front, *rear;

};

template <class T>
Queue<T>::Queue():front(NULL),rear(NULL)
{

}

template <class T>
Queue<T>::~Queue()
{
QueueNode<T> *p;
while (front != NULL)
{
p=front;
front=front->next;
delete p;
}
}

template <class T>
void Queue<T>::EnQueue(const T &item)
{
QueueNode<T> *newNode;
newNode=new QueueNode<T>(item,NULL);

if (front == NULL)
{
front=rear=newNode;
}
else
{
rear=rear->next;
rear=newNode;
}
}

template <class T>
int Queue<T>::DeQueue()
{
if (IsEmpty())
{
return 0;
}

QueueNode<T> *p=front;
front=front->next;
delete p;

return 1;
}

template <class T>
T Queue<T>::GetFront()
{
if (IsEmpty())
{
return NULL;
}

return front->data;
}

template <class T>
void Queue<T>::MakeEmpty()
{
QueueNode *p;
while (front != NULL)
{
p=front;
front=front->next;
delete p;
}
}

template <class T>
int Queue<T>::IsEmpty() const
{
return front==NULL;
}

template <class T>
void Queue<T>::PrintQueue( Queue<T>* p)
{
//这个函数有问题注了的只能输出一个数下面的却没有输出.请大家帮忙看看这两种方法为//什么会出错.
// while (p->front != NULL)
// {
// cout << (p->front)->data << " ";
// p->front=(p->front)->next;
// }
while (p->IsEmpty())
{
cout << p->GetFront() << " ";
p->front=(p->front)->next;
}
}
#endif
//下面是主程序.
//queuetest.cpp
#include <iostream>
#include "queue.h"
using namespace std;




int main()
{
Queue<int> *qint=new Queue<int>;
for (int i=1; i<10; i=i+2)
{
qint->EnQueue(i);
}


qint->PrintQueue(qint);

return 0;

}
...全文
32 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobshi 2003-05-20
  • 打赏
  • 举报
回复
谢谢。arfi() 我太粗心了。
arfi 2003-05-20
  • 打赏
  • 举报
回复
template <class T>
void Queue<T>::EnQueue(const T &item)
{
QueueNode<T> *newNode;
newNode=new QueueNode<T>(item,NULL);

if (front == NULL)
{
front=rear=newNode;
}
else
{
rear->next = newNode; //这里需要改动
rear=newNode;
}
}



template <class T>
void Queue<T>::PrintQueue( Queue<T>* p)
{
//这个函数有问题注了的只能输出一个数下面的却没有输出.请大家帮忙看看这两种方法为//什么会出错.
// while (p->front != NULL)
// {
// cout << (p->front)->data << " ";
// p->front=(p->front)->next;
// }
while (!p->IsEmpty()) //应该改为非空
{
cout << p->GetFront() << " ";
p->front=(p->front)->next;
}
}

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧