链式队列的基本操作实现c++

注:若有错误或需要补充的内容请告知,新手上路,谢谢。

#include<stdlib.h>
#include<stdio.h>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<ctype.h>
using namespace std;

/*************结构体*************/
/*链式队列*/
typedef struct qnode
{
    int data;
    struct qnode *next;
}qnode;
typedef struct
{
    qnode *front_,*rear_;
}linkqueue;
/***************基本操作*****************/
/*初始化*/
linkqueue *init_queue()
{
    linkqueue *q;
    q=(linkqueue*)malloc((sizeof(linkqueue)));
    q->front_=(qnode*)malloc(sizeof(qnode));
    q->front_->next=NULL;                   //带对头结点
    q->rear_=q->front_;
    return q;
}
/*判断队空*/
bool is_empty_linkqueue(linkqueue q)
{
    if(q.front_==q.rear_)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*入队*/
void enqueue(linkqueue *q,int e)
{
    qnode *s;
    s=(qnode*)malloc(sizeof(qnode));
    s->data=e;
    s->next=NULL;
    q->rear_->next=s;
    q->rear_=s;
}
/*出队*/
void dequeue(linkqueue *q,int &e)
{
    if(is_empty_linkqueue(*q))
    {
        printf("队空\n");
    }
    else
    {
        qnode *s;
        s=q->front_->next;
        e=s->data;
        q->front_->next=s->next;
        if(q->rear_==s)  //只有一个元素
        {
            q->rear_=q->front_;
        }
        free(s);
    }
}
/*销毁队列*/
void delete_linkqueue(linkqueue *q)
{
    qnode *s;
    while(!is_empty_linkqueue(*q))
    {
        s=q->front_->next;
        q->front_->next=s->next;
        if(q->rear_==s)  //只有一个元素
        {
            q->rear_=q->front_;
        }
        free(s);
    }
    printf("队列销毁成功\n");
}
int main()
{
    int l,e;
    linkqueue *s;
    s=init_queue();
    printf("请输入需要入队的元素个数:");
    scanf("%d",&l);
    printf("请依次输入入队的元素:");
    for(;l>0;l--)
    {
        scanf("%d",&e);
        enqueue(s,e);
    }
    //delete_linkqueue(s);
    printf("依次出队的元素为:");
    while(!is_empty_linkqueue(*s))
    {
        dequeue(s,e);
        printf("%d",e);
    }
    printf("\n");
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值