| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 752 人关注过本帖
标题:调试一个简单的 队列问题
只看楼主 加入收藏
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
结帖率:100%
收藏
 问题点数:0 回复次数:8 
调试一个简单的 队列问题

这个简单的队列我没运行出来 可能是数据结构的问题 也可能是语法的问题
总之希望大家帮我调试一下 谢谢大家了

#include<iostream.h>

class queue
{
public:
queue():front(0),back(0),size(0){}

queue(int m):front(0),back(0),size(m){}

void push(int i)
{
if(front-back>size)
cout<<"the queue is full"<<endl;
else
{
if(front==back)
{
a[back]=i;
front=front+1;
}
for(int j=back;j<front;j++)
{
a[j]=a[j+1];
a[back]=i;
front=front+1;
}
}
}

int pop()
{
if(front<=back)
return false;
else
{
return a[front-1];
front=front-1;
}
}

bool empty()
{
if(front==back)
return true;
else
return false;
}

void disp()
{
for(int i=back;i<front;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}

private:
int back;
int front;
int size;
int a[100];
};

int main()
{
queue x(10);
x.push(3);
x.push(4);
x.push(5);
x.push(6);
x.disp();
return 0;
}

搜索更多相关主题的帖子: 队列 调试 
2006-07-07 20:33
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
push有问题,当push第一个值的时候

2006-07-07 20:55
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

我又修改了 一下 大家看看这个行不?谢谢大家的指教了
#include<iostream.h>

class queue
{
public:
queue():front(0),back(0),size(0){}

queue(int m):front(0),back(0),size(m){}

void push(int i)
{
if(front-back>size)
cout<<"the queue is full"<<endl;
else
{
a[front]=i;
front=front+1;
}
}

int pop()
{
if(front<=back)
return false;
else
{
back=back+1;
return a[back-1];
}
}

bool empty()
{
if(front==back)
return true;
else
return false;
}

void disp()
{
for(int i=back;i<front;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}

private:
int back;//指向队列头
int front;//指向队列尾
int size;
int a[100];
};

int main()
{
queue x(10);
x.push(3);
x.push(4);
x.push(5);
x.push(6);
x.disp();
cout<<x.pop()<<endl;
x.disp();
return 0;
}

2006-07-08 07:03
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

这样有点不妥当~你可以把back和first做成循环的
用一个f记录first的增加值,b记录back的增加值
f-b=size-1说明为满,否则非满。
first和back都用%=size做处理
后面的a[100];可以写成*a;然后在构造函数中分配内存new int[size];


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-08 07:29
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
楼上的兄弟 小弟数据结构学的不好 您能不能帮我写一个啊 谢谢了
照着我原来的改动一下就可以了 谢谢了
或者哪位高手帮我写一下也行
2006-07-08 20:35
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
楼上的兄弟 小弟数据结构学的不好 您能不能帮我写一个啊 谢谢了
照着我原来的改动一下就可以了 谢谢了
或者哪位高手帮我写一下也行
2006-07-08 21:09
fateboy
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-5-21
收藏
得分:0 

该实验实现的主题是什么啊

2006-07-08 23:40
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

#include<iostream>
using namespace std;

class queue
{
int f,b; //f表示front一共增加的次数,b表示back...
int front;//指向队列头
int back;//指向队列尾
int size;
int *arr;
public:
queue():front(0),back(0),size(0){arr=NULL;}

queue(int m):front(0),back(0),size(m){f=b=0;arr=new int[size];}

~queue(){delete []arr;}

void push(int i)
{
if(b-f==size)
cout<<"the queue is full"<<endl;
else
{
arr[back]=i;
back++;b++;
back%=size;
}
}

int pop()
{
if(b==f)
{
cout<<"Can't pop from a empty queue~!"<<endl;
return -999;
}
else
{
front++;front%=size;f++;
return arr[front%size-1];
}
}

bool empty()
{
if(f==b)
return true;
else
return false;
}

void disp()
{
for(int i=front;i!=back;i++)
{
cout<<arr[i]<<" ";
//i%=size;
}
cout<<endl;
}
};

int main()
{
queue x(10);
x.push(3);
x.push(4);
x.push(5);
x.push(6);
x.disp();
cout<<x.pop()<<endl;
x.disp();
return 0;
}

[此贴子已经被作者于2006-7-10 10:24:40编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-09 09:35
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

谢谢楼上的大哥了 主题就是队列啊

2006-07-10 09:59
快速回复:调试一个简单的 队列问题
数据加载中...
 
   



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

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