C++队列类的问题,大家来帮帮我啊

as11qwer 2008-10-31 07:30:46
给出类内了,大家帮我把函数写写啊,谢谢啦
#include <iostream.h>
#include <stdlib.h>
// maximum size of a queue list
const int MaxQSize = 50;
class Queue
{
private:
// queue array and its parameters
int front, rear, count;
DataType qlist[MaxQSize];
public:
// constructor
Queue (void); // initialize integer data members

// queue modification operations
void QInsert(const DataType& item);
DataType QDelete(void);
void ClearQueue(void);

// queue access
DataType QFront(void) const;
// queue test methods
int QLength(void) const;
int QEmpty(void) const;
int QFull(void) const;
};
// initialize queue front, rear, count
Queue::Queue (void) : front(0), rear(0), count(0)
{} //构造函数已给出

下面的是要求和提示:
队列是以表形式存放元素,但只允许在表的两端访问元素的数据结构,在表尾插入,在表头删除,应用中使用队列按出现顺序存放元素
队列删除元素的顺序和元素到达队列的顺序相同,FIFO(先进先出)。商店中顾客的服务顺序和打印池中打印作业缓冲区是队列的典型例子
队列由表及指定的对表头和表尾位置元素的访问操作组成。
与栈一样,队列也以形式类型DataType来存放元素。用数组来实现,可能会出现“队列满”的情况
随着插入与删除操作的进行,如果想充分利用数组空间,就要频繁移动大量元素
引入环状模型来实现队列
变量count存放队列中元素个数,若count=MaxQSize,则队列已满。


...全文
672 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_xiaoxin 2008-10-31
  • 打赏
  • 举报
回复
///////////////////////////////////////////////////////////////
#include <iostream>
#include <stdlib.h>
using namespace std;

typedef int DataType;
// maximum size of a queue list
const int MaxQSize = 50;
class Queue
{
private:
// queue array and its parameters
int front, rear, count;
DataType qlist[MaxQSize];
public:
// constructor
Queue (void); // initialize integer data members

// queue modification operations
void QInsert(const DataType& item);
DataType QDelete(void);
void ClearQueue(void);

// queue access
DataType QFront(void) const;
// queue test methods
int QLength(void) const;
int QEmpty(void) const;
int QFull(void) const;
};

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

} //构造函数已给出

void Queue::QInsert(const DataType& item)
{
if((rear+1)%MaxQSize == front)
return;
qlist[rear]=item;
rear=(rear+1)%MaxQSize;
count++;
}

DataType Queue::QDelete(void)
{
if(front==rear)
cout << "Queue is empty" << endl;
DataType e= qlist[front];
front=(front+1)%MaxQSize;
count--;
return e;
}

void Queue::ClearQueue(void)
{
front=rear=0;
count=0;
}

DataType Queue::QFront(void) const
{
if(front==rear)
cout << "Queue is empty" << endl;
DataType e=qlist[front];
return e;
}

int Queue::QLength(void) const
{
return(rear-front+MaxQSize)%MaxQSize;
}

int Queue::QEmpty(void) const
{
if(front==rear)
return 1;
else
return 0;
}

int Queue::QFull(void) const
{

if(count == MaxQSize)
return 1;
else
return false;
}

int main()
{
return 0;
}
///////////////////////////////////////////////////////////////////
elegant87 2008-10-31
  • 打赏
  • 举报
回复

//以前学数据结构的时候写了一个关于队列的操作!
//你可以参考一下!
#include <iostream>
#include <cstdlib>

using namespace std;

typedef struct node
{
int data;
struct node *next;
}Qnode;


class Queue
{
public:
Queue();
void InitQueue();
void show()const;
void EnQueue(int e);
void DeQueue(int &e);
~Queue();
private:
Qnode *rear;
Qnode *front;
};

Queue::Queue()
{
front=new node;
rear=front;
front->next=NULL;
}

void Queue::InitQueue()
{
Qnode *p2=new node;
int i=0;
cout<<"请输入数值(-1 退出):";
cin>>p2->data;
while (p2->data!=-1)
{
++i;
if(i==1)
{
front->next=p2; //队首指针指向队首
rear->next=p2;
rear=p2;
}
else
{
rear->next=p2;
rear=p2;
}
p2=new node;
cin>>p2->data;
}
rear->next=NULL;
}


void Queue::show() const
{

if(front==rear)
cout<<"此队为空队!"<<endl;
else
{
node *p=front->next;
cout<<"顺序的队值为: "<<endl;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}

void Queue::EnQueue(int e) //入队
{
node *p=new node;
p->data=e;
p->next=NULL;
rear->next=p;
rear=p;
}

void Queue::DeQueue(int &e) //从队首删除一个元素
{
if (front==rear)
cout<<"此队为空队!"<<endl;
else
{
node *p=front->next;
e=p->data;
front->next=p->next;
if(rear==p)
rear=front;
delete p;
}
}

Queue::~Queue()
{
while(front)
{
rear=front->next;
delete front;
front=rear;
}
}

int main ()
{
Queue Q;
int e;
int flag=0;

while(true)
{
cout<<" ━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<" 1.初始化 2.入队 3.出对 4.显示 5.退出"<<endl;
cout<<" ━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"\n请选择操作: ";
cin>>flag;
switch(flag)
{
case 1:
Q.InitQueue();
break;
case 2:
cout<<"请输入要进队数值:"<<endl;
cin>>e;
Q.EnQueue(e);
break;
case 3:
Q.DeQueue(e);
cout<<"出队数值: "<<e<<endl;
break;
case 4:
Q.show();
break;
case 5:
exit(0);
break;
default:
cout<<"\n输入错误,重新输入!\n"<<endl;
}
}
cout<<endl;
return 0;
}

as11qwer 2008-10-31
  • 打赏
  • 举报
回复
UP!!!!!!!
matrixdwy 2008-10-31
  • 打赏
  • 举报
回复
循环队列么就用%呀
mandarin 2008-10-31
  • 打赏
  • 举报
回复
自己用实际数据测试一下就行了
as11qwer 2008-10-31
  • 打赏
  • 举报
回复
我已经写出来了,但没把握对不对,想和高手写出来的比较下,查漏补缺,我是不会应付作业的(我还是新手)
Longinc 2008-10-31
  • 打赏
  • 举报
回复
汗 可能真是作业
帅得不敢出门 2008-10-31
  • 打赏
  • 举报
回复
不会是传说中的作业贴吧
fallening 2008-10-31
  • 打赏
  • 举报
回复
....

65,210

社区成员

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

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