Queue队列容器
Queue队列容器是一个先进先出的线性存储表,元素的插入只能在队尾,元素的删除只能在队首。
使用Queue需要声明头文件“#include
push():入队,即插入元素
pop():出队,即删除元素
front():读取队首元素
back():读取队尾元素
empty():判断队列是否为空
使用示例:
#include <queue>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
//定义队列
queue<int> q;
//入队,即插入元素
q.push(1);
q.push(2);
q.push(3);
q.push(9);
//返回队例元素数量
cout<<q.size()<<endl;
//判断队列是否为空
cout<<q.empty()<<endl;
//读取队首元素
cout<<q.front()<<endl;
//读取队尾元素
cout<<q.back()<<endl;
//所有元素出列,即删除所有元素
while(q.empty()!=true)
{
cout<<q.front()<<" ";
//删除队首元素
q.pop();
}
cout<<endl;
system("pause");
return 0;
}
c语言写的队列的代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//定义队列
typedef struct node{
int data;
struct node *next;
}Queue;
//定义队首指针和队尾指针
typedef struct pointer{
Queue *front;//队首指针,队首指针不存放队列元素
Queue *rear;//队尾指针,存放队尾的数据元素
}Qpointer;
//队列初始化
void QueueInit(Qpointer *qp)
{
Queue *que;
que=(Queue *)malloc(sizeof(Queue));
que->next=NULL;
//队首和队尾指向同一个内存空间,指针域为NULL
qp->front=que;
qp->rear=que;
}
//判断队列是否为空:为空返回 1,否则返回 0
int IsEmpty(Qpointer *qp)
{
//判断方法:队首指针和队尾指针是否相同
if(qp->front==qp->rear)
{
return 1;
}
return 0;
}
//插入数据元素:插入成功返回 1,否则返回 0
int QueuePush(Qpointer *qp,int element)
{
Queue *que;
que=(Queue *)malloc(sizeof(Queue));
if(que==NULL)
return 0;
que->data=element;
que->next=NULL;
qp->rear->next=que;//将节点插入队列尾
qp->rear=que;//调整队尾指针
return 0;
}
//删除数据元素:删除成功返回 1,否则返回 0
int QueuePop(Qpointer *qp,int *element)
{
Queue *que;
if(IsEmpty(qp))
return 0;
que=qp->front->next;//que指向队头节点的下一节点,即真正的队首
*element=que->data;//将要出队的元素
qp->front->next=que->next;
//判断队列是否就只剩下一个元素
if(qp->rear==que)
qp->rear=qp->front;
free(que);
return 1;
}
int main()
{
Qpointer *qp;
int x,n;
//初始化队列
qp=(Qpointer *)malloc(sizeof(Qpointer));
QueueInit(qp);
printf("input a positive integer n:\n");
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
QueuePush(qp,x);
}
//输出队列:队首->队尾
Queue *p=qp->front->next;
if(p==NULL)
return 0;
printf("queue element:\n");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
//删除队列
printf("delete queue:\n");
while(QueuePop(qp,&x))
{
printf("%d ",x);
}
printf("\n");
//释放内存空间
p=qp->front;
free(p);
free(qp);
system("pause");
return 0;
}