初学数据结构之队列

本文介绍了两种实现队列数据结构的方法:一种是使用数组实现,该方法利用了固定大小的空间来存储元素,并通过front和rear指针跟踪队列的状态;另一种是通过链表实现,这种方法更加灵活,适用于元素数量动态变化的场景。
一.数组实现(只用N-1个空间)
#define MaxSize 10
typedef struct 
{
	int Data[MaxSize];
	int rear;
	int front;	
}Quene;

void AddQ(Quene *Ptrq,int item)
{
	if((Ptrq->rear+1)%MaxSize==Ptrq->front)
	{
		printf("队列满");
		return ;		 
	}
	Ptrq->rear=(Ptrq->rear+1)%MaxSize;
	Ptrq->Data[Ptrq->rear]=item;
}
int DelectQ(Quene *Ptrq)
{
	if(Ptrq->front==Ptrq->rear)
	{
		printf("队列空");
		return ERROR;		 
	}
	else
	{
		Ptrq->front=(Ptrq->front+1)%MaxSize;
		return Ptrq->Data[Ptrq->front];
	}
}

二.链表实现
typedef struct Node
{
	int Data;
	struct Node *Next;
}QNode;

typedef struct 
{
	QNode *rear;
	QNode *front;
}LinkQuene;
LinkQuene *Ptrq;

int DelectQ(LinkQuene *Ptrq)
{
	QNode *FrontCell;
	int FrontElem;
	if(Ptrq->front==NULL)
	{
		printf("队列空");
		return ERROR;
	}
	FrontCell=Ptrq->front;
	if(Ptrq->front==Ptrq->rear)
	{
		Ptrq->front=Ptrq->rear=NULL;
	}
	else
	{
		Ptrq->front=Ptrq->front->Next;
	}
	FrontElem=FrontCell->Data;
	free(FrontCell);
	
	return FrontElem;
}

void AddQ(LinkQuene *Ptrq,int item)
{
	QNode *RearCell;
	if(Ptrq->front==NULL)
	{
		RearCell=(struct Node *)malloc(sizeof(struct Node));
		Ptrq->rear=Ptrq->front=RearCell;
		RearCell->Data=item;
	}
	else
	{
		RearCell=(struct Node *)malloc(sizeof(struct Node));
		RearCell->Data=item;
		RearCell->Next=Ptrq->rear->Next;
		Ptrq->rear->Next=RearCell;
		Ptrq->rear=RearCell;		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值