队列结构

队列结构中允许堆两端进行操作,但是两端的操作不同。在表的一端只能进行删除操作,称为队头;在表的另一端只能进行插入操作,称为队尾。如果队列中没有元素,称为空队列。(先进先出)
入队列:将一个元素添加到队尾(相当于到队列最后排队等候)
出队列:将队头的元素取出,同时删除该元素,使后一个元素成为队头。
准备数据

#define QUWUWLEN 15
struct DATA
{
	char name[10];
	int age;
};
struct SQType
{
	DATA data[QUEUELEN];//队列数组
	int head;//队头
	int tail;//队尾
}

初始化队列结构
在使用顺序队列之前,首先创建一个空的顺序队列,也就是初始化顺序队列。顺序队列的初始化操作步骤如下:
(1)按符号常量QUEUELEN指定的大小申请一块内存空间,用来保存队列中的数据。
(2)设置head=0,和tail=0,表示一个空栈。

SQType* SQTypeInit()
{
	SQType *q;
	if(q=(SQType*)malloc(sizeof(SQType)))//申请内存
	{
		q->head=0;//设置队头
		q->tail=0;//设置队尾
		return q;
	}
	else
	{
		return NULL;//返回空
	}
}

判断空队列

int SQTypeIsFull(SQType* q)
{
	int temp;
	temp=(q->tail==q->QUEUELEN);
	return temp;
}

在这里,输入参数q为一个指向操作的队列的指针。程序中,判断队列tail是否已经等于QUEUELEN,从而判断队列是否已满。

清空队列

void SQTypeClear(SQType* q)
{
	q->head=0;//设置队头
	q->tail=0;//设置队尾
}

释放空间

void SQTypeFree(SQType *q)
{
	if(q!=NULL)
	{
		free(q);
	}
}

入队列
(1)首先判断队列顶tail,如果tail等于QUEUELEN,则表示溢出,进行出错处理,否则执行下操作;
(2)设置tail=tail+1,(队列顶指针加1,指向入队列的地址)
(3)将入队列遇难苏保存到tail指向的位置。

int InSQType(SQType* q,DATA data)
{
	if(q->tail=QUEUELEN)
	{
		printf("队列已满!操作失败!\n");
		return 0;
	}
	else
	{
		q->data[q->tail++]=data;//将元素入队列
		return 1;
	}
}

出队列
(1)判断队列head,如果head等于tail,则表示为空队列,进行出错处理。否则执行下一步。
(2)从队列首部取出队头元素(实际返回对头元素的指针)
(3)设修改对头head的序号,使其指向后一个元素。

DATA *OutSQType(SQType* q)
{
	if(q->head==q->tail)
	{
		printf("\n队列以空!操作失败\n");
		exit(0);
	}
	else
	{
		return &(q->data[q->head++]);
	}
}

**读结点数据 **

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值