从零开始的数据结构学习日记(五)——1.5顺序队列

1.1顺序队列

队列和栈类似,都是运算受限的线性表,只允许在表的一端进行插入,该端称为尾,在另一端进行删除,该端称为头,队列遵循先进先出的原则。
类型定义如下:

typedef struct
{
	datatype data[maxsize];
	int front;//front指向队头元素前一个的位置
	int rear;//对尾元素的位置
}SeQueue;
SeQueue *sq=(SeQueue*)malloc(sizeof(SeQueue));

1.2队列的基本运算

1.2.1循环队列的初始化

只需要队列的头尾指针相等即为空队列。

void InitQueue(SeQueue*&sq)
{
	sq=(SeQueue*)malloc(sizeof(SeQueue));
	sq->front==sq->rear=0;
}

1.2.2求队列长度

int Length(SeQueue*sq)
{
	return (sq->rear-sq->front+maxsize)%maxsize
}

1.2.3入队

int Enqueue(sequeue*sq,datatype x)
{
	if((sq->rear+1)%maxsize==sq->front)
	{
		printf("队列上溢")return 0;
	}
	else
	{
		sq->rear=(sq->rear+1)%maxsize;//取模运算可以解决假上溢问题,不知道为啥,但是就这么用.
		sq->data[sq->rear]=x;
		return 1;
	}
}

1.2.4出队

int Dequeue(sequeue*sq,datatype&x)
{
	if(sq->rear==sq->front)
	{
		printf("队列下溢")return 0}
	else
	{
		sq->front=(sq->front+1)%maxsize;//防止假上溢且将front指针向后移动1
		//因为原本的front指向的是队头元素前的一个元素
		x=sq->data[sq->front];
		return 1;
	}
}
发布了5 篇原创文章 · 获赞 0 · 访问量 148

猜你喜欢

转载自blog.csdn.net/sakaili/article/details/104092864
今日推荐