数据结构——使用C语言 循环顺序队列的实现

循环队列实现操作包括

/*初始化顺序队列*/
void QueueInitiate(QueueList* s);


/*队列是否为空*/
//如果为空返回0;否则返回1
int QueueNotEmpty(QueueList s);


/*入队列*/
//队列s插入数据x
//入队成功返回1,否则返回0
int QueueAppend(QueueList *s, DataType x);


/*出队列*/
//队列s删除数据元素并有x带回
//出队列成功返回1,否则返回0
int QueueDelete(QueueList* s, DataType* x);


/*取队头数据元素*/
//取队列当前队头元素并由x带回
//取元素成功返回1;否则返回0;
int QueueGet(QueueList s, DataType* x);


1.定义结构体

typedef int DataType;
typedef struct
{
    DataType Queue[MaxSize];
    int rear;
    int front;
    int count;
}QueueList;

2.循环队列初始化

/*初始化顺序队列*/
void QueueInitiate(QueueList* s)
{
	s->count = 0;//定义计数器初始值
	s->front = 0;//定义队头指针下标值
	s->rear = 0;//定义队尾指针下标值
}

3.队列是否为空

/*队列是否为空*/
//如果为空返回0;否则返回1
int QueueNotEmpty(QueueList s)
{
	if (s.count != 0)
		return 1;
	else
		return 0;
}

4.入队列

/*入队列*/
//队列s插入数据x
//入队成功返回1,否则返回0
int QueueAppend(QueueList* s, DataType x)
{
	if ((s->count > 0) && s->rear ==s->front)
	{
		printf("队列已满无法入队");
		return 0;
	}
	else
	{
		s->Queue[s->rear] = x;
		s->rear = (s->rear + 1) % MaxSize;
		s->count++;
		return 1;
	}
}

5.出队列

/*出队列*/
//队列s删除数据元素并有x带回
//出队列成功返回1,否则返回0
int QueueDelete(QueueList* s, DataType* x)
{
	if (s->count == 0)
	{
		printf("队列已空无法出队列");
		return 0;
	}
	else
	{
		*x = s->Queue[s->front];
		s->front = (s->front + 1) % MaxSize;
		s->count--;
		return 1;
	}
}

6.取队头数据元素

/*取队头数据元素*/
//取队列当前队头元素并由x带回
//取元素成功返回1;否则返回0;
int QueueGet(QueueList s, DataType* x)
{
	if (s.count == 0)
	{
		printf("队列已空,无法取当前队头元素");
		return 0;
	}
	else
	{
		*x = s.Queue[s.front];
		return 1;
	}
}

代码测试如下

#include<stdio.h>
#include"Queuelist.h"  //包含顺序队列头文件
#define MaxSize 6
int main()
{
	QueueList queuelist;
	int i, x;
	QueueInitiate(&queuelist);
	for (i = 0; i < MaxSize; i++)
	{
		QueueAppend(&queuelist, i + 1);
	}
	QueueGet(queuelist, &x);
	printf("当前对头元素为 %d\n", x);
	while (QueueNotEmpty(queuelist))
	{
		QueueDelete(&queuelist, &x);
		printf("%d  ", x);
	}
}

代码运行结果如下

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值