Head.H
typedef struct _qnode
{
int data;
struct _qnode *next;
}QNode, *qnode;
typedef struct _qlist
{
qnode front;
qnode rear;
}QList, *qlist;
qlist InitQueue(void);
void EnQueue(qlist Q, int num);
int DeQueue(qlist Q);
void PrintQueue(qlist Q);
Function.C
qlist InitQueue(void)
{
qlist Q = (qlist)malloc(sizeof(QList));
Q->front = (qnode)malloc(sizeof(QNode));
Q->front->next = NULL;
Q->rear = Q->front;
return Q;
}
void EnQueue(qlist Q, int num)
{
qnode newnode = (qnode)malloc(sizeof(QNode));
newnode->data = num;
newnode->next = NULL;
Q->rear->next = newnode; //连接
Q->rear = newnode; //自身后移
}
int DeQueue(qlist Q)
{
if (Q->front == Q->rear)
{
printf("The queue have no element! \n");
return;
}
int popval = 0;
if (Q->front->next == Q->rear)
{
popval = Q->rear->data;
qnode tempnode = Q->rear;
Q->rear = Q->front;
Q->front->next = NULL;
free(tempnode);
return(popval);
}
else
{
popval = Q->front->next->data;
qnode tempnode = Q->front->next;
Q->front->next = tempnode->next;
free(tempnode);
return popval;
}
}
void PrintQueue(qlist Q)
{
if (Q->front == Q->rear)
{
printf("Empty Queue ! \n");
return;
}
qnode tempnode = Q->front->next;
while (tempnode != NULL)
{
printf("%d ", tempnode->data);
tempnode = tempnode->next;
}
printf("\n");
}
Main.C
void main(void)
{
qlist Q = InitQueue();
EnQueue(Q, 1);
EnQueue(Q, 2);
EnQueue(Q, 3);
PrintQueue(Q);
printf("\n");
int popval = DeQueue(Q);
PrintQueue(Q);
printf("%d \n", popval);
printf("\n");
popval = DeQueue(Q);
PrintQueue(Q);
printf("%d \n", popval);
printf("\n");
popval = DeQueue(Q);
PrintQueue(Q);
printf("%d \n", popval);
printf("\n");
system("pause");
}