关于队列的输出

pengpeng5047 2009-05-21 09:53:07
我写了一个队列类,代码如下:

class Queue
{
private:
TreeNode *data[MaxSize];
int front;
int rear;
int count;
public:
Queue();
bool IsEmpty();
void Insert(TreeNode *item);
TreeNode *GetFront();
};
Queue::Queue(){front=0;rear=0;count=0;}
bool Queue::IsEmpty()
{
if(count==0)
return true;
else
return false;
}
void Queue::Insert(TreeNode *item)
{
data[rear]=item;
rear=(rear+1)%MaxSize;
count++;
}
TreeNode *Queue::GetFront()
{
if(!IsEmpty())
{
TreeNode *tmp=data[front];
front=(front+1)%MaxSize;
count--;
return tmp;
}
}

然后我做如下操作:
Queue q; 
q.Insert(1);
q.Insert(2);
q.Insert(3);
cout << q.GetFront() << q.GetFront() << q.GetFront() << endl;

为什么结果是321呢?队列不是应该输出123吗?请教大家!谢谢!
...全文
328 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengpeng5047 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kedt5626408 的回复:]
为什么结果是321呢?安照楼主的类定义插入队列的应该是指向TreeNode的指针,并且没看到任何的输出重载,输出的也应该是指向TreeNode的地址才到~
[/Quote]
不好意思,对不起大家了
我提问题时代码写错了,这段代码是我做树的相关操作时写的,为了测试队列代码的正确性,所以我把队列里的数据改成整形了,
我实际想问的是这段代码:
关于队列
悬赏分:20 - 解决时间:2009-5-21 11:35
我写了一个队列类,代码如下:
class Queue 
{
private:
int data[MaxSize];
int front;
int rear;
int count;
public:
Queue();
bool IsEmpty();
void Insert(int item);
int GetFront();
};
pengpeng5047 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wanlong1215 的回复:]
可以告诉我 TreeNode 里的成员都是什么吗
[/Quote]
class TreeNode
{
friend class Tree;
public:
TreeNode();
TreeNode(int value,TreeNode *l,TreeNode *r);
private:
int data;
TreeNode *firstChild,*nextBrother;
};
pengpeng5047 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liao05050075 的回复:]
这个跟cout的输出顺序有关。
你可以看看
http://hi.baidu.com/hong3088/blog/item/0218307211bda81b8601b003.html
[/Quote]
我看了这篇文章,按照这篇文章所说,在我的程序里,输出操作按照如下方式执行了:(为简化,假定只执行cout << q.GetFront() << q.GetFront())
operator <<(operator << (cout,q.GetFront()),q.GetFront());
我这样理解对吗?如果正确,我感觉好像无论先计算外层operator函数的哪一个参数,都应该输出12呀?因为第二个参数并不牵涉到输出操作,这样理解的话还是不对呀?再请教!谢谢!
kedt5626408 2009-05-21
  • 打赏
  • 举报
回复
为什么结果是321呢?安照楼主的类定义插入队列的应该是指向TreeNode的指针,并且没看到任何的输出重载,输出的也应该是指向TreeNode的地址才到~
hjjdebug 2009-05-21
  • 打赏
  • 举报
回复
这不是你自己写的代码嘛。 设计逻辑full of mistake! 所以得不到你想要的结果
adventurelw 2009-05-21
  • 打赏
  • 举报
回复
帮顶一下吧
这样的数据结构设计看得真是头疼啊。

front=(front+1)%MaxSize;
//这里和++front的唯一区别就是保证了不越界,但队列不能保存死数据,弹出的数据就该
不保存了,一直取用最前面的数据就可以,越界不应该是需要关心的问题。
wanlong1215 2009-05-21
  • 打赏
  • 举报
回复
可以告诉我 TreeNode 里的成员都是什么吗
wwoo_1105 2009-05-21
  • 打赏
  • 举报
回复
写反了吧,应该这样

class Queue
{
private:
TreeNode *data[MaxSize];
int front;
int rear;
int count;
public:
Queue();
bool IsEmpty();
void Insert(TreeNode *item);
TreeNode *GetFront();
};
Queue::Queue(){front=0;rear=0;count=0;}
bool Queue::IsEmpty()
{
if(count==0)
return true;
else
return false;
}
void Queue::Insert(TreeNode *item)
{
data[rear]=item;
rear=(rear+1)%MaxSize;
count++;
front++;//这里加上front++
}
TreeNode *Queue::GetFront()
{
if(!IsEmpty())
{
TreeNode *tmp=data[front-1];//这里改了
front=(front-1)%MaxSize;//这里也改了
count--;
return tmp;
}
}

ericming200409 2009-05-21
  • 打赏
  • 举报
回复
GetFront 为啥返回指针呢,一般不会这样吧,直接返回值多好,你分成三句写
liliangbao 2009-05-21
  • 打赏
  • 举报
回复
帮顶!!!
liao05050075 2009-05-21
  • 打赏
  • 举报
回复
这个跟cout的输出顺序有关。
你可以看看
http://hi.baidu.com/hong3088/blog/item/0218307211bda81b8601b003.html

65,211

社区成员

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

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