sinat_25885723 2015-09-05 04:23 采纳率: 60%
浏览 1994
已采纳

关于c语言实现队列的算法,总会出现内存方面错误,求高人指明错误

//实现一个队列,任意输入一串字符,以999为结束标志,然后打出队列中的数据
//定义队列
typedef struct QNode
{
int data;
QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQuede;
//初始化一个链队
void initQueue(LinkQuede *p)
{
p->front = p->rear = new QNode;
if (!p->front) exit(0);
p->front->next = NULL;
}
//入队
void Enqueue(LinkQuede *p,int e)
{
QueuePtr q;
q = new QNode;
if (!q) exit(0);
q->next = NULL;
q->data = e;
p->rear->next = q;
p->rear = q;
}
//出队
void Dequeue(LinkQuede *p,int*e)
{
if (p->front == p->rear) exit(0);
QueuePtr q = new QNode;
if (!q)exit(0);
q = p->front->next;
*e = q->data;
p->front->next = q->next;
delete q;
}//销毁队列
void destryQueue(LinkQuede *p)
{
while (p->front)
{
p->rear = p->front->next;
delete(p->front);
p->front = p->rear;
}
}//测试程序
int main()
{
int e;
LinkQuede q;
initQueue(&q);
cout << "请输入一个队列:" << endl;
cin >> e;
while (e != 999)
{
Enqueue(&q,e);
cin >> e;
}
cout << "打印队列元素:" << endl;
while (q.front != q.rear)
{
Dequeue(&q,&e);
cout << e << " ";
}
cout << endl;
destryQueue(&q);
if (q.front == q.rear)
cout << "ok" << endl;
system("pause");
return 0;
}

  • 写回答

5条回答 默认 最新

  • 纵横车 2015-09-05 04:36
    关注

    只是输出队列的时候循环越界了,写成这样试试。

    while (q.front->next != NULL)
    {
            Dequeue(&q,&e);
            cout << e << " ";
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题