数据结构之队列-顺序队列

列的特点是“先到先办”FIFOFirst In First Out),可将队列形象地比作管道


模拟买火车票的队列实现

#include<stdio.h>
#include<stdlib.h>
#define N 100 //最大有多少个
#define datatype char //定义数据类型,定义队列,
struct queue
{
	datatype data[N];//存放数据的数组
	int front;//允许删除的一端称为队列
	int rear;//允许插入的一端就是队尾

};
typedef struct  queue  QUEUE;//简化struct queue
void initQUEUE(QUEUE *sq);//初始化顺序队列
int isempty(QUEUE *sq);//判断队列是否为空
datatype gethead(QUEUE *sq);//获取队列第一个元素
void enQUEUE(QUEUE *sq, datatype data);//队列入队
 datatype  deQUEUE(QUEUE *sq);//队列出队
 void showQUEUE(QUEUE *sq);

void initQUEUE(QUEUE *sq)
{
	
	sq->front = sq->rear = 0;//实现队列初始化,等价于清空

}
int isempty(QUEUE *sq)
{
	if (sq->front == sq->rear)
	{
		return 1;
	}
	return 0;
}
datatype gethead(QUEUE *sq)
{
	if (sq->front == sq->rear)
	{
		return -1;
	}

	return  sq->data[sq->front];//返回第一个节点数据
}
void enQUEUE(QUEUE *sq, datatype data)
{
	if (sq->rear == N)//n-1个数
	{
		printf("队列已经满了");
		return;
	}
	sq->data[sq->rear] = data;//入队
	sq->rear++;//

}
datatype  deQUEUE(QUEUE *sq)//出队
{
	if (sq->front == sq->rear)//队头和队尾重合
	{
		return -1;
	}
	sq->front++;//删除一个元素,向前移动
	return sq->data[sq->front - 1];//返回一个元素,及删除的元素
}
void showQUEUE(QUEUE *sq)
{
	if (sq->front == sq->rear)
	{
		return;
	}
	else
	{
		printf("\nfront=%d,rear=%d\n",sq->front,sq->rear);
		for (int i = sq->front; i < sq->rear; i++)//打印所有队列元素
		{
			printf("%c ", sq->data[i]);
		}
	}



}
int main()
{
	QUEUE q1;//创建队列的结构体
	initQUEUE(&q1);
	char *str = "abcdefg";
	char *p = str;
	while (*p != '\0')
	{
		enQUEUE(&q1, *p);
		showQUEUE(&q1);
		p++;
	}
	while (isempty(&q1) != 1)//只要队列不为空,一直循环下去
	{
		printf("\n出队的字符%c", deQUEUE(&q1));
		showQUEUE(&q1);
	}
	system("pause");


	return 0;
}





 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值