c语言 队列问题

题目:1、循环队列(顺序存储)的基本操作:(1)声明循环队列的数据类型(2)自定义“创建队列”函数(3)自定义“入队”函数(4)自定义“出队”函数(5)主函数:①调用“创... 题目:1、 循环队列(顺序存储)的基本操作:
(1) 声明循环队列的数据类型
(2) 自定义“创建队列”函数
(3) 自定义“入队”函数
(4) 自定义“出队”函数
(5) 主函数:①调用“创建队列”函数。②根据用户输入的选项(1 入队;2 出队;3 退出)完成相应的功能。

#include "stdio.h"
#include "stdlib.h"

#define MAXSIZE 1000

typedef struct k
{
int data[MAXSIZE];
int front,rear;
int num;
}c_k;//声明循环顺序队列的数据类型

//创建循环队列
c_k *create_k()
{
c_k * cq=(c_k *)malloc(sizeof(c_k));//开辟循环队列的空间,并将地址存到变量cq中
cq->front=-1;
cq->rear=-1;
cq->num=0;//初始化为空队列
return cq;//返回队列的地址
}

//入队
int In_ck(c_k * cq,int x)//将x入到cq所指向的队列中,并返回是否入队成功
{
if(cq->num==MAXSIZE)//队列已满
{
printf("The c_k is full!\n");
return -1;
}
else//队列不满
{
cq->rear=(cq->rear+1)%MAXSIZE;//形成循环
cq->data[cq->rear]=x;//x入队到队尾
cq->num++;//队列中元素个数增1
return 1;
}

}

//出队
int Out_ck(c_k * cq, int *x)//对cq所指向的队列出队,将队首元素存到x所指向的变量,并返回是否出队成功
{
if(cq->num==0)//队列为空
{
printf("The k is null!\n");
return -1;

}
else//队列非空
{
cq->front=(cq->front+1)%MAXSIZE;//形成循环
*x=cq->data[cq->front];//将队首元素存到x所指向的变量
cq->num--;//队列中元素个数减1
return 1;
}
}

void main()
{
//调用创建队列函数
c_k * cq=create_k();

int rear_x,front_x;
int op;

printf("\n请输入 1入队,2出队,3退出:\n");

scanf("%d",&op);
while(op!=3)
{
switch(op)
{
case 1:printf("请入入队元素:\n");
scanf("%d",rear_x);
int result=In_ck(cq,&rear_x);
printf("入对元素是 %d\n",rear_x);
break;

case 2:printf("请输入出队元素:\n");
scanf("%d",front_x);
int result=Out_ck(cq,&front_x);
printf("出对元素是 %d\n",front_x);
break;

}
printf("\n请输入 1入队 2出队 3退出:\n");scanf("%d",&op);

}

}
各位高手能帮我看一下哪里错了吗!!!!
展开
 我来答
百度网友6c5eac102
推荐于2016-06-14 · TA获得超过1101个赞
知道小有建树答主
回答量:464
采纳率:0%
帮助的人:584万
展开全部
//改正如下,但是我觉得你那个出队有点问题,不应当是自己输入要出队的元素吧,是让他自己出队吧,然后把这个出队的元素值带回来,再在主函数中输出吧,没给你改,嘿嘿嘿嘿
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 5
typedef struct k
{
int data[MAXSIZE];
int front,rear;
int num;
}c_k; //声明循环顺序队列的数据类型
//创建循环队列
c_k *create_k()
{
c_k * cq=(c_k *)malloc(sizeof(c_k)); //开辟循环队列的空间,并将地址存到变量cq中
cq->front=-1;
cq->rear=-1;
cq->num=0;//初始化为空队列
return cq;//返回队列的地址
}

int In_ck(c_k * cq,int *x)//-----在传的时候是个地址,所以这要用int *x-------///如果要用int x的话,在调用该函数时就要写成In_ck(cq,rear_x)--//
{
if(cq->num==MAXSIZE)//队列已满
{
printf("The c_k is full!\n");return -1;
}
else//队列不满
{
cq->rear=(cq->rear+1)%MAXSIZE;//形成循环
cq->data[cq->rear]=*x;/////------传的是地址,所以这要用*x----/////
cq->num++;//队列中元素个数增1
return 1;
}
}
//出队
int Out_ck(c_k * cq, int *x)//对cq所指向的队列出队,将队首元素存到x所指向的变量,并返回是否出队成功
{
if(cq->num==0)//队列为空
{
printf("The k is null!\n");return -1;
}
else//队列非空
{
cq->front=(cq->front+1)%MAXSIZE;//形成循环
*x=cq->data[cq->front];//将队首元素存到x所指向的变量
cq->num--;//队列中元素个数减1
return 1;
}
}
void main()
{
//调用创建队列函数
c_k * cq=create_k();
int rear_x,front_x;
int op,result;
printf("\n请输入 1入队,2出队,3退出:\n");
scanf("%d",&op);
while(op!=3)
{
switch(op)
{
case 1:printf("请入入队元素:\n");
scanf("%d",&rear_x);////----这要加&号,!!!!!
if((result=In_ck(cq,&rear_x))==1)////----加了一个if语句,在队空时就不输出元素了-----////
printf("入对元素是 %d\n",rear_x);
break;
case 2:printf("请输入出队元素:\n");
scanf("%d",&front_x);////----这要加&号,!!!!!
if ((result= Out_ck(cq,&front_x))==1)////----加了一个if语句,在队空时就不输出元素了-----////
printf("出对元素是 %d\n",front_x);
break;
}
printf("\n请输入 1入队 2出队 3退出:\n");scanf("%d",&op);
}
free(cq); /////---动态开辟的,用后要用free()释放;---////
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式