环形队列数据–新增、删除、输出
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 20
void enqueue_f(void); //新增函数
void dequeue_f(void); //删除函数
void list_f(void); //输出函数
char item[MAX][20];
int front = MAX - 1, rear = MAX - 1, tag = 0;
//tag为记忆front所在是否已储存数据,0时为没有存放数据,1时为存放数据
void main()
{
char option;
while (1)
{
printf("\n*****************************************\n");
printf(" <1>insert(enqueue)\n" );
printf(" <2>delete(dequeue)\n" );
printf(" <3>list\n" );
printf(" <4>quit\n" );
printf("\n*****************************************\n");
printf("Please enter your choise..." );
option = _getche();
switch (option)
{
case'1':
enqueue_f();
break;
case'2':
dequeue_f();
break;
case'3':
list_f();
break;
case'4':
exit(0);
}
}
}
void enqueue_f(void)
{
if (front == rear&&tag == 1) //当队列已满时,显示错误
printf("\n\nQueue is full!\n");
else
{
rear = (rear + 1) % MAX;
printf("\n\nPlease enter item to insert:");
gets(item[rear]);
if (front == rear) tag = 1;
}
}
void dequeue_f(void)
{
if (front == rear&&tag == 0) //当队列中没有数据存在时,显示错误
printf("\n\nNo item,queue is empty!\n");
else
{
front = (front + 1) % MAX;
printf("\n\nItem %s deleted\n",item[front]);
if (front == rear) tag = 0;
}
}
void list_f(void)
{
int count = 0, i;
if (front == rear&&tag == 0)
printf("\n\nNo item,queue is empty\n");
else
{
printf("\n\n ITEM\n");
printf("-------------------------------------------\n");
for (i = (front + 1) % MAX; i != rear; i = ++i%MAX)
{
printf(" %-20s\n",item[i]);
count++;
if (count % 20 == 0) getchar();
}
printf(" %-20s\n",item[i]);
printf("-------------------------------------------\n");
printf(" Total item: %d\n",++count);
getchar();
}
}