找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 574|回复: 8

调试一个简单的 队列问题

[复制链接]
发表于 2009-11-3 03:38:22 | 显示全部楼层 |阅读模式 IP:江苏扬州
这个简单的队列我没运行出来 可能是数据结构的问题 也可能是语法的问题
总之希望大家帮我调试一下 谢谢大家了

#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;
}
发表于 2009-11-3 03:38:23 | 显示全部楼层 IP:江苏扬州
push有问题,当push第一个值的时候
回复

使用道具 举报

发表于 2009-11-3 03:38:24 | 显示全部楼层 IP:江苏扬州
我又修改了 一下 大家看看这个行不?谢谢大家的指教了
#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;
}
回复

使用道具 举报

发表于 2009-11-3 03:38:25 | 显示全部楼层 IP:江苏扬州
这样有点不妥当~你可以把back和first做成循环的
用一个f记录first的增加值,b记录back的增加值
f-b=size-1说明为满,否则非满。
first和back都用%=size做处理
后面的a[100];可以写成*a;然后在构造函数中分配内存new int[size];
回复

使用道具 举报

发表于 2009-11-3 03:38:27 | 显示全部楼层 IP:江苏扬州
楼上的兄弟 小弟数据结构学的不好 您能不能帮我写一个啊 谢谢了
照着我原来的改动一下就可以了 谢谢了
或者哪位高手帮我写一下也行
回复

使用道具 举报

发表于 2009-11-3 03:38:28 | 显示全部楼层 IP:江苏扬州
楼上的兄弟 小弟数据结构学的不好 您能不能帮我写一个啊 谢谢了
照着我原来的改动一下就可以了 谢谢了
或者哪位高手帮我写一下也行
回复

使用道具 举报

发表于 2009-11-3 03:38:29 | 显示全部楼层 IP:江苏扬州
该实验实现的主题是什么啊
回复

使用道具 举报

发表于 2009-11-3 03:38:30 | 显示全部楼层 IP:江苏扬州
#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;
}
回复

使用道具 举报

发表于 2009-11-3 03:38:31 | 显示全部楼层 IP:江苏扬州
谢谢楼上的大哥了 主题就是队列啊
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:35 , Processed in 0.181538 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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