#ifndef _LINKQUEUE_H
#define _LINKQUEUE_H
typedef char linkqueue_data_t;
//链表的结构体
typedef struct node{
linkqueue_data_t data;
struct node *next;
}lst_node,*lst_pnode;
//存头尾的结构体
typedef struct linkqueue{
lst_pnode tail;
lst_pnode head;
}lkq_node,*lkq_pnode;
//创建
lkq_pnode create_linkqueue();
//判空
int empty_linkqueue(lkq_pnode Q);
//打印
int show_linkqueue(lkq_pnode Q);
//入队
int e_linkqueue(lkq_pnode Q, linkqueue_data_t data);
//出队
linkqueue_data_t d_linkqueue(lkq_pnode Q);
#endif
#include "linkqueue.h"
#include
#include
//创建
lkq_pnode create_linkqueue()
{
lst_pnode L = (lst_pnode)malloc(sizeof(lst_node));
if(NULL == L)
{
printf("malloc1 is default\n");
return NULL;
}
L->next = NULL;
lkq_pnode Q= (lkq_pnode)malloc(sizeof(lkq_node));
if(NULL == Q)
{
printf("malloc2 is default\n");
return NULL;
}
Q->head = Q->tail = L;
return Q;
}
//判空
int empty_linkqueue(lkq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
if(Q->head == Q->tail)
return 0;
else
return -1;
}
//打印
int show_linkqueue(lkq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
if(0 == empty_linkqueue(Q))
{
printf("Q is empty\n");
return -1;
}
lst_pnode t = Q->head;
while(t->next)
{
t = t->next;
printf("data=%c ", t->data);
}
puts("");
return 0;
}
//入队
int e_linkqueue(lkq_pnode Q, linkqueue_data_t data)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
lst_pnode p = (lst_pnode)malloc(sizeof(lst_node));
if(NULL == p)
{
printf("malloc1 is default\n");
return -1;
}
p->data = data;
Q->tail->next = p;
p->next = NULL;
Q->tail = Q->tail->next;
return 0;
}
//出队
linkqueue_data_t d_linkqueue(lkq_pnode Q)
{
if(NULL == Q)
{
printf("Q is NULL\n");
return -1;
}
if(0 == empty_linkqueue(Q))
{
printf("Q is empty\n");
return -1;
}
lst_pnode temp = Q->head->next;
Q->head->next = temp->next;
linkqueue_data_t data = temp->data;
if(temp->next == NULL)
Q->tail = Q->head;
free(temp);
return data;
}
#include "linkqueue.h"
#include
int main()
{
lkq_pnode Q = create_linkqueue();
int i;
for(i = 0; i < 7; i++)
{
e_linkqueue(Q,i+48);
}
show_linkqueue(Q);
for(i = 0; i < 7; i++)
{
printf("data=%c\n", d_linkqueue(Q));
}
}