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++如何将数组压入队列中的主要内容,如果未能解决你的问题,请参考以下文章