实现链队列的初始化,销毁、判断队列是否为空,取队头元素,入队,出队等操作。
不知道为什么出错了,编译的时候无报错无警告,但是一运行就不行,
会出现这个提示信息Process exited with return value 3221225477
#include
#include
#define OK 1
#define ERROR 0
typedef int Status;
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//初始化
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
{
return ERROR;
}
Q.front = Q.rear = NULL;
return OK;
}
//销毁
Status DestroyQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return OK;
}
//判空
Status QueueEmpty(LinkQueue Q)
{
return (Q.front == Q.rear);
}
//取队头元素
Status GetHead(LinkQueue Q,QElemType &e)
{
if(Q.front == Q.rear)
{
return ERROR;
}
e = Q.front->next->data;
return OK;
}
//入队
Status EnQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p)
{
return ERROR;
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
//出队
Status DeQueue(LinkQueue &Q,QElemType &e)
{
if(Q.front == Q.rear)
{
return ERROR;
}
QNode *p;
// QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
// if(!p)
// {
// return ERROR;
// }
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p)
{
Q.rear = Q.front;
}
free(p);
return OK;
}
int main()
{
LinkQueue Q;
QElemType e;
InitQueue(Q);
QueueEmpty(Q);
printf("输入链队列元素\n");
for(int i=0;e!='\n';i++)
{
scanf("%d",&e);
EnQueue(Q,e);
}
// EnQueue(Q,1);
// EnQueue(Q,2);
// EnQueue(Q,3);
// EnQueue(Q,4);
// EnQueue(Q,5);
// DeQueue(Q,e);
// GetHead(Q,e);
// DestroyQueue(Q);
return OK;
}
初始化函数里面,已经malloc赋值了为啥还需要下面的代码
Q.front = Q.rear = NULL; 变成NULL后面都用不了。
这样后面引用都是空了,程序应该是跑飞了