加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】静态循环队列的操作

发布时间:2020-12-15 06:30:33 所属栏目:安全 来源:网络整理
导读:静态循环队列的操作 详细请参考以下代码: #include stdio.h#define MAX_SIZE 100typedef struct {int front;int rear;int data[MAX_SIZE];}Queue;// 循环队列void initQueue(Queue * sq);void DestoryQueue (Queue * sq); //销毁队列void EnQueue (Queue *

静态循环队列的操作 详细请参考以下代码:

#include <stdio.h>

#define MAX_SIZE 100

typedef struct 
{
	int front;
	int rear;
	int data[MAX_SIZE];
}Queue;

// 循环队列
void initQueue(Queue * sq);
void DestoryQueue (Queue * sq); //销毁队列
void EnQueue (Queue * sq,int e); //进队列
void DeQueue (Queue * sq); //出队列
void GetHead (Queue * sq); //取队头元素值
bool QueueEmpty (Queue sq); //判队列空否
void DisQueue(Queue * sq);  // 遍历队列中元素
void main ()
{
	int size = 0;
	char choice = '';
	Queue sQueue = {0,};

	initQueue(&sQueue);

	while (choice != 'q')
	{
		printf("******************************n");
		printf("---    1   元素进队       --- n");
		printf("---    2   队头出队       --- n");
		printf("---    3   遍历队中元素   --- n");
		printf("---    4   判队列空否     --- n");
		printf("---    5   取队头元素值   --- n");
		printf("---    6   销毁队列       --- n");
		printf("---    q   退出           --- n");
		printf("******************************n");

		scanf("n%c",&choice);

		switch (choice)
		{
		case '1':
			printf("输入进栈元素个数:");
			scanf("%d",&size);

			for (int i = 0; i < size; i++)
				EnQueue (&sQueue,i+1) ; //进队列
			break;
		case '2':
			DeQueue(&sQueue);
			break;
		case '3':
			DisQueue(&sQueue);
			break;
		case '4':
			if (!QueueEmpty(sQueue))
				printf("队列不为空n");
			break;
		case '5':
			GetHead(&sQueue);
			break;
		case '6':
			DestoryQueue(&sQueue);
			break;
		case 'q':
			return;

		}
	}
}

/*初始化队列*/
void initQueue(Queue * sq)
{
	sq->front = 0;
	sq->rear = 0;

	for (int i = 0; i < MAX_SIZE; i++)
		sq->data[i] = 0;
}

void DestoryQueue (Queue * sq) //销毁队列
{
	initQueue(sq);
	return;
}


void EnQueue (Queue * sq,int e) //进队列
{
	if ((sq->rear+1)% MAX_SIZE != sq->front) // 判断是否队满
	{
		sq->data[sq->rear] = e;
		sq->rear = (sq->rear+1)%MAX_SIZE;    // 队尾进队
	}
}


void DeQueue (Queue * sq)  //出队列
{
	if (!QueueEmpty(*sq)) // 队列不空时出队
		sq->front = (sq->front+1)%MAX_SIZE;
	else
		return;
}

void GetHead (Queue * sq) //取队头元素值
{
	if (!QueueEmpty(*sq))
		printf("队头元素为 %dn",sq->data[sq->front]);
}

bool QueueEmpty (Queue sq) //判队列空否
{
	if (sq.front != sq.rear)
		return false;
	else
	{
		printf("队列为空,请先进队n");
		return true;
	}
}

void DisQueue(Queue * sq)  // 遍历队列中元素
{
	if (QueueEmpty(*sq))
		return;

	printf("遍历队列中的元素n");

	for (int i = sq->front; i < sq->rear; i++)
	{
		printf("%dt",sq->data[i]);
	}
	printf("n");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读