#include
"global.h"
typedef
struct
QNode
{
ElemType
data;
struct
QNode
*next;
}*
QueuePtr
;
typedef
struct
{
QueuePtr
front;
QueuePtr
rear;
}
LinkQueue
;
Status
InitQueue(
LinkQueue
&
Q
)
{
Q
.rear=
Q
.front=(
QueuePtr
)malloc(
sizeof
(
QNode
));
if
(!
Q
.rear) exit(
OVERFLOW
);
Q
.front->next=
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
EnQueue(
LinkQueue
&
Q
,
ElemType
e
)
//插入元素e为Q的新队尾元素
{
QNode
*temp;
if
(!(temp=(
QueuePtr
)malloc(
sizeof
(
QNode
))))
exit(
OVERFLOW
);
temp->data=
e
;
temp->next=
NULL
;
Q
.rear->next=temp;
Q
.rear=temp;
return
OK
;
}
Status
DeQueue(
LinkQueue
&
Q
,
ElemType
&
e
)
{
if
(
Q
.front==
Q
.rear)
return
ERROR
;
QueuePtr
temp=
Q
.front->next;
e
=temp->data;
Q
.front->next=temp->next;
if
(
Q
.rear==temp)
Q
.rear=
Q
.front;
//temp是最后一个元素,将要被删掉,此时要更新Q.rear。
free(temp);
return
OK
;
}
//主函数
//Link_Queue(链式队列)
LinkQueue
Q;
InitQueue(Q);
for
(
int
i=0;i<100;i++)
EnQueue(Q,i);
while
(Q.front!=Q.rear)
{
DeQueue(Q,e);
printf(
"%4d"
,e);
if
(e%10==9)
printf(
"\n"
);
}
if
(Q.front==Q.rear)
puts(
"The queue is empty!"
);