STL 队列

Queue队列容器

Queue队列容器是一个先进先出的线性存储表,元素的插入只能在队尾,元素的删除只能在队首。

使用Queue需要声明头文件“#include <queue>

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值