c++如何将数组压入队列中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++如何将数组压入队列中相关的知识,希望对你有一定的参考价值。

有一个数组x,一个队列queue,数组x中有若干元素(如x[0],x[1])。我想把整个数组x看作一个结点,将其压入队列queue中,然后变动数组x中的元素(如x[0]+1,x[1]),再将这个变动的数组压入(push(x))队列queue中。然后弹出(x=front(),pop()),具体要怎么实现(c++)。

/**
 *将数组入队,可以看成是一次将若干数据入队 
 *
 *将队列的操作写成一个类 
 *
 *闲着没事写的,可能有问题,影响应该不大 
**/


#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;

参考技术A

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;

参考技术B struct node

int x[SIZE];

;
queue<node> Q;

如何将数组 json 列中的值提取到 Postgresql 中的多行中?

【中文标题】如何将数组 json 列中的值提取到 Postgresql 中的多行中?【英文标题】:How to extract values from array json column into multiple rows in Postgresql? 【发布时间】:2021-02-11 23:09:53 【问题描述】:

如何从 ranges 列中的 json 数组中提取值作为多行 Postgresq?

CREATE TABLE test_table (
  id INTEGER, 
  ranges jsonb
);

INSERT INTO test_table(id, ranges) VALUES
(1,'["End": 100, "Start": 1, "End": 1000, "Start": 101]'),
(2,'["End": 2000, "Start": 1001, "End": 2002, "Start": 2001]')
;

预期结果:

Start End
1 100
101 1000
1001 2000
2001 2002

【问题讨论】:

【参考方案1】:

您可以为此使用jsonb_to_recordset 函数:

SELECT ranges."Start",
       ranges."End"
FROM   test_table,
       jsonb_to_recordset(test_table.ranges) AS ranges("End" int, "Start" int)

http://www.sqlfiddle.com/#!17/22d62/10

【讨论】:

以上是关于c++如何将数组压入队列中的主要内容,如果未能解决你的问题,请参考以下文章

勇士出征[HUST 1439]

搜索:A*

搜索:A*

java数据结构与算法之二叉树深度优先和广度优先遍历

如何将数组公式复制到 Calc 的列中?

如何将队列改为数组急求,如果好的话会追加