设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 569|回复: 8
打印 上一主题 下一主题

调试一个简单的 队列问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 03:38:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个简单的队列我没运行出来 可能是数据结构的问题 也可能是语法的问题
总之希望大家帮我调试一下 谢谢大家了

#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;
}
2#
发表于 2009-11-3 03:38:23 | 只看该作者
push有问题,当push第一个值的时候
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 03:38:24 | 只看该作者
我又修改了 一下 大家看看这个行不?谢谢大家的指教了
#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;
}
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 03:38:25 | 只看该作者
这样有点不妥当~你可以把back和first做成循环的
用一个f记录first的增加值,b记录back的增加值
f-b=size-1说明为满,否则非满。
first和back都用%=size做处理
后面的a[100];可以写成*a;然后在构造函数中分配内存new int[size];
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 03:38:27 | 只看该作者
楼上的兄弟 小弟数据结构学的不好 您能不能帮我写一个啊 谢谢了
照着我原来的改动一下就可以了 谢谢了
或者哪位高手帮我写一下也行
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 03:38:28 | 只看该作者
楼上的兄弟 小弟数据结构学的不好 您能不能帮我写一个啊 谢谢了
照着我原来的改动一下就可以了 谢谢了
或者哪位高手帮我写一下也行
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 03:38:29 | 只看该作者
该实验实现的主题是什么啊
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 03:38:30 | 只看该作者
#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;
}
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 03:38:31 | 只看该作者
谢谢楼上的大哥了 主题就是队列啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 18:29 , Processed in 0.064069 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表