出队列函数实现的问题

diaoxue 2008-03-23 10:37:13
void DeQueue(LinkQueue &Q,QElemType &e)
{
//printf("Invoke DeQueue.");
if(Q.front->next==Q.rear)//
exit(1);
QNode *p;
p=(QueuePtr) malloc (sizeof(QNode));//==========error
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
// printf("Invoke success.");not execute.
}
我单步的时候,单步到e=p->data那句就不行了,好像是出现异常了。
...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
diaoxue 2008-03-26
  • 打赏
  • 举报
回复
if(Q.front==Q.rear)
exit(1);
程序运行到这里就终止了。
diaoxue 2008-03-26
  • 打赏
  • 举报
回复
为什么不能输出出队列的元素呢
diaoxue 2008-03-26
  • 打赏
  • 举报
回复
改了后,怎么没有输出啊
//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//using namespace std;

typedef int QElemType;

typedef struct QNode{
QElemType data;
struct QNode *next;
}Queue,*QueuePtr;

typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//==================初始化队列=======================
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front)//////
exit(1);
Q.front->next=NULL;
}
//===================入队列=========================
void EnQueue(LinkQueue &Q,QElemType e)
{
QNode *p;
p=(QueuePtr) malloc (sizeof(QNode));//==========error
if(!p)
{
//cout<<"内存不足!\n";
exit(1);
}
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
//====================出队列========================
void DeQueue(LinkQueue &Q,QElemType &e)
{
//printf("Invoke DeQueue.");
//if(Q.front->next==Q.rear)
if(Q.front==Q.rear)
exit(1);
QNode *p;
// p=(QueuePtr) malloc (sizeof(QNode));//==========error
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
// printf("Invoke success.");not execute.
}
//===================销毁队列========================
void DestroyQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
}
//===================打印队列=========================
void DisplayQueue(LinkQueue &Q)
{
QueuePtr p=Q.front->next;
// while(Q.front->next)
while(p)
{
// printf("%d",Q.front->next->data);
printf(" %d ",p->data);
Q.front=Q.front->next;
p=Q.front->next;
// p=p->next;
}
}
int main()
{
const int n=5;
int a[n],
i,
e=0;
LinkQueue Q;
InitQueue(Q);
for(i=0;i<n && scanf("%d",&a[i]);i++);
for(i=0;i<n;i++)
{
EnQueue(Q,a[i]);
}
DisplayQueue(Q);
printf("\n===================\n");
printf("\n 出队列的元素为:\n ");
for(i=0;i<n;i++)
{
DeQueue(Q,e);
// printf("\n 出队列的元素为:\n ");
printf("%d \n",e);
}
return 0;
}
zjk2752 2008-03-25
  • 打赏
  • 举报
回复

void DeQueue(LinkQueue &Q,QElemType &e)
{
//printf("Invoke DeQueue.");
if(Q.front->next==Q.rear)// &&&&&&&&&
exit(1);
QNode *p;
p=(QueuePtr) malloc (sizeof(QNode));//==========error
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
// printf("Invoke success.");not execute.
}
加粗那部分没必要,因为你新申请的空间也没有用,也没必要申请。 在加了& 的地方Q.front->next应为Q.front,其它就是正确的

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧