关于C++编写的队列程序,不知道怎么改?

CSU305 2008-04-15 09:44:41
最近我看C++编程时,就最近动手想编个队列程序 其代码如下:
#include <iostream>
using namespace std;
#define DEFAULT -1
class qtype {
friend class Cqueue;
public:
qtype(int elem);
qtype ( );
private:
int data;
qtype * next;
};
inline qtype::qtype( int elem):data(elem),next(0) { }
inline qtype::qtype( ):data(DEFAULT),next(0){ }

class Cqueue {
public:
Cqueue ();
int queuelen ( ) const ;
void insert ( int elem,qtype *p= 0) ;

void display ( ) ;
void insert_front ( int elem);
qtype *head, *tail;
private:
int qlen_;
// qtype *head, *tail;
Cqueue ( qtype * q) ;
Cqueue& operator= (const Cqueue&);


};
inline Cqueue::Cqueue():qlen_(0),head(0),tail(0) {}

int Cqueue::queuelen() const {
return qlen_;
}
void Cqueue::insert(int elem,qtype* p ) {
qtype *temp = new qtype (elem);
if( p != 0){
temp->next =p->next ;
p->next = temp;
qlen_ ++;
}
else {
atfront( elem);
}


}
void Cqueue::atfront ( int elem) {
qtype * qtemp = new qtype (elem);

if (!head) {
head = tail = qtemp;
}
else {
qtemp->next = head;
head = qtemp;
}
qlen_++;
}
void Cqueue::display( ) {
//qtype *que = new qtype();
qtype *que = head;
cout << "the elem of the queue is:\n" << endl;
while ( !que) {
cout << que->data << " " <<endl;
que = que->next ;
}
}

void main () {
Cqueue myque;
for (int i = 0; i< 10; i++) {
myque.insert ( i ,myque.head);
//为了测试列表头的元素/是否在变
cout << "the value of head is: \n" << myque.head->data << endl;

}
myque.display ();
}

我往列表中插入10个元素,按照我的程序,应该是每次在队列头插入新的表项,但是在测试时输出的元素总是“0”,我检查了自己的程序实在是找不来。
还有这个的 dispaly()根本没执行借结束了。我也没想明白!
我是不是在指针分配的时候出什么问题了!
希望高手们能帮我指出来,
万分感谢!
这几天一直很郁闷。简单程序都没法实现。真不知道怎么学编程。
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSU305 2008-04-16
  • 打赏
  • 举报
回复
谢谢大家的关注
问题解决了
是那个diapaly()函数的while()判断写错了,应该为while( que)

cout << "the value of head is: \n" << myque.head->data << endl; 不太清楚你这要干什么?
这个语句主要是向看下表头元素变了没

再次感谢大家的帮助!


effective_person 2008-04-15
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
#define DEFAULT -1
class qtype
{
friend class Cqueue;
public:
qtype(int elem);
qtype ( );
public:
int data;
qtype * next;
};
inline qtype::qtype( int elem):data(elem),next(0) { }
inline qtype::qtype( ):data(DEFAULT),next(0){ }

class Cqueue
{
public:
Cqueue ();
int queuelen ( ) const ;
void atfront ( int elem);
void insert ( int elem,qtype *&p) ;
void display ( ) ;
void insert_front ( int elem);
qtype *head, *tail;
private:
int qlen_;
// qtype *head, *tail;
Cqueue ( qtype * q) ;
Cqueue& operator= (const Cqueue&);
};

inline Cqueue::Cqueue():qlen_(0),head(0),tail(0) {}
int Cqueue::queuelen() const
{
return qlen_;
}
void Cqueue::insert(int elem,qtype*& p )
{
qtype *temp = new qtype (elem);
if( p != 0)
{
temp->next =p->next ;
p->next = temp;
qlen_ ++;
}
else
{
atfront( elem);
}
}
void Cqueue::atfront ( int elem)
{
qtype * qtemp = new qtype (elem);
if (!head)
{
head = tail = qtemp;
}
else
{
qtemp->next = head;
head = qtemp;
}
qlen_++;
}
void Cqueue::display( )
{
//qtype *que = new qtype();
qtype *que = head;
cout << "the elem of the queue is:" << endl;
while ( que)
{
cout << que->data << " ";
que = que->next ;
}
}

void main ()
{
Cqueue myque;
for (int i = 0; i < 10; i++) //我看你的程序,你的程序是这样:先插入一个数,然后插入入道节点的前面,除了一个节点
{
myque.insert ( i ,myque.head); //为了测试列表头的元素/是否在变
// cout << "the value of head is: \n" << myque.head->data << endl; 不太清楚你这要干什么?
}
myque.display ();
}

Kratos 2008-04-15
  • 打赏
  • 举报
回复
引用
if (!head) {
head = tail = qtemp;
}


寻思寻思下。
Kratos 2008-04-15
  • 打赏
  • 举报
回复
引用
void Cqueue::insert(int elem,qtype* p ) {
qtype *temp = new qtype (elem);
if( p != 0){
temp->next =p->next ;
p->next = temp;
qlen_ ++;
}
else {
atfront( elem);
}


引用
void Cqueue::display( ) {
//qtype *que = new qtype();
qtype *que = head;
cout < < "the elem of the queue is:\n" < < endl;
while ( !que) {
cout < < que->data < < " " < <endl;
que = que->next ;
}
}

when que==0?没看到你把tail=0了嘛。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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