c++如何将数组压入队列中
有一个数组x,一个队列queue,数组x中有若干元素(如x[0],x[1])。我想把整个数组x看作一个结点,将其压入队列queue中,然后变动数组x中的元素(如x[0]+...
有一个数组x,一个队列queue,数组x中有若干元素(如x[0],x[1])。我想把整个数组x看作一个结点,将其压入队列queue中,然后变动数组x中的元素(如x[0]+1,x[1]),再将这个变动的数组压入(push(x))队列queue中。然后弹出(x=front(),pop()),具体要怎么实现(c++)。
展开
3个回答
展开全部
/**
*将数组入队,可以看成是一次将若干数据入队
*
*将队列的操作写成一个类
*
*闲着没事写的,可能有问题,影响应该不大
**/
#include <iostream>
using namespace std;
#define QUEUE_SIZE 100 //@ 队列大小
enum QueueError{
QueueError_Ok, //@ 成功
QueueError_Empty, //@ 为空
QueueError_Full, //@ 已满
QueueError_Overflow,//@ 上溢出(比如队尾指针已到顶端继续入队将产生此错误)
};
//@ 队列类
class CQueue
{
public:
CQueue(); //@ 构造函数
QueueError push(int element); //@ 入队(一次添加一个元素)
QueueError push(int *p_array,int len,int *p_num); //@ 入队(一次添加一个数组)
QueueError pop(int *p_element); //@ 出队
void display(); //@ 显示所有队列元素
int get_front(); //@ 获取队首指针
private:
int front; //@ 队头指针
int rear; //@ 队尾指针
int data[QUEUE_SIZE]; //@ 队列数据
};
//@ 构造函数
CQueue::CQueue(){
front=rear=0;//@ 将队列初始化为空
}
//@ 入队
QueueError CQueue::push(int element)
{
if(rear>=QUEUE_SIZE) return QueueError_Overflow;
data[rear]=element;
rear++;
return QueueError_Ok;
}
//@ 入队(一次添加一个数组)
//@ 如果队列不够容纳整个数组,容纳不下的部分将忽略
//@ p_array:指向要入队的数据的指针
//@ len:要入队的数据数量
//@ p_num:已入队的数据数量
QueueError CQueue::push(int *p_array,int len,int *p_num)
{
if(rear>=QUEUE_SIZE) return QueueError_Overflow;
int i=0;
for(i;i<len&&rear<QUEUE_SIZE;i++)
{
//@ 数组元素入队
data[rear]=p_array[i];
rear++;
}
*p_num=i;
return QueueError_Ok;
}
//@ 出队
//@ p_element:用来获取出队的元素值
QueueError CQueue::pop(int *p_element)
{
if(front==rear) return QueueError_Empty;
*p_element=data[front];
front++;
return QueueError_Ok;
}
//@ 显示所有队列元素
void CQueue::display()
{
if(rear==front){
cout<<"Queue is empty\n";
return;
}
for(int i=front;i<rear;i++)
cout<<data[i]<<' ';
cout<<endl;
}
//@ 获取队列的队首指针
int CQueue::get_front()
{
return front;
}
int main(int argc, char *argv[])
{
CQueue queue;
queue.display(); //@ 显示“Queue is empty”
int array[10]={0,1,2,3,4,5,6,7,8,9};
int num;
queue.push(array,sizeof(array)/4,&num);//@ 将数组压入队列
printf("pushed %d elements into the queue\n",num);
array[5]=4;array[4]=5; //@ 改变了一下数组元素的值
queue.push(array,sizeof(array)/4,&num); //@ 将数组压入队列
printf("pushed %d elements into the queue\n",num);
queue.display();//@ 显示队列中的所有元素
return 0;
}
展开全部
1、栈和队列都可以用数组实现,也都可以用链表实现。广义上讲栈也是队列。这二者都是一种顺序表结构。栈又叫先进后出队列,也可称作后进先出队列,队列又叫先进先出队列。这二者统称单进单出队列。
2、例程:
/**
*将数组入队,可以看成是一次将若干数据入队
*
*将队列的操作写成一个类
*
*闲着没事写的,可能有问题,影响应该不大
**/
#include <iostream>
using namespace std;
#define QUEUE_SIZE 100 //@ 队列大小
enum QueueError{
QueueError_Ok, //@ 成功
QueueError_Empty, //@ 为空
QueueError_Full, //@ 已满
QueueError_Overflow,//@ 上溢出(比如队尾指针已到顶端继续入队将产生此错误)
};
//@ 队列类
class CQueue
{
public:
CQueue(); //@ 构造函数
QueueError push(int element); //@ 入队(一次添加一个元素)
QueueError push(int *p_array,int len,int *p_num); //@ 入队(一次添加一个数组)
QueueError pop(int *p_element); //@ 出队
void display(); //@ 显示所有队列元素
int get_front(); //@ 获取队首指针
private:
int front; //@ 队头指针
int rear; //@ 队尾指针
int data[QUEUE_SIZE]; //@ 队列数据
};
//@ 构造函数
CQueue::CQueue(){
front=rear=0;//@ 将队列初始化为空
}
//@ 入队
QueueError CQueue::push(int element)
{
if(rear>=QUEUE_SIZE) return QueueError_Overflow;
data[rear]=element;
rear++;
return QueueError_Ok;
}
//@ 入队(一次添加一个数组)
//@ 如果队列不够容纳整个数组,容纳不下的部分将忽略
//@ p_array:指向要入队的数据的指针
//@ len:要入队的数据数量
//@ p_num:已入队的数据数量
QueueError CQueue::push(int *p_array,int len,int *p_num)
{
if(rear>=QUEUE_SIZE) return QueueError_Overflow;
int i=0;
for(i;i<len&&rear<QUEUE_SIZE;i++)
{
//@ 数组元素入队
data[rear]=p_array[i];
rear++;
}
*p_num=i;
return QueueError_Ok;
}
//@ 出队
//@ p_element:用来获取出队的元素值
QueueError CQueue::pop(int *p_element)
{
if(front==rear) return QueueError_Empty;
*p_element=data[front];
front++;
return QueueError_Ok;
}
//@ 显示所有队列元素
void CQueue::display()
{
if(rear==front){
cout<<"Queue is empty\n";
return;
}
for(int i=front;i<rear;i++)
cout<<data[i]<<' ';
cout<<endl;
}
//@ 获取队列的队首指针
int CQueue::get_front()
{
return front;
}
int main(int argc, char *argv[])
{
CQueue queue;
queue.display(); //@ 显示“Queue is empty”
int array[10]={0,1,2,3,4,5,6,7,8,9};
int num;
queue.push(array,sizeof(array)/4,&num);//@ 将数组压入队列
printf("pushed %d elements into the queue\n",num);
array[5]=4;array[4]=5; //@ 改变了一下数组元素的值
queue.push(array,sizeof(array)/4,&num); //@ 将数组压入队列
printf("pushed %d elements into the queue\n",num);
queue.display();//@ 显示队列中的所有元素
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
struct node
{
int x[SIZE];
};
queue<node> Q;
{
int x[SIZE];
};
queue<node> Q;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询