就是要注意下,有个结点是特殊的,那就是队列结点,一个是要指向链表的第一个结点,一个是要指向链表的第二个结点。元素类型是跟其他普通链表结点一样的。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *node;
typedef struct QNode *Queue;
struct Node{
int data;
struct Node *next;
};
struct QNode{
node front;
node rear;
};
Queue Init(Queue PtrQ) {
PtrQ = (Queue) malloc (sizeof(struct QNode));
PtrQ->front = PtrQ->rear = NULL;
return PtrQ;
}
void InsertQ(Queue PtrQ, int x) {
node n;
n = (node) malloc (sizeof(struct Node));
n->data = x;
n->next = NULL;
if(PtrQ->rear == NULL)
PtrQ->rear = PtrQ->front = n;
PtrQ->rear->next = n;
PtrQ->rear = n;
}
int DeleteQ(Queue PtrQ) {
int x;
node n;
if(PtrQ->front == NULL)
{
printf("队为空");
return -1;
}
if(PtrQ->front == PtrQ->rear)
{
x = PtrQ->front->data;
PtrQ->front = PtrQ->rear = NULL;
return x;
}
n = PtrQ->front;
PtrQ->front = PtrQ->front->next;
x = n->data;
free(n);
return x;
}
int main()
{
Queue que;
que = Init(que);
for(int i = 0; i < 5; i++)
InsertQ(que,i+1);
for(int i = 0; i < 5; i++)
printf("%d ", DeleteQ(que));
return 0;
}