队列的学习(2)

本文详细介绍了链队列的基本概念、存储结构及其核心操作的实现方法,包括初始化、入队、出队和销毁等,并通过一个简单的C语言程序演示了如何进行链队列的输入输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列的实现上我们更愿意使用链式存储,这点与栈有所不同。

链队列的结构为:

//链队列的存储结构为:
typedef struct Node  //节点的结构
{
    int data;
    struct Node *next;
}QNode;

typedef struct//链队列的结构
{
    QNOde *front,*rear;  //队头,队尾指针
}Linkqueue;

链队列的初始化:

void initlinkqueue(Linkqueue *q)
{
    q->front=q->rear=(QNode *)malloc(sizeof(QNode));
    if(!q->front)
        exit(0);
    q->front->next=NULL;
}
入队列操作

//入队列操作

void insertqueue(Linkqueue *q,int e)
{
    QNode *p;
    p=(QNode *)malloc(sizeof(QNode));
    if(!p)
    {
        exit(0);
    }
    p->data=e;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
}
出队列操作:

void dequeue(Linkqueue *q,int *e)
{
    QNode *p;
    if(q->front==q->rear)
    {
        exit(0);
    }
    p=q->front->next;
    *e=p->data;
    q->front->next=p->next;
    
    if(q->rear==p)  //如果队列中只有一个元素,此时p就是玮指针,删掉这个元素之后需要将尾指针指向头节点;
        q->rear=q->front;
        
    free(p);
}
销毁一个队列
//销毁一个队列

void destoryqueue(Linkqueue *q)
{
    while(q->front)
    {
        q->rear=q->front->next;
        free(q->front);
        q->front=q->rear;
    }
}

实现输入输出功能:

//链队列的存储结构为:
typedef struct Node  //节点的结构
{
    int data;
    struct Node *next;
}QNode;

typedef struct//链队列的结构
{
    QNode *front,*rear;  //队头,队尾指针
}Linkqueue;

//链队列的初始化

void initlinkqueue(Linkqueue *q)
{
    q->front=q->rear=(QNode *)malloc(sizeof(QNode));
    if(!q->front)
        exit(0);
    q->front->next=NULL;
}

//入队列操作

void insertqueue(Linkqueue *q,int e)
{
    QNode *p;
    p=(QNode *)malloc(sizeof(QNode));
    if(!p)
    {
        exit(0);
    }
    p->data=e;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
}

//出队列操作:将队列中的第一个元素移出,队头指针不发生改变,改变头节点的next指针即可
void dequeue(Linkqueue *q,int *e)
{
    QNode *p;
    if(q->front==q->rear)
    {
        exit(0);
    }
    p=q->front->next;
    *e=p->data;
    q->front->next=p->next;

    if(q->rear==p)  //如果队列中只有一个元素,删删掉这个元素之后需要将尾指针指向头节点;
        q->rear=q->front;

    free(p);
}

//销毁一个队列

void destoryqueue(Linkqueue *q)
{
    while(q->front)
    {
        q->rear=q->front->next;
        free(q->front);
        q->front=q->rear;
    }
}


int main()
{
    Linkqueue q;
    initlinkqueue(&q);
    int x,e;
    scanf("%d",&x);
    while(x!=10)
    {
        insertqueue(&q,x);
        scanf("%d",&x);
        dequeue(&q,&e);
        printf("%d\n",e);
    }
   destoryqueue(&q);
    return 0;

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值