队列的实际应用和操作(顺序表)

         题目:利用队列求解报数问题。设有n个人站成一排,从左向右的编号分别为1~n,现在从左往右报数“1,2,1,2,…”,数到“1”的人出列,数到“2”的立即站到队伍的最右端。报数过程反复进行,直到n个人都出列为止。要求给出他们的出列顺序。

头文件SqQueue.h

#include <stdio.h>
#include<malloc.h>

#define MaxSize 100

typedef int ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int front, rear;
}SqQueue;


//初始化队列运算
void InitQueue(SqQueue & sq)
{
	sq.rear = sq.front = 0;
}

//销毁队列
void DestroyQueue(SqQueue sq)
{

}

//进队
int EnQueue(SqQueue & sq, ElemType x)
{
	if ((sq.rear + 1) % MaxSize == sq.front)
		return 0;
	sq.rear = (sq.rear + 1) % MaxSize;
	sq.data[sq.rear] = x;
	return 1;
}


//出队
int DeQueue(SqQueue & sq, ElemType& x)
{
	if (sq.rear == sq.front)
		return 0;
	sq.front = (sq.front + 1) % MaxSize;
	x = sq.data[sq.front];
	return 1;
}


//取队头元素
int GetHead(SqQueue sq, ElemType& x)
{
	if (sq.rear == sq.front)
		return 0;
	x = sq.data[(sq.front + 1) % MaxSize];
	return 1;
}

//判断队空运算  
int QueueEmpty(SqQueue sq)
{
	if (sq.rear == sq.front)//队空返回1
		return 1;
	else
		return 0;
}

//报数
void Count(int n)
{
	int i;
	int count = 1;			//count用来记第几个元素
	SqQueue sq;
	InitQueue(sq);
	for( i = 1; i <= n; i++ )
	{
		EnQueue(sq,i);
	}
	while (!QueueEmpty(sq))
	{
		DeQueue(sq, i);
		if (count % 2 == 0)
		{
			EnQueue(sq, i);			//第偶数个元素时,进队
		}
		else
		{
		
			printf("%d  ", i);		//第奇数个元素时,出队输出
		}
		count++;
	}
	printf("\n");
	DestroyQueue(sq);
}

源文件

#include"SqQueue.h"
int main()
{
	int num;
	printf("输入个数:");
	scanf("%d", &num);
	Count(num);
	return 0;
}

点个赞再走!!!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风残月Lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值