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++)。 展开
 我来答
qiminixi
2013-12-02 · TA获得超过819个赞
知道小有建树答主
回答量:552
采纳率:0%
帮助的人:239万
展开全部
/**
 *将数组入队,可以看成是一次将若干数据入队 
 *
 *将队列的操作写成一个类 
 *
 *闲着没事写的,可能有问题,影响应该不大 
**/


#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;
}
tattackor
推荐于2018-03-26 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:888万
展开全部

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;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sonyejin_11
2014-03-06
知道答主
回答量:4
采纳率:0%
帮助的人:4.6万
展开全部
struct node
{
int x[SIZE];

};
queue<node> Q;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式