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 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流