哪位高手能帮我看看下面这段程序,编译和链接都没错,但是执行的时候会出错,弹出一个程序终止的对话框

2024年11月17日 01:32
有1个网友回答
网友(1):

# include
# include
# include

typedef struct Node
{
int Data; // 数据域;
struct Node * pNext; // 指针域,指向下一个节点;
}QNODE, * PQNODE;

typedef struct Queue
{
PQNODE rear; // 队尾指针;
}LinkQueue;

// 前置声明;
void init_Queue(LinkQueue *); // 初始化循环链队列;
bool is_empty(LinkQueue); // 判断队列是否为空;
void en_Queue(LinkQueue,int); // 入队;

int main(void)
{
LinkQueue Q;
Q.rear = NULL;

init_Queue(&Q);

en_Queue(Q, 1);

return 0;
}

void init_Queue(LinkQueue *Q)
{
Q->rear = (PQNODE)malloc(sizeof(QNODE));

if (NULL == Q->rear)
{
printf("内存不足,初始化循环链队列失败!程序终止!\n");
exit(-1);
}

Q->rear->pNext = Q->rear; // 构建循环链队列;
printf("创建循环链队列成功!\n");

return;
}

bool is_empty(LinkQueue Q)
{
if (Q.rear == Q.rear->pNext)
return true;
else
return false;
}

void en_Queue(LinkQueue Q, int val)
{
PQNODE p = (PQNODE)malloc(sizeof(QNODE));

if (NULL == p)
{
printf("内存不足,入队失败!\n");
exit(-1);
}

p->Data = val;
p->pNext = Q.rear->pNext; // 倒数第7行;
Q.rear->pNext = p;
Q.rear = p;
printf("元素%d入队成功!\n", val);

return;
}

你参数传递的是变量的值,在init_Queue修改不了Q的值,当init_Queue返回后,Q.rear仍然为NULL。以上是修改后的代码