为什么我后面的进队元素不打印???
# define MAXSIZEQ 100typedef struct{
int *base;
int front;
int rear;
}SQueue;
void initQ(SQueue *Q) //初始化队元素。
{
Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
if(!Q->base)
{
printf("空间无法正常分配,对不起哦~\n");
}
Q->front=Q->rear=0;
}
void creatQ(SQueue *Q) //创建队元素
{
int n,i;
printf("请输入您要创建的元素个数:");
scanf("%d",&n);
if((Q->rear+1)%MAXSIZEQ==Q->front)
{
printf("该队已满了哦,你不可以插入了哦~\n");
}
for(i=0;i<n;i++)
{
printf("请输入第%d个元素:",i+1);
scanf("%d",&Q->base);
Q->rear=(Q->rear+1)%MAXSIZEQ;
}
}
void showQ(SQueue *Q) //显示队元素
{
int i;
if(Q->front==Q->rear)
{
printf("不可以出队了哦 此时队空~\n");
}
for(i=0;i<(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;i++)
{
printf("%d ",Q->base);
Q->front=(Q->front+1)%MAXSIZEQ;
}
printf("\n");
}
int lengthQ(SQueue *Q) //打印队长
{
int n;
n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
printf("您的队长为:%d\n",n);
return 0;
}
void isempty(SQueue *Q) //判断是否是空队列
{
if(Q->rear==Q->front)
printf("此时队列是空的哦~\n");
else
printf("此时队列不为空哦~\n");
}
void destroyQ(SQueue *Q)//销毁该队列
{
free(Q->base);
Q->front=Q->rear=0;
printf("此时队列已经被销毁了哦~\n");
}
void getQ(SQueue *Q)//查看队头元素
{
int e;
e=Q->base;
printf("您的队头元素是:%d\n",e);
}
void enQ(SQueue *Q) // 进队
{
int e;
if((Q->rear+1)%MAXSIZEQ==Q->front)
printf("此时队满了哦,不可以再进队了~\n");
else
{
printf("请写入您需要进队的元素内容:");
scanf("%d",&e);
Q->base=e;
Q->rear=(Q->rear+1)%MAXSIZEQ;
}
}
void deQ(SQueue *Q)//出队
{
if(Q->rear==Q->front)
printf("此时队空了哦,不可以再出队了~\n");
else
{
printf("您的出队元素内容为:%d\n",Q->base);
Q->front=(Q->front+1)%MAXSIZEQ;
}
}
int main()
{
SQueue Q;
initQ(&Q);
creatQ(&Q);
lengthQ(&Q);
//isempty(&Q);
//destroyQ(&Q);
//creatQ(&Q);
//getQ(&Q);
enQ(&Q);
lengthQ(&Q);
//getQ(&Q);
enQ(&Q);
lengthQ(&Q);
deQ(&Q);
lengthQ(&Q);
printf("您此时队中的元素为:");
showQ(&Q);
//lengthQ(&Q);
//isempty(&Q);
return 0;
} #include <stdio.h>
#include <stdlib.h>
# define MAXSIZEQ 100
typedef struct{
int *base;
int front;
int rear;
}SQueue;
void initQ(SQueue *Q) //初始化队元素。
{
Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
if(!Q->base)
{
printf("空间无法正常分配,对不起哦~\n");
}
Q->front=Q->rear=0;
}
void creatQ(SQueue *Q) //创建队元素
{
int n,i;
printf("请输入您要创建的元素个数:");
scanf("%d",&n);
if(Q->base) // 内存没有被销毁
{
for(i=0;i<n;i++)
{
if((Q->rear+1)%MAXSIZEQ==Q->front)
{
printf("该队已满了哦,你不可以插入了哦~\n");
break;
}
printf("请输入第%d个元素:",i+1);
scanf("%d",&Q->base);
Q->rear=(Q->rear+1)%MAXSIZEQ;
}
}
else
{
printf("队列已被销毁!\n");
}
}
void showQ(SQueue *Q) //显示队元素
{
int i, len;
if(Q->front==Q->rear)
{
printf("不可以出队了哦 此时队空~\n");
}
len = (Q->rear - Q->front + MAXSIZEQ ) % MAXSIZEQ;
for(i=0; i < len ;i++) // 你这之 Q->front这里也在 +
{
printf("%d ",Q->base);
Q->front=(Q->front+1)%MAXSIZEQ; // Q->front这里也在 +
}
printf("\n");
}
int lengthQ(SQueue *Q) //打印队长
{
int n;
n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
printf("您的队长为:%d\n",n);
return 0;
}
void isempty(SQueue *Q) //判断是否是空队列
{
if(Q->rear==Q->front)
printf("此时队列是空的哦~\n");
else
printf("此时队列不为空哦~\n");
}
void destroyQ(SQueue *Q)//销毁该队列
{
free(Q->base);
Q->front=Q->rear=0;
printf("此时队列已经被销毁了哦~\n");
}
void getQ(SQueue *Q)//查看队头元素
{
int e;
e=Q->base;
printf("您的队头元素是:%d\n",e);
}
void enQ(SQueue *Q) // 进队
{
int e;
if((Q->rear+1)%MAXSIZEQ==Q->front)
printf("此时队满了哦,不可以再进队了~\n");
else
{
printf("请写入您需要进队的元素内容:");
scanf("%d",&e);
Q->base=e;
Q->rear=(Q->rear+1)%MAXSIZEQ;
}
}
void deQ(SQueue *Q)//出队
{
if(Q->rear==Q->front)
printf("此时队空了哦,不可以再出队了~\n");
else
{
printf("您的出队元素内容为:%d\n",Q->base);
Q->front=(Q->front+1)%MAXSIZEQ;
}
}
int main()
{
SQueue Q;
initQ(&Q);
creatQ(&Q);
lengthQ(&Q);
//isempty(&Q);
//destroyQ(&Q);
//creatQ(&Q);
//getQ(&Q);
enQ(&Q);
lengthQ(&Q);
//getQ(&Q);
enQ(&Q);
lengthQ(&Q);
deQ(&Q);
lengthQ(&Q);
printf("您此时队中的元素为:");
showQ(&Q);
//lengthQ(&Q);
//isempty(&Q);
return 0;
}
ba21 发表于 2018-3-29 20:38
我把函数的creatQ函数改成你那样带判断的,可是为什么我销毁了线性表之后,它不执行creatQ函数中的else语句??为什么还是可以继续创建队列
# define MAXSIZEQ 100
# include<stdio.h>
# include<stdlib.h>
typedef struct{
int *base;
int front;
int rear;
}SQueue;
void initQ(SQueue *Q) //初始化队元素。
{
Q->base=(int*)malloc(MAXSIZEQ*sizeof(int));
if(!Q->base)
{
printf("空间无法正常分配,对不起哦~\n");
}
Q->front=Q->rear=0;
}
void creatQ(SQueue *Q) //创建队元素
{
int n,i;
printf("请输入您要创建的元素个数:");
scanf("%d",&n);
if(Q->base)
{
for(i=0;i<n;i++)
{
if(((Q->rear+1)%MAXSIZEQ==Q->front))
{
printf("该队已满了哦,你不可以插入了哦~\n");
break;
}
printf("请输入第%d个元素:",i+1);
scanf("%d",&Q->base);
Q->rear=(Q->rear+1)%MAXSIZEQ;
}
}
else
{
printf("队列已被销毁!\n");
}
}
void showQ(SQueue *Q) //显示队元素
{
int i,count;
if(Q->front==Q->rear)
{
printf("不可以出队了哦 此时队空~\n");
}
count=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
for(i=0;i<count;i++)
{
printf("%d ",Q->base);
Q->front=(Q->front+1)%MAXSIZEQ;
}
printf("\n");
}
int lengthQ(SQueue *Q) //打印队长
{
int n;
n=(Q->rear-Q->front+MAXSIZEQ)%MAXSIZEQ;
printf("您的队长为:%d\n",n);
return 0;
}
void isempty(SQueue *Q) //判断是否是空队列
{
if(Q->rear==Q->front)
printf("此时队列是空的哦~\n");
else
printf("此时队列不为空哦~\n");
}
void destroyQ(SQueue *Q)//销毁该队列
{
free(Q->base);
Q->front=Q->rear=0;
printf("此时队列已经被销毁了哦~\n");
}
void getQ(SQueue *Q)//查看队头元素
{
int e;
e=Q->base;
printf("您的队头元素是:%d\n",e);
}
void enQ(SQueue *Q) // 进队
{
int e;
if((Q->rear+1)%MAXSIZEQ==Q->front)
printf("此时队满了哦,不可以再进队了~\n");
else
{
printf("请写入您需要进队的元素内容:");
scanf("%d",&e);
Q->base=e;
Q->rear=(Q->rear+1)%MAXSIZEQ;
}
}
void deQ(SQueue *Q)//出队
{
if(Q->rear==Q->front)
printf("此时队空了哦,不可以再出队了~\n");
else
{
printf("您的出队元素内容为:%d\n",Q->base);
Q->front=(Q->front+1)%MAXSIZEQ;
}
}
void clearQ(SQueue *Q)
{
Q->front=Q->rear=0;
printf("此时您的队列已经被清空了哦\n");
}
int main()
{
SQueue Q;
initQ(&Q);
creatQ(&Q);
lengthQ(&Q);
clearQ(&Q);
//isempty(&Q);
destroyQ(&Q);
creatQ(&Q);
//getQ(&Q);
//enQ(&Q);
//lengthQ(&Q);
//getQ(&Q);
//enQ(&Q);
//lengthQ(&Q);
//deQ(&Q);
//lengthQ(&Q);
printf("您此时队中的元素为:");
showQ(&Q);
lengthQ(&Q);
//isempty(&Q);
return 0;
} 愿你 发表于 2018-3-29 21:53
我把函数的creatQ函数改成你那样带判断的,可是为什么我销毁了线性表之后,它不执行creatQ函数中的else语 ...
看你的上一遍 ba21 发表于 2018-3-29 22:11
看你的上一遍
啊????啥??? 愿你 发表于 2018-3-29 22:22
啊????啥???
[待解决] 关于循环队列销毁问题~{:10_262:} ba21 发表于 2018-3-29 22:35
[待解决] 关于循环队列销毁问题~
可以加个微信qq啥的吗{:10_256:}
页:
[1]