//实现一个队列,任意输入一串字符,以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;
}
只是输出队列的时候循环越界了,写成这样试试。
while (q.front->next != NULL)
{
Dequeue(&q,&e);
cout << e << " ";
}
错误是什么?????
这个应是指针等出错了,你断点跟踪调试一下。
LinkQuede q;
initQueue(&q);
cout << "请输入一个队列:" << endl;
cin >> e;
while (e != 999)
{
Enqueue(&q,e);
cin >> e;
这是越界了吧,输出看一下