百度
360搜索
搜狗搜索

queue c++,关于C语言队列的问题帮我修改一下啊详细介绍

本文目录一览: c++如何查看queue里面的函数原型

概念:queue是一种先进先出的数据结构。一端插入数据,一端移出数据。
队头:出队 pop
队尾:入队 push
只有队头队尾数据能被访问,不允许有遍历行为
在这里插入图片描述
二、基本接口
①构造函数
函数原型
queue

que; //queue采用模板类实现,queue对象的默认构造形式

queue
<const queue &que); 拷贝构造函数
1

2

1

2

②赋值操作

函数原型

queue& operator=(const queue &que); //重载等号操作符

1

1

③数据存取

函数原型

push(elem); //往队尾添加元素

pop(); //从队头移除第一个元素

back(); //返回最后一个元素

front(); //返回第一个元素

1

2

3

4

1

2

3

4

④大小操作

函数原型

queue

queue是STL中现成的队列容器,我们只需要了解他的相关函数及使用方法,即可很方便的帮助我们使用队列这个数据结构。

1.头文件:

#include < queue >

2.变量声明:

queue < 数据类型 >变量名

例queue < int >a; 即声明了一个int型的队列a

同理,也可声明queue < string > b; queue < struct node > c;

3.相关函数:

(1)q.push(x) :即向队列q的队尾插入数据x

#include

queue

q;

q.push(5);

cout << q.front() << endl;

1

2

3

1

2

3

(2)q.front():此函数没有参数,是指返回队首的值(只返回此值,并不从队中删除)

queue

q;

q.push("hello");

q.push("world");

cout << q.front() << endl;

1

2

3

1

2

3

(3)q.pop():此函数没有参数,指删除队首元素

queue

q;

q.push(5.3);

q.push(8);

cout << q.front() << '\n';

q.pop();

cout << q.front() << '\n';

1

2

3

4

5

6

1

2

3

4

5

6

(4)q.back():此函数没有参数,返回队尾元素的值

queue

q;

q.push(5.3);

q.push(8);

cout << q.back() << endl;

1

2

3

1

2

3

(5)q.empty():此函数没有参数,判断队列是否为空,若队空,则返回真(1)

queue

q;

cout << q.empty() << endl;

q.push("3");

cout << q.empty() << endl;

1

2

3

1

2

3

(6)q.size():此函数没有参数,返回队列元素个数

queue

q;

q.push(5.3);

q.push(8);

cout << q.size() << '\n';

1

2

3

4

1

2

3

4

二、priority_queue

C语言中,队列是什么意思,有什么用途

其主要特点是先进先出,恐怕最主要的是消息队列吧、、、期待下楼有长篇专门介绍的~~~~
队列是一种特殊的线性表。
队列一种可以实现“先进先出”的存储结构,即“一端入,一端出”,队首(front)出队,队尾(rear)入队,若front指向队首,则rear指向队尾最后一个有效元素的下一个元素;若rear指向队尾,则front指向队首第一个有效元素的下一个元素。
队列特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
扩展资料
循环队列各个参数的含义
1、队列初始化front和rear的值都是零,初始化时队列就是空的。
2、队列非空front代表队列的第一个元素rear代表了最后一个有效元素的下一个元素。
3、队列空front和rear的值相等,但是不一定是零。
参考资料来源:百度百科—队列

C语言和queue有关的指令

#include

// malloc, free

#include "queue.h"

struct queue * queue_create(void)

{

struct queue *q = (struct queue *)malloc(sizeof(struct queue));

if (q == NULL) { // malloc failed

return NULL;

}

q->head = dnode_create();

q->tail = dnode_create();

q->head->next = q->tail;

q->tail->prev = q->head;

q->size = 0;

return q;

}

void queue_destroy(struct queue *q)

{

if (q != NULL) {

while (!queue_isempty(q)) {

queue_dequeue(q);

}

dnode_destroy(q->head);

dnode_destroy(q->tail);

free(q);

q = NULL;

}

}

int queue_front(const struct queue * const q)

{

return q->tail->prev->data;

}

void queue_enqueue(struct queue * const q, const int e)

{

struct dnode *dn = dnode_create();

dn->data = e;

struct dnode *tmp = q->head->next;

q->head->next = dn;

dn->prev = q->head;

dn->next = tmp;

tmp->prev = dn;

q->size += 1;

}

int queue_dequeue(struct queue * const q)

{

struct dnode *dn = q->tail->prev;

struct dnode *tmp = dn->prev;

tmp->next = q->tail;

q->tail->prev = tmp;

int ret = dn->data;

dnode_destroy(dn);

q->size -= 1;

return ret;

}

int queue_size(const struct queue * const q)

{

return q->size;

}

int queue_isempty(const struct queue * const q)

{

return q->size > 0 ? 0 : 1;

}

//////////////////////

static void bubble_sort(int * const a, const int n)

{

int swapped = 1;

while (swapped) {

swapped = 0;

for (int i = 1; i < n; i++) {

if (a[i] < a[i - 1]) {

int tmp = a[i];

a[i] = a[i - 1];

a[i - 1] = tmp;

swapped = 1;

}

}

}

}

阅读更多 >>>  division游戏,全境封锁到底大小是多少G

C语言中链表与队列有什么区别?

C语言的链表与队列是两种不同的概念:
链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;队列是一种数据结构,其特点是先进先出,后进后出;
队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。
SQQUEUE的第一个元素elemtype *elem;其实是指向了一个数组,该数组中存储着类型为elemtype的元素,然后front和rear就标识了队首和队尾元素对应的数组下标。typedef struct _Point{int x,y;}Point;#defineelemtype Point//这个elemtype可以是任意你自己定义的结构,可以是结构体,也可以是简单数据类型elemtype array[10]={0};//这个是队列的数据结构,在这里是一个Point数组SQQUEUE queue={0};queue.elem=array;//这样array中的元素就是queue中的元素了。queue.front=queue.rear=queue.size=0;

C语言 用单链表实现队列

网络答案,已验证:
#include

#include

struct Node

{

int data; /*值域*/

struct Node *next; /*链接指针*/

};

struct queue

{

struct Node *front; /*队首指针*/

struct Node *rear; /*队尾指针*/

};

/*初始化链队*/

void initQueue(struct queue *hq)

{

hq->front=hq->rear=NULL; /*把队首和队尾指针置空*/

}

/*向链队中插入一个元素x*/

void inQueue(struct queue *hq, int x)

{

struct Node *newNode; /*得到一个由newNode指针所指向的新结点*/

newNode=malloc(sizeof(struct Node));

if(newNode==NULL)

{

printf("内存空间分配失败! ");

exit(1);

}

newNode->data=x; /*把x的值赋给新结点的值域*/

newNode->next=NULL; /*把新结点的指针域置空*/

/*若链队为空,则新结点即是队首结点又是队尾结点*/

if(hq->rear==NULL)

{

hq->front=hq->rear=newNode;

}else

{

/*若链队非空,则依次修改队尾结点的指针域和队尾指针,使之指向新的队尾结点*/

hq->rear=hq->rear->next=newNode;

}

//return;

}

/*从队列中删除一个元素*/

int delQueue(struct queue*hq)

{

struct Node*p;

int temp;

/*若链队为空则停止运行*/

if(hq->front==NULL)

{

printf("队列为空,无法删除! ");

exit(1);

}

temp=hq->front->data;

/*暂存队首元素以便返回*/

p=hq->front;

/*暂存队首指针以便回收队尾结点*/

hq->front=p->next; /*使队首指针指向下一个结点*/

/*若删除后链队为空,则需同时使队尾指针为空*/

if(hq->front==NULL)

{

hq->rear=NULL;

}

free(p); /*回收原队首结点*/

return temp; /*返回被删除的队首元素值*/

}

/*读取队首元素*/

int peekQueue(struct queue *hq)

{ /*若链队为空则停止运行*/

if(hq->front==NULL)

{

printf("队列为空,无法删除! ");

exit(1);

}

return hq->front->data; /*返回队首元素*/

}

/*检查链队是否为空,若为空则返回1,否则返回0*/

int emptyQueue(struct queue *hq)

{

/*判断队首或队尾任一个指针是否为空即可*/

if(hq->front==NULL)

{

return 1;

}else

{

return 0;

}

}

/*清除链队中的所有元素*/

void clearQueue(struct queue *hq)

{

struct Node *p=hq->front; /*队首指针赋给p*/

/*依次删除队列中的每一个结点,最后使队首指针为空*/

while(p!=NULL)

{

hq->front=hq->front->next;

free(p);

p=hq->front;

}

/*循环结束后队首指针已经为空*/

hq->rear=NULL; /*置队尾指针为空*/

return;

}

int main(int argc,char *argv[])

{

struct queue q;

int a[8]={3,8,5,17,9,30,15,22};

int i;

initQueue(&q);

for(i=0;i<8;i++)

{

inQueue(&q,a[i]);

}

printf("delnode is %d\n",delQueue(&q));

printf("delnode is %d\n",delQueue(&q));

inQueue(&q,68);

printf("peeknode is %d\n",peekQueue(&q));

while(!emptyQueue(&q))

{

printf("%d\n",delQueue(&q));

}

clearQueue(&q);

}

C语言queue如何加锁和解锁

有两种办法:
重载一个queue模板,把锁封装到重载的函数里
每次使用queue的函数的时候加锁,使用完毕后,解锁

C语言用数组实现循环队列的入队出队

#include

#include "Item.h"static Item *q;static int N, head, tail;void QUEUEinit(int maxN){ q = (Item *)malloc((maxN+1)*sizeof(Item)); N = maxN+1; head = N; tail = 0;}int QUEUEempty(){ return (head%N == tail);}void QUEUEput(Item item){ q[tail++] = item; tail = tail%N;}Item QUEUEget(){ head = head %N; return q[head++];}

#include "stdafx.h"

#include

#define N 200 //预设队列大小

int queue[N];

int flag=0; //队列标识 0为不存在,1为存在

int front=0,rear=0; //队列头,队列尾

void creat() //创建队列

{

if(flag==1)

{printf("队列已经存在。");}

else

{

for(int i=0;i<6;i++)

{

printf("输入初始化的第%d数:",i);

scanf("%d",&(queue[i]));

}

rear=5; flag=1;

}

}

void enqueue() //进队列

{

if(flag==0)

{printf("当前还没有队列,请先创建队列:");}

else

{

printf("输入进入队列的元素:");

scanf("%d",&queue[rear+1]);

rear++;

}

}

void gethead() //出队列

{

if(flag==0)

{printf("当前还没有队列,请先创建队列:");}

else

{

printf("出队列的元素:%d",queue[front]);

front++;

printf("\n出列后的队列为:");

for(int i=front;i<=rear;i++)

{printf("%d ",queue[i]);}

}

}

void print() //打印当前队列

{

printf("\n当前队列为:");

for(int i=0;i<=rear;i++)

{

printf("%d ",queue[i]);

}

}

int main()

{

int servse=-1; //服务标识

while(servse!=0)

{

printf("\n1.创建队列\n");

printf("2.元素进队\n");

printf("3.元素出列\n");

printf("4.打印队列\n");

printf("0.退出\n");

printf("选择:");

scanf("%d",&servse);

switch(servse)

{

case 1:creat();break;

case 2:enqueue();break;

case 3:gethead();break;

case 4:print();break;

case 0:return 0;break;

}

}

}

08-12-27 | 添加评论

0

xingzhenlive

你说的是冒泡法排序吧?这个你直接上资源吧里面去吧他里面有提供详细的源代码的!不好意思我就不给你找了!非常抱歉~!

08-12-27 | 添加评论

0

htj1192

#include "stdafx.h"

#include

阅读更多 >>>  queuec++使用,c++ queue emplace

#define N 200 //预设队列大小

int queue[N];

int flag=0; //队列标识 0为不存在,1为存在

int front=0,rear=0; //队列头,队列尾

void creat() //创建队列

08-12-27 | 添加评论

0

tj568738985

/*顺序队的基本操作*/

#include

#define MaxSize 100

typedef char ElemType;

typedef struct

{

ElemType queue[MaxSize];

int front,rear;

} queuetype;

void initqueue(queuetype *Q)

{

Q->front=Q->rear=-1;

}

void enter(queuetype *Q,ElemType x)

{

if (Q->rear==MaxSize) printf("队列上溢出!\n");

else

{

Q->rear++; /*队尾指针后移*/

Q->queue[Q->rear]=x; /*新元素赋给队尾单元*/

}

}

void delete(queuetype *Q)

{

if (Q->front==Q->rear)

printf("队列为空!\n");

else

Q->front++;

}

ElemType gethead(queuetype *Q)

{

if (Q->front==Q->rear)

printf("队列为空!\n");

else

return(Q->queue[Q->front+1]);

}

int empty(queuetype *Q)

{

if (Q->front==Q->rear) return(1); /*为空,则返回true*/

else return(0); /*不为空,则返回flase*/

}

void display(queuetype *Q)

{

int i;

printf("队列元素:");

for (i=Q->front+1;i<=Q->rear;i++)

printf("%c ",Q->queue[i]);

printf("\n");

}

main()

{

queuetype *qu;

printf("初始化队列qu\n");

initqueue(qu);

printf("队列空:%d\n",empty(qu));

printf("依次入队a,b,c,d元素\n");

enter(qu,'a');

enter(qu,'b');

enter(qu,'c');

enter(qu,'d');

display(qu);

printf("出队一次\n");

delete(qu);

printf("队首元素:%c\n",gethead(qu));

printf("出队一次\n");

delete(qu);

display(qu);

}

//定义一个int型数组que,长度为N(常量切大于2).int que[N];int rear=0,front=0; //队尾 队头判断队列已满:

if((front+1)%N==rear%N) //成立则队列已满判断队列为空

if((rear==front)) //成立则队列空入队(一般在入队前判断队列是否已满)

//将val入队que[front++]=val;front%=N;出队(一般在出队前判断队列是否为空)

rear=(rear+1)%N;下一个要出队的元素(一般先判断是否为空)

que[rear];

关于C语言队列的问题帮我修改一下啊

#include

#include

#define Queuesize 100

typedef int DataType;

typedef struct

{

int front,rear,count;

DataType data[Queuesize];

}CirQueue;

void InitQueue(CirQueue *Q)

{

Q->front=Q->rear=0;

Q->count=0;

}

int QueueFull(CirQueue *Q)

{

return Q->count==Queuesize;

}

void EnQueue(CirQueue *Q,DataType x)

{

if(QueueFull(Q))

printf("Queue overflow");

else

{

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)%Queuesize;

}

}

void main()

{

int i,j,a[100],x;

CirQueue q1,q2;

InitQueue(&q1);

InitQueue(&q2);

i=j=0; //没有初始化i 和j

for(x=0;x<5;x++)

{

scanf("%d",&a[x]);

if(a[x]%2==1)

{

EnQueue(&q1,a[x]);

i++;

}

else

{

EnQueue(&q2,a[x]);

j++;

}

}

printf("%d,%d\n",i,j);

}

#include

#include

#include

#define Queuesize 100

typedef int DataType;

typedef struct

{

int front,rear,count;

DataType data[Queuesize];

}CirQueue;

void InitQueue(CirQueue *Q)

{

Q->front=Q->rear=0;

Q->count=0;

}

int QueueFull(CirQueue *Q)

{

return Q->count==Queuesize;

}

void EnQueue(CirQueue *Q,DataType x)

{

if(QueueFull(Q))

printf("Queue overflow");

else

{

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)%Queuesize;

}

}

void main()

{

int i=0,j=0,n,a[100],x;

CirQueue q1,q2;

InitQueue(&q1);

InitQueue(&q2);

printf("Input the max:");

scanf("%d",&n);

printf("input the data:");

for(x=0;x
<n;x++)
{

scanf("%d",&a[x]);

if(a[x]%2==1)

{

EnQueue(&q1,a[x]);

i++;

}

else

{

EnQueue(&q2,a[x]);

j++;

}

}

printf("%d,%d\n",i,j);

}

C语言,用数组实现队列的入队,出队函数编程

for(i=0; i < 9; i++)
a[i] = a[i+1];
a[i] = ...;
你得像这样正向移
这样的话应该符合你的要求:
#include

void add(int queue[],int x);int Top(int queue[]);void del(int queue[]);int end=0;int main(){ int n; scanf("%d",&n);//将要入队列n个元素 int queue[1000]; for(int i=1;i<=n;i++)//输入n个元素 { add(queue,i);//将i加入队列 } //验证加入队列的元素,将队列中的元素按照输入的顺序输出: for( i=1;i<=n;i++) { printf("%d ",Top(queue));//Top函数返回队头元素 del(queue);//删除队头元素 } //验证输出已经出队列后的队列(数组)元素: printf("\n"); for(i=1;i<=n;i++) printf("%d ",queue[i]); printf("\n"); return 0;}void add(int queue[],int x){ queue[++end]=x;}int Top(int queue[]){ return queue[1];//注意,这里的函数始终return queue[1];这里是和将普通数组中的元素输出最大的不同之处。!!!!!!}void del(int queue[]){ for(int i=2;i<=end;i++) { queue[i-1]=queue[i]; } queue[end]=0;//将删除后的地方置0 end--;}

阅读更多 >>>  queue是什么意思

C语言中使用队列

queue.h是LINUX/UNIX系统下面的一个标准头文件,用一系列的数据结构定义了一队列。包括singly-lined list, list, simple queue(Singly-linked Tail queue), tail queue, circle queue五种。我目测你是windows下面的编译器,没有这个头文件很正常。再说你去include目录下搜一下就知道有没有这个头文件了。
C语言木有自带的队列,需要自己实现或者用第三方库。
C++自带!

是C++ 的 STL库,C语言是没有的

如果你用vc,#include

就好了,但是注意要加上using naemspace std;

我是当你用的c++的STL,STL中没有真正的队列和栈,他们都是通过对双端队列的改造得到的,所以包含的文件可能和你想的不一样。而且这些头文件都没有.h结尾!很特别

如果你不是vc,当我没说

网站数据信息

"queue c++,关于C语言队列的问题帮我修改一下啊"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:queue c++,关于C语言队列的问题帮我修改一下啊的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!