c语言版数据结构(奇迹冬瓜)-单链式队列

   (一)

     队列(FIFO)先进先出模式,包含初,毁,清,空,长,得,进,出。八种基本操作。现以两种存储方式为例,来讲解队列的用法。

   (二)

     单 链式存储结构 

//----头文件-----

#include<stdio.h>
#include<stdlib.h>

//-----宏定义-----

#define TURE 1
#define ERROR 0
#define OVERFLOW -2

//-----结构体及替换-----

typedef int Bool;

typedef struct QNode
{
	int data;
	struct QNode *next;
}QNode,*QueuePtr;

typedef struct
{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

     壹。初(初始化队列)

    (图1)

Bool InitQueue(LinkQueue *Q)
{
	if(!(Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode))))
	{
		exit(OVERFLOW);
	}
	Q->front->next=NULL;
	return TURE;
}

    贰。 毁(销毁队列)

Bool DestroyQuueue(LinkQueue *Q)
{
	while(Q->front)
	{
		Q->rear=Q->front->next;
		free(Q->front);
		Q->front=Q->rear;
	}
	return TURE;
}

    叁。清(清空队列)

Bool ClearQueue(LinkQueue *Q)
{
	if(Q->front!=Q->rear)
	{
		Q->rear=Q->front;
		Q->front=NULL;
	}
	return TURE;
}

    肆。空(判断空队列)

Bool QueueEmpty(LinkQueue Q)
{
	return Q.front==Q.rear?TURE:ERROR;
}

    伍。长(返回队列长)

int QueueLength(LinkQueue Q)
{
	int length=0;
	QueuePtr PStart=Q.front->next;
	while(Q.rear!=PStart)
	{
		length++;
		PStart=PStart->next;
	}
	return length;
}

    陆。得(得到队列头)

Bool GetHead(LinkQueue Q,int *e)
{
	if(Q.front==Q.rear)
	{
		return ERROR;
	}
	*e=Q.front->data;
	return TURE;
}

    柒。进(进入队列)

Bool EnQueue(LinkQueue *Q,int e)
{
	QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
	if(!p)
	{
		exit(OVERFLOW);
	}
	p->data=e;
	p->next=NULL;
	Q->rear->next=p;
	Q->rear=p;
	return TURE;
}

    捌。出(走出队列)

Bool DeQueue(LinkQueue *Q,int *e)
{
	QueuePtr p;
	if(Q->front==Q->rear)
	{
		return ERROR;
	}
	p=Q->front->next;
	Q->front->next=p->next;
	if(Q->rear==p)
	{
		Q->rear=Q->rear;
	}
	free(p);
	return TURE;
}


 



 

 


 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值