user-0 提问: 队列操作问题

回复:
user: user-1
content: 大佬们都好厉害，小弟前来学习学习，大家共同一起进步！！！！

user: user-2
content: 引用 9 楼 Zhi Zhao 的回复:但是这个是循环队列，数组的容量并没有增加   #include<stdio.h> #include<stdlib.h>  typedef int ElementType; typedef struct {     ElementType *array;     int front;     int rear;     int capacity;   // 队列总容量 }SeqQueue;  // 循环队列的创建 SeqQueue *createQueue(int capacity) {     SeqQueue *q;     q=(SeqQueue *)malloc(sizeof(SeqQueue));      q->front=q->rear=0;     q->capacity=capacity;     q->array=(ElementType *)malloc(sizeof(ElementType)*capacity);      return q; }  // 入队 int push(SeqQueue *q,ElementType x) {     if( (q->rear+1) % q->capacity == q->front){         q->array[q->rear]=x;         q->rear=(q->rear+1) % q->capacity;         return 0;     }       // 队列已满     printf("+++%d\n", x);     q->array[q->rear]=x;     q->rear=(q->rear+1) % q->capacity;      return 1; }  // 出队 int pop(SeqQueue *q,ElementType *x) {     if(q->rear == (q->front + 1) % q->capacity)     // 队列为空     {         *x = q->array[q->front];         q->front=(q->front+1) % q->capacity;         return 0;     }     *x = q->array[q->front];     q->front=(q->front+1) % q->capacity;      return 1; }  int main() {     int b,i,N;     SeqQueue *p;      printf("请输入数组的大小：\n");     scanf("%d",&N);     printf("\n");     p=createQueue(N);      printf("请输入数字：\n");     for(i=0;i<N;i++)     {         scanf("%d",&b);         push(p,b);     }     printf("front = %d,rear= %d\n", p->front, p->rear);     while(pop(p,&b))     {         printf("%d ",b);     }     printf("%d\n", b);     return 0; }  供参考～

user: user-3
content: 假设数组的容量为4(下标0-3)，因为队列下标的问题，所以这句    if( (q->rear+1) % q->capacity == q->front) // 队列已满         return 0;的判断必须是+1的，所以当队列下标到3的时候，正确的判断是队列未满的，但这里的判断是队列已满的条件了。

user: user-0
content: 但是这个是循环队列，数组的容量并没有增加

user: user-3
content: 见注释，供参考：#include<stdio.h> #include<stdlib.h>  typedef int ElementType;  typedef struct {     ElementType *array;     int         front;     int         rear;     int         capacity;   // 队列总容量 }SeqQueue;  // 循环队列的创建 SeqQueue *createQueue(int capacity) {     SeqQueue *q;     q=(SeqQueue *)malloc(sizeof(SeqQueue));      q->front=q->rear=0;     q->capacity=capacity+1; //这里要和入队，出队时的+1同步     q->array=(ElementType *)malloc(sizeof(ElementType)*capacity);     return q; }  // 入队 int push(SeqQueue *q,ElementType x) {     if( (q->rear+1) % q->capacity == q->front) // 队列已满         return 0;     q->array[q->rear]=x;     q->rear=(q->rear+1) % q->capacity;     return 1; }  // 出队 int pop(SeqQueue *q,ElementType *x) {     if (q->rear==q->front)     // 队列为空        return 0;     *x=q->array[q->front];     q->front=(q->front+1) % q->capacity;     return 1; }  int main() {     int b,i,N;     SeqQueue *p;      printf("请输入数组的大小：\n");     scanf("%d",&N);     printf("\n");     p=createQueue(N);      printf("请输入数字：\n");     for (i=0;i<N;i++)         {            scanf("%d",&b);            push(p,b);         }     while(pop(p,&b))        {           printf("%d ",b);        }     printf("\n");          return 0; }

user: user-0
content: #include<stdio.h> #include<stdlib.h>  typedef int ElementType; typedef struct { 	ElementType *array; 	int front; 	int rear; 	int capacity;   // 队列总容量 }SeqQueue;  // 循环队列的创建 SeqQueue *createQueue(int capacity) { 	SeqQueue *q; 	q=(SeqQueue *)malloc(sizeof(SeqQueue));  	q->front=q->rear=0; 	q->capacity=capacity; 	q->array=(ElementType *)malloc(sizeof(ElementType)*capacity);  	return q; }  // 入队 int push(SeqQueue *q,ElementType x) { 	if( (q->rear+1) % q->capacity == q->front)       // 队列已满 		return 0; 	q->array[q->rear]=x; 	q->rear=(q->rear+1) % q->capacity;  	return 1; }  // 出队 int pop(SeqQueue *q,ElementType *x) { 	if(q->rear==q->front)     // 队列为空 		return 0; 	*x=q->array[q->front]; 	q->front=(q->front+1) % q->capacity;  	return 1; }  int main() { 	int b,i,N; 	SeqQueue *p;  	printf("请输入数组的大小：\n"); 	scanf("%d",&N); 	printf("\n"); 	p=createQueue(N);  	printf("请输入数字：\n"); 	for(i=0;i<N;i++) 	{ 		scanf("%d",&b); 		push(p,b); 	} 	while(pop(p,&b)) 	{ 		printf("%d ",b); 	} 	printf("\n"); 	return 0; }

user: user-4
content: 到pop(SeqQueue* Q, int* e)这个函数里面找问题，估计边界判断错了。

user: user-2
content: 代码不全不能准确定位到问题所在～

user: user-5
content: 阅，再接再厉，再创辉煌。