#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct linklist {
int data;
struct linklist *next;
}linklist_t;
typedef struct linkqueue {
linklist_t *front, *rear;
}linkqueue_t;
linkqueue_t *create_linkqueue(void);
int is_empty_linkqueue(linkqueue_t *q);
int in_linkqueue(linkqueue_t *q, int x);
int out_linkqueue(linkqueue_t *q);
void show_linkqueue(linkqueue_t *q);
#endif
#include "linkqueue.h"
linkqueue_t *create_linkqueue(void)
{
linkqueue_t *q = (linkqueue_t *)malloc(sizeof(linkqueue_t));
q->front = q->rear = (linklist_t *)malloc(sizeof(linklist_t *));
q->front->next = NULL;
return q;
}
int is_empty_linkqueue(linkqueue_t *q)
{
return q->front == q->rear;
}
int in_linkqueue(linkqueue_t *q, int x)
{
int ret = (q != NULL);
if (ret)
{
linklist_t *node = (linklist_t *)malloc(sizeof(linklist_t));
node->data = x;
node->next = NULL;
q->rear->next = node; // 指向
q->rear = node; // 移动
}
return ret;
}
int out_linkqueue(linkqueue_t *q)
{
if (is_empty_linkqueue(q))
{
puts("q is empty \n");
return -1;
}
int ret = (q != NULL);
if (ret)
{
linklist_t *del = q->front->next;
ret = del->data;
q->front = q->front->next;
free(del);
del = NULL;
}
return ret;
}
void show_linkqueue(linkqueue_t *q)
{
if (is_empty_linkqueue(q))
{
puts("q is empty \n");
return;
}
linklist_t *p = q->front;
while(p->next)
{
printf("%d \n", p->next->data);
p = p->next;
}
putchar(10);
}
int main(int argc, const char *argv[])
{
int i = 0;
linkqueue_t *q = create_linkqueue();
for (i = 0; i < 10 ; i++)
in_linkqueue(q, i);
show_linkqueue(q);
for (i = 0; i < 14; i++)
out_linkqueue(q);
show_linkqueue(q);
return 0;
}