`

LinkQueue——链式队列

 
阅读更多

链式队列实现起来很简单。

唯一需要注意的是:

在入队和出队时,需要分别处理一下队头和队尾为空的情况。

/*
** File name: LinkQueue.h
** Author: ZhouFeng
** Date: 2012/03/28
*/
#ifndef LINK_QUEUE_H
#define LINK_QUEUE_H

#define BOOL int
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define SUCCESS 1

typedef int EleType;
typedef struct LQNode
{
    EleType data;
    struct LQNode *pNext;
}LQNode;
typedef struct LinkQueue
{
    LQNode *pFront;
    LQNode *pRear;
}LinkQueue;

void InitLinkQueue(LinkQueue *LQ);
BOOL IsLinkQueueEmpty(LinkQueue *LQ);
int LinkQueueAppend(LinkQueue *LQ, EleType data);
int LinkQueueDelete(LinkQueue *LQ, EleType *pData);
int GetQueue(LinkQueue *LQ, EleType *pData);
void FreeQueue(LinkQueue *LQ);

#endif


/*
** File name: LinkQueue.c
** Author: ZhouFeng
** Date: 2012/03/28
*/
#include <stdlib.h>
#include <stddef.h>
#include "LinkQueue.h"

void InitLinkQueue(LinkQueue *LQ)
{
    if(LQ == NULL)
    {
	return;
    }

    LQ->pFront = NULL;
    LQ->pRear = NULL;
}

BOOL IsLinkQueueEmpty(LinkQueue *LQ)
{
    if(LQ == NULL)
    {
	return TRUE;
    }

    if(LQ->pFront == NULL)
    {
	return TRUE;
    }
    else
    {
	return FALSE;
    }
}

int LinkQueueAppend(LinkQueue *LQ, EleType data)
{
    LQNode *pNewNode;
    
    if(LQ == NULL)
    {
	return ERROR;
    }

    pNewNode = (LQNode*)malloc(sizeof(LQNode));
    pNewNode->data = data;
    pNewNode->pNext = NULL;
    
    if(LQ->pRear != NULL)
    {
	LQ->pRear->pNext = pNewNode;
    }
    LQ->pRear = pNewNode;

    if(LQ->pFront == NULL)
    {
	LQ->pFront = pNewNode;
    }

    return SUCCESS;
}

int LinkQueueDelete(LinkQueue *LQ, EleType *data)
{
    LQNode *pDel;
    
    if(LQ == NULL || data == NULL)
    {
	return ERROR;
    }

    if(LQ->pFront == NULL)
    {
	return ERROR;
    }

    *data = LQ->pFront->data;
    pDel = LQ->pFront;
    LQ->pFront = LQ->pFront->pNext;

    if(LQ->pFront == NULL)
    {
	LQ->pRear = NULL;
    }
    free(pDel);

    return SUCCESS;
}

int GetQueue(LinkQueue *LQ, EleType *pData)
{
    if(LQ == NULL || LQ->pFront == NULL || pData == NULL)
    {
	return ERROR;
    }

    *pData = LQ->pFront->data;

    return SUCCESS;
}

void FreeQueue(LinkQueue *LQ)
{
    LQNode *pDel;
    
    if(LQ == NULL)
    {
	return;
    }

    while(LQ->pFront != NULL)
    {
	pDel = LQ->pFront;
	LQ->pFront = LQ->pFront->pNext;
	free(pDel);
    }

    LQ->pRear = LQ->pFront = NULL;
}

分享到:
评论

相关推荐

    链式队列的表示和实现源码

    链式队列的表示和实现源码,包括队列初始化,添加元素、删除元素等操作。

    数据机构——链队列的算法(无漏洞版)

    数据机构——链队列 完整算法 下面举部分 #include using namespace std; typedef struct qnode { int data; struct qnode * next; }Qnode, * Queueptr; // 创建链 Qnode是struct qnode的别名,Queueptr是...

    LinkQueue-LinkStack.zip_linux队列_链式队列

    C实现链式队列 C实现链式栈

    C++ 循环队列和链式队列的实现 数据结构 类模板

    1. Queue.hpp是队列的基类,只定义基本操作,具体实现在另外两个hpp文件中 2. seqQueue.hpp是循环队列的实现 3. linkQueue.hpp是链式队列的实现 4. test.cpp是简单的测试文件,main函数在这里面

    数据结构与算法——看病排队候诊问题.docx

    在解决看病排队候诊问题时,可以采用链式队列来实现两个不同的优先级别队列,q1 对应优先级别低的队列,q2 对应优先级别高的队列。 在解决看病排队候诊问题时,需要设计合适的数据结构和算法来模拟实际的医疗系统。...

    链队列的各种基本操作

    编写一个程序,实现链队列的各种基本运算,并在基础上完成以下功能: 1) 初始化链队列; 2) 判断链队列是否为空; 3) 依次进队元素a,b,c; 4) 出队一个元素,并输出该元素; 5) 输出链队列的长度; 6) 依次进队元素d,...

    LinkQueue.cpp

    LinkQueue.cpp

    链队列(严蔚敏 C语言版 链队列表示与实现)(c++编写)

    链队列(欠判队空操作) 主函数部分纯属测试 部分内容: Status InitQueue (LinkQueue &Q); // 构造一个空队列Q Status EnQueue (LinkQueue &Q,QElemType e) ;// 插入元素e为Q的新的队尾元素 Status DeQueue ...

    LinkQueue.txt

    文档中实现了队列了链式表示,并实现了队列了一些主要操作函数.可以作为学习数据结构中队列那一部分时的参考.

    数据结构linkqueue

    关于数据结构的实验代码,linkqueue,测试过可运行

    拓扑排序(算法与数据结构课程设计).pdf

    - void InitQueue(LinkQueue *Q):初始化链式队列 - int QueueEmpty(LinkQueue Q):判断空队列 - void EnQueue(LinkQueue *Q, ElemType e):元素入队列 - void DeQueue(LinkQueue *Q, ElemType *e):元素出队列 ...

    队列的动态链式存储实现代码分享

    /*————————————————————操作目的: 初始化队列初始条件: 无操作结果: 构造一个空的队列函数参数: LinkQueue *Q 待初始化的队列返回值: bool 操作是否成功————————————...

    data_structure2.rar_seqqueue

    5、顺序栈 SeqStack.h Test.cpp 6、链式栈 StackNode.h LinkStack.h Test.cpp 7、顺序队列 SeqQueue.h Test.cpp 8、链式队列 QueueNode.h LinkQueue.h Test.cpp

    队列源码数据

    ②int InitQueue(LinkQueue *Q) //链队列初始化 ③int EnterQueue(LinkQueue *Q,int x) //链队列的插入操作  ④int DeleteQueue(LinkQueue *Q,int e) //链队列的删除操作  ⑤int PrintQueue(LinkQueue *Q) //链...

    队列的基本操作

    ②int InitQueue(LinkQueue *Q) //链队列初始化 ③int EnterQueue(LinkQueue *Q,int x) //链队列的插入操作  ④int DeleteQueue(LinkQueue *Q,int e) //链队列的删除操作  ⑤int PrintQueue(LinkQueue *Q) //链...

    C++实现数据结构算法

    8、链式队列 41 QueueNode.h 41 LinkQueue.h 42 Test.cpp 44 9、优先级队列 45 QueueNode.h 46 Compare.h 46 PriorityQueue.h 47 Test.cpp 51 10、串 52 MyString.h 52 MyString.cpp 54 test.cpp 60 11、二叉树 61 ...

    数据结构C++算法大全

    8、链式队列 77 QueueNode.h 77 LinkQueue.h 78 Test.cpp 83 9、优先级队列 85 QueueNode.h 85 Compare.h 86 PriorityQueue.h 88 Test.cpp 94 10、串 97 MyString.h 97 MyString.cpp 100 test.cpp 114 11、二叉树 ...

    数据结构各种算法实现(C++模板),doc,代码可以直接拷出来用,321页,18大类的数据结构和算法

    8、链式队列 70 QueueNode.h 70 LinkQueue.h 71 Test.cpp 75 9、优先级队列 77 QueueNode.h 77 Compare.h 78 PriorityQueue.h 80 Test.cpp 85 10、串 88 MyString.h 88 MyString.cpp 90 test.cpp 101 11、二叉树 104...

    数据结构各种算法实现(C++模板)

    8、链式队列 70 QueueNode.h 70 LinkQueue.h 71 Test.cpp 75 9、优先级队列 77 QueueNode.h 77 Compare.h 78 PriorityQueue.h 80 Test.cpp 85 10、串 88 MyString.h 88 MyString.cpp 90 test.cpp 101 11、二叉树 104...

Global site tag (gtag.js) - Google Analytics