03---顺序队---20195106023---王亚威.c

/*队列及其基本概念
队列的基本概念
队列(Queue):也是运算受限的线性表。是一种先进先出(First In First Out ,简称FIFO)的线性表。
只允许在表的一端进行插入,而在另一端进行删除。
*/
/*
队列的顺序表示和实现
利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元素,称为顺序队列。
设立一个队首指针front ,一个队尾指针rear ,分别指向队首和队尾元素。
 ◆ 初始化:front=rear=0。
 ◆ 入队:将新元素插入rear所指的位置,然后rear加1。
 ◆ 出队:删去front所指的元素,然后加1并返回被删元素。
 ◆ 队列为空:front=rear。
 ◆ 队满:rear=MAXQSIZE-1或front=rear。
*/
# include <stdio.h>
# include <malloc.h>
# define true 1
# define false 0
typedef int Status ;
typedef struct Queue
{
	int * pBase;  //数组基地址
	int front;  //队首指针front
	int rear;  //队尾指针rear
}QUEUE;
//队列的初始化
void init(QUEUE *pQ)
{
	pQ->pBase = (int *)malloc(sizeof(int) * 6);
	pQ->front = 0;
	pQ->rear = 0;
}
//判断队满
Status full_queue(QUEUE * pQ)
{
	if ( (pQ->rear + 1) % 6 == pQ->front  )
		return true;
	else
		return false;
}
//入队
Status en_queue(QUEUE * pQ, int val)
{
	if ( full_queue(pQ) )
	{
		return false;
	}
	else
	{
		pQ->pBase[pQ->rear] = val;
		pQ->rear = (pQ->rear+1) % 6;
		return true;
	}
}
//遍历队列
void traverse_queue(QUEUE * pQ)
{
	int i = pQ->front;
	while (i != pQ->rear)
	{
		printf("%d  ", pQ->pBase[i]);
		i = (i+1) % 6;
	}
	printf("
");
}
//判断队空
Status emput_queue(QUEUE * pQ)
{
	if ( pQ->front == pQ->rear )
		return true;
	else
		return false;
}
//出队
Status out_queue(QUEUE * pQ, int * pVal)
{
	if ( emput_queue(pQ) )
	{
		return false;
	}
	else
	{
		*pVal = pQ->pBase[pQ->front];
		pQ->front = (pQ->front+1) % 6;
		return true;
	}
}
//显示菜单
void ShowMenu()
{
	int i;
	int WIDESIZE = 65;
	printf("


");
	printf("------------------------");
	printf("	欢迎使用循环队列的入队和出队	");
	printf("------------------------

");
	printf("		");
	for(i=0;i<WIDESIZE;i++)
	{
		printf("*");
	}
	printf("

");
	printf("		*	1.系统帮助及说明	**");
	printf("	2.初始化		*
");
	printf("		*	3.入队			");
	printf("**	4.出队			*
");
	printf("		*	5.遍历			**");
	printf("	6.退出			*
");
    for(i=0;i<4;i++)
	{
		printf("	");
	}
	printf("
		");
	for(i=0;i<WIDESIZE;i++)
	{
		printf("*");
	}
	printf("
");
	printf("--------------------------------");
	printf("   2019级电科一班王亚威作品   ");
	printf("----------------------------------
");
	printf("

请按所需输入菜单编号:");
}
//显示帮助信息
void ShowHelp()
{
	printf("1、此系统可以简单完成循环队列的入队和出队
");
	printf("2、输入对应功能项的编号即可进行不同功能的操作。
");
}
int main(void)
{
	QUEUE Q;
	int val;
    int flag = -1;
	int choice;
	while(flag!=6)
	{
		ShowMenu();
		scanf("%d",&choice);
		switch (choice)
		{
			case 1:
			    ShowHelp();break;
            case 2:
			    init(&Q);break;
			case 3:
                printf("请输入要入队的元素
");
                scanf("%d",&val);
				en_queue(&Q, val);
				traverse_queue(&Q);break;
            case 4:
                if ( out_queue(&Q, &val) )
                {
                    printf("出队成功,队列出队的元素是: %d
", val);
                }
                else
                {
                    printf("出队失败!
");
                }
                traverse_queue(&Q);break;
            case 5:
                traverse_queue(&Q);break;
            case 6:
                flag=6;break;
        }
	}
    return 0;
}
原文地址:https://www.cnblogs.com/ztguang/p/14065157.html