c++数组队列的应用问题,大家来帮我看看啊,我没招了(新手提问)

as11qwer 2008-11-06 04:35:54
数组队列的应用问题,我写的虽然无错误,但运行不出来,请大家帮我改改,最好改成能比较任意数的,而不只限于两位数,在有错的地方帮我注明下,我多给分啊,呵呵
题目要求:
初始表:91 46 85 15 92 35 31 22
第一遍,将初始表按照个位数分散到10个箱子
按照0~9的顺序从10个箱子中回收卡片(先进先出)
回收后的表为:91 31 92 22 85 15 35 46
第二遍,将第一遍回收后的表按十位数分散到10个箱子
然后按照0~9的顺序从10个箱子回收数据,回收后的顺序为15 22 31 35 46 85 91 92为已经有序的序列
第一遍保证所有个数位小的卡片在个数位大的卡片的前面
第二遍,如果两卡片的值分别为3s和3t,且s<t,他们进入箱子3的顺序为3s后跟3t
由于箱子有序,卡片从箱子3中以FIFO的顺序取出。
经过两遍后,卡片排序完毕。

#include <iostream.h>
#include <stdio.h>
#include <string.h>
typedef char DataType;
const int MaxQSize = 50;
class Queue
{
private:
// queue array and its parameters
int front,rear,count;
DataType qlist[MaxQSize];
public:

Queue(void):front(0),rear(0),count(0){} // initialize integer

//data members

// queue modification operations
void QInsert(const DataType &item)
{
if (QFull()) return;
qlist[rear++]=item;
rear%=MaxQSize;
++count;
}
DataType QDelete(void)
{
DataType t;
if(QEmpty()) return 0;
t=qlist[front++];
front%=MaxQSize;
--count;
return t;
}
void ClearQueue(void)
{
front=rear=count=0;
}
void Show()
{
for (int i=0;i<count;i++)
cout<<qlist[(front+i)%MaxQSize];
cout<<endl;
}
// queue access
DataType QFront(void)
{return qlist[front++];}
// queue test methods
int QLength(void) const{return count;}
int QEmpty(void) const{return count==0;}
int QFull(void) const{return count==MaxQSize;}
};
/*class weishu
{
public:
int quweishu(int *c,int d);
void paixu(int *f,int *e);
private:
int f[MaxQSize];
};*/
/*void quweishu(int *c,int d,int *f)
{
int i;
for(i=0;i<d;i++)
f[i]=c[i]%10;
}
void paixu(int *f,int *e,int h)
{
int t;int i;
for(i=0;i<h;i++)
for(j=h-1;j>i;j--)
if(f[i]>f[j])
{
t=e[i];e[i]=e[j];e[j]=t;
}
for(i=0;i<h;i++)
cout<<e[i]<<" ";
}
*/

void main()
{
Queue Q[10];
// weishu W;
int g[MaxQSize];
int i;int b;int j;int k;
char a[MaxQSize];
int c[MaxQSize];
for(i=0;i<10;i++)
Q[i].ClearQueue();
//Queue *p=new Queue[10];
cout<<"请输入要进行比较的数字个数:"<<endl;
cin>>b;
cout<<"请输入要进行比较的数字:"<<endl;
for(i=0;i<b;i++)
cin>>a[i];
for(i=0;i<b;i++)
if(a[i]%10==j)
Q[j].QInsert(a[i]);
cout<<"按个位数排序后的顺序为:"<<endl;
for(i=0;i<10;i++)
Q[i].Show();
for(i=0;i<b;i++)
if(a[i]%100==j)
Q[j].QInsert(a[i]);
for(i=0;i<b;i++)
for(k=b-1;k>0;k++)
{
if(a[i]/10==a[k]/10==j&&i<k)
{
Q[j].QInsert(a[i]);
Q[j].QInsert(a[k]);
}
if(a[i]%100==a[k]%100==j&&i>k)
{
Q[j].QInsert(a[k]);
Q[j].QInsert(a[k]);
}
}
cout<<"按十位数排序后的顺序为:"<<endl;
for(i=0;i<10;i++)
Q[i].Show();
delete []p;
}













...全文
183 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuedaoli 2008-11-06
  • 打赏
  • 举报
回复
你的队列是要写成循环队列吗?
DataType QFront(void)
{return qlist[front++];}
取头个对象?那为什么 要++,后移?
as11qwer 2008-11-06
  • 打赏
  • 举报
回复
哎,愁,又白写了……
liuxs75 2008-11-06
  • 打赏
  • 举报
回复
你写的基本上是不能出结果的,不做大的改动也无法改好。
在你想写程序前,还是先画画流程图吧,这是个好习惯。

里面的程序你先思考下列问题:
main中的变量j是在哪里赋值的?是想干什么用的?
类数组Q[10]是想存储那些数据?是在反复使用么?在第二次用之前是否清空了?
你要得到的最终数列想放到什么地方?
如何获得十位数字?是i%100还是(i%100)/10或者(i/10)%10?

思考好了再重写下吧
as11qwer 2008-11-06
  • 打赏
  • 举报
回复
UP
cyj626 2008-11-06
  • 打赏
  • 举报
回复
up
zapdos 2008-11-06
  • 打赏
  • 举报
回复
是不是基数排序啊?
不太明白你想干什么?

65,210

社区成员

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

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