问题描述
代码运行时出现冲突
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 6
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue;
void InitQueue(SqQueue& Q) {
//Q.front = Q.rear=0;
Q.rear = Q.front;//未初始化
}
bool isEmpty(SqQueue& Q) {
if (Q.front == Q.rear)
{
return true;
}return false;
}
bool EnQueue(SqQueue& Q,ElemType x) {//入队
if ((Q.rear+1)%MaxSize==Q.front)
{
return false;
}
Q.data[Q.rear] = x;//写入位置发生冲突,原因:指针未初始化;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
bool DeQueue(SqQueue& Q, ElemType& x) {
if (Q.front==Q.rear)
{
return false;
}
x = Q.data[Q.front];
Q.front = (Q.front - 1) % MaxSize;
return true;
}
int main() {
SqQueue Q;
bool ret;
ElemType x;
InitQueue(Q);
ret = isEmpty(Q);
if (ret)
{
printf("队列为空\n");
}
else
{
printf("队列不空\n");
}
EnQueue(Q, 3);
EnQueue(Q, 4);
EnQueue(Q, 5);
ret = EnQueue(Q, 6);
ret = EnQueue(Q, 7);
if (ret)
{
printf("入队成功\n");
}
else
{
printf("入队失败\n");
}
ret = DeQueue(Q, x);
if (ret)
{
printf("出队成功元素值为%d\n",x);
}
else
{
printf("出队失败\n");
}
return 0;
}
原因分析:
提示:未对指针进行初始化
解决方案:
提示:在初始化InitQueue()中rear=front=0