为什么运行到这里就不行了
#include<stdio.h>#include<malloc.h>
#include<stdlib.h>
//循环队列的内核是个数组,因此可以如下定义来确定一个队列
typedef struct queue
{
int *pbase;
int rear; //表示rear所指向的位置
int front; //同理,表示front所指向的位置
}QUEUE,* PQUEUE;
void init(PQUEUE);
bool en_queue(PQUEUE, int);
bool is_full(PQUEUE);
void traverse(PQUEUE);
bool out_queue(PQUEUE);
bool is_empty(PQUEUE);
int main(void)
{
int i,n,n1 = 0,val;
QUEUE Q;
init(&Q);
printf("要添加几个元素");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
printf("请输入要添加的第%d个元素的值",i+1);
scanf("%d", &val);
en_queue(&Q, val);
}
traverse(&Q);
printf("要删除几个元素");
scanf("%d", &n1);
for(int j = 0; j < n1; j++)
{
printf("%d个元素已经被删除\n",j+1);
out_queue(&Q);
}
traverse(&Q);
return 0;
}
void init(PQUEUE Q)
{
//分配内存
Q->pbase = (int*)malloc(sizeof(int)*6);
if(Q->pbase == NULL)
{
printf("动态内存分配失败,程序终止");
exit(-1);
}
Q->front = 0;
Q->rear = 0;
}
bool en_queue(PQUEUE Q,int val) //入队
{
if(is_full(Q))
{
return false;
}
else
{
Q->pbase[Q->rear] = val;
Q->rear = (Q->rear+1)%6;
return true;
}
}
bool is_full(PQUEUE Q)
{
if((Q->rear+1)%6 == Q->front)
{
return true;
}
else
{
return false;
}
}
void traverse(PQUEUE Q)
{
int p = Q->front;
while(p != Q->rear)
{
printf("%d ", Q->pbase[p]);
p = (p+1)%6;
}
printf("\n");
}
bool out_queue(PQUEUE Q)
{
if(is_empty(Q))
{
int p = 0;
p = Q->pbase[Q->front];
Q->front = (Q->front+1)%6;
printf("被出列的元素是%d\n", p);
return true;
}
else
{
return false;
}
}
bool is_empty(PQUEUE Q)
{
if(Q->rear = Q->front)
{
return false;
}
else
{
return true;
}
}
在VC++6.0中的结果:
要添加几个元素5
请输入要添加的第1个元素的值3
请输入要添加的第2个元素的值9
请输入要添加的第3个元素的值1
请输入要添加的第4个元素的值7
请输入要添加的第5个元素的值6
3 9 1 7 6
要删除几个元素2
1个元素已经被删除
被出列的元素是3
2个元素已经被删除 //为什么只执行到这里,没有像上一句那样提示出列的元素
Press any key to continue