【队列】-队列的链式存储方式-LinkQueue

/**************************
队列的链式存储结构

功能代码包含:
1)队列的链式存储结构的数据结构定义
2)初始化链式队列
3)往链式队列中插入元素--入队
4)删除链式队列中的元素--出队

注意:代码不进行debug,只实现基本功能

Author:tmw
date:2018-3-9
**************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define error -65530

/**队列的链式存储结构的数据结构定义**/
typedef struct LinkQueueNode
{
    int data;
    struct LinkQueueNode *next;
}LinkQueueNode,*LinkQueuePtr;

typedef struct LinkQueue
{
    LinkQueuePtr front;
    LinkQueuePtr rear;
    int len;
}LinkQueue;

/**初始化链式队列**/
bool initLinkQueue( LinkQueue *Q )
{
    Q = (LinkQueue*)malloc(sizeof(LinkQueue));
    if( !Q )
        return false;

    /**让队头等于队尾**/
    Q->front = Q->rear = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));

    /**队尾的next指针指向null**/
    Q->rear->next = NULL;

    /**队头的next指针指向队尾**/
    Q->front->next = Q->rear;

    /**初始化队长为0**/
    Q->len = 0;

    return true;
}

/**往链式队列中插入元素e--入队**/
bool EnQueue( LinkQueue *Q, int e )
{
    /**链式存储不用考虑队列是否满的问题**/
    LinkQueuePtr p;
    p = (LinkQueuePtr)malloc(sizeof(LinkQueueNode));
    if(!p)
        return false;

    p->data = e;
    p->next = Q->rear->next; //即p->next = NULL
    Q->rear->next = p;
    Q->rear = p;

    Q->len++;
    return true;
}

/**删除链式队列中的元素--出队,并返回出队元素**/
int DeQueue( LinkQueue *Q )
{
    /**出队前判断:队列不能为空**/
    if( Q->front == Q->rear )
        return error;

    LinkQueuePtr p;
    p = Q->front->next;

    int e = p->data;

    Q->front->next = p->next;

    if( p == Q->rear )//删除该元素后,队列就空了
        Q->rear = Q->front;

    free(p);
    Q->len--;

    return e;
}

 

梦想还是要有的,万一实现了呢~~~ヾ(◍°∇°◍)ノ゙

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言实现队列链式存储是通过使用链表来表示队列数据结构。在给定的代码中,linkqueue.h头文件中定义了队列的结构体和相关操作的函数声明。在main函数中,先调用InitQueue函数初始化队列,然后使用EnQueue函数将数组元素逐个入队。使用GetHead函数获取队列头部元素,并使用QueueLength函数获取队列的长度。接下来使用循环和DeQueue函数将队列元素逐个出队并打印出来。最后返回0表示程序执行成功。 在linkqueue.h文件中,InitQueue函数用于初始化队列,即生成新的结点作为头节点,并让头尾指针指向它。EnQueue函数用于将元素入队,在队尾添加新的结点。 DeQueue函数用于将队头元素出队,并将出队的元素返回给调用者。同时需要注意更新队尾指针的位置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据结构(C语言版)严蔚敏->队列的顺序存储(循环队列)和链式存储](https://blog.csdn.net/qq_45404396/article/details/125662517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [队列链式存储(C语言实现)](https://blog.csdn.net/weixin_46272577/article/details/111287996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值