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

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

猜你喜欢

转载自blog.csdn.net/qiki_tangmingwei/article/details/79500613