【队列】-队列的链式存储方式-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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值