哪位高手能帮我看看下面这段程序,编译和链接都没错,但是执行的时候会出错,弹出一个程序终止的对话框
我自己按步骤调试了一下,好像是倒数第7行(注释中标着)除了什么问题,但是我实在看不出也想不出哪里有错误,在debug中调试也看不懂它提示的是哪里有错,请大家帮帮忙。题目的...
我自己按步骤调试了一下,好像是倒数第7行(注释中标着)除了什么问题,但是我实在看不出也想不出哪里有错误,在debug中调试也看不懂它提示的是哪里有错,请大家帮帮忙。
题目的要求是:构造一个带头结点的循环链表表示的队列,并且只设一个指针指向队尾元素(不设头指针),试编写相应的入队列和出队列的算法。
现在我只编写了入队列的算法,但是出现了问题,自己查不出来,我的运行环境是VC++ 6.0,WIN7系统,请大家帮助,谢谢!
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
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;
} 展开
题目的要求是:构造一个带头结点的循环链表表示的队列,并且只设一个指针指向队尾元素(不设头指针),试编写相应的入队列和出队列的算法。
现在我只编写了入队列的算法,但是出现了问题,自己查不出来,我的运行环境是VC++ 6.0,WIN7系统,请大家帮助,谢谢!
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
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;
} 展开
1个回答
展开全部
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
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。以上是修改后的代码
# include <malloc.h>
# include <stdlib.h>
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。以上是修改后的代码
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询