数据结构(循环队列子系统:c实现)

#include<stdio.h>
//#include<stdlib.h>

typedef int datatype;//把int 改名为 datatype
#define MAXLEN 10//定义MAXLEN==10
#define N sizeof(loopqueue)//一个结点所占的字节数为N
typedef struct//定义循环队列结构体结构
{
	datatype data[MAXLEN];
	int front,
		rear;
	//int n;
}loopqueue;



//置空队
void Emptyqueue(loopqueue *q)
{
	q->front=q->rear=MAXLEN-1;
}


//进队,循环队列进队
int Enterqueue(loopqueue *q)
{
	int x=0;
	printf("请输入,所要 进队 的“整数”:\n");
	while(1)
	{
		printf("\t进队整数为:\t");
		scanf("%d",&x);
		/*if(!scanf("%d",&x))
		{
			printf("\t\t\t输入的“元素“种类错误,请重新输入!!!\n");
			continue;
		}
		else*/ if(q->front==(q->rear+1)%MAXLEN)
			{
				printf("\t\t\t循环队列已满,不能进队!!!\n");
				return 0;
			}
		else if(x==0)
			{
				break;
			}
		else
			{
				q->rear=(q->rear+1)%MAXLEN;
				q->data[q->rear]=x;
				//q->n++;
				printf("\t\t\t入队成功!\n");
			}
	}
}


//出队,队内元素出队,先进先出
void Putqueue(loopqueue *q)
{
	int m=0;
	int x;
	//m=q->n;
	if(q->front==q->rear)
	{
		printf("\t\t\t循环队列 已空 ,不能出队!!!\n");
	}
	else
	{
		//printf("出队的元素为:   ");
		//printf("%d",q->data[q->rear]);
		q->front=(q->front+1)%MAXLEN;
		x=q->data[q->front];
		//m--;;
		printf("\t\t\t出队成功!\t");
		//printf("出队的元素为:   ");
		//printf("%d",q->data[q->rear]);
		//q->n--;
	}
}


//求队中元素个数
void Lengthqueue(loopqueue *q)
{
	//int k;
	printf("\t队中元素的个数为:\t");
	//printf("%d",q->n);
	//printf("\t");
	printf("%d",(q->rear-q->front+MAXLEN)% MAXLEN);
}


// 显示,队内元素的显示
int ShowQueue(loopqueue *q)                                           
{  int k=q->front;
   if (k==q->rear) 
   {  printf("\n\t\t 此队列为空! \n"); 
      return 0;
   }
   printf("\n\t\t 此队列元素为:");
   do 
     {  k=(k+1)%MAXLEN;
        printf("%4d",q->data[k]);
	 } while (k!=q->rear);
   printf("\n");
   return 0;
}



int main()
{
	int a=0;
	loopqueue q;
	Emptyqueue(&q);
	while(1)
    {
		printf("                        \n\t\t\t\t\t\t循环队列系统子系统\n");
		printf("            \t\t***************************************************\n");
		printf("            \t\t*               1------进    队                   *\n");
	    printf("            \t\t*               2------出    队                   *\n");
		printf("            \t\t*               3------显    示                   *\n");
		printf("            \t\t*               4------求队中元素个数             *\n");
		printf("            \t\t*               0------返    回                   *\n");
		printf("            \t\t***************************************************\n");
		printf("            请输入(0-4)选项:\n");
        printf("\n请输入所要达到第几号功能:\t");
		//fflush(stdin);
		scanf("%d",&a);
        if(a == 1)
            Enterqueue(&q);
        else if(a == 2)
            Putqueue(&q);
        else if(a == 3)
            ShowQueue(&q);
        else if(a == 4)
           Lengthqueue(&q);
        else if(a == 0)
            return 0;
        else
		{
            printf("!!!!!输入有误,请重新输入!!!!!\n");
		} 
	}
} 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值