linkqueue.h
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
typedef int DATATYPE;
typedef struct node {
DATATYPE data;
struct node *next;
}QueueNode;
typedef struct queue {
QueueNode *head;
int clen;
QueueNode *tail;
}LinkQueue;
LinkQueue *CreateLinkQueue();
int EnterLinkQueue(LinkQueue *queue, DATATYPE *data);
int QuitLinkQueue(LinkQueue *queue);
int IsEmptyLinkQueue(LinkQueue *queue);
int DestroyLinkQueue(LinkQueue *queue);
DATATYPE * GetHeadLinkQueue(LinkQueue *queue);
int GetSizeLinkQueue(LinkQueue *queue);
#endif // LINKQUEUE_H
linkqueue.c
#include"linkqueue.h"
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
LinkQueue *CreateLinkQueue()
{
LinkQueue *lq = malloc(sizeof(LinkQueue));
if(lq == NULL)
{
perror("create error.malloc1");
return NULL;
}
lq->clen = 0;
lq->head = NULL;
lq->tail = NULL;
return lq;
}
int EnterLinkQueue(LinkQueue *queue, DATATYPE *data)
{
QueueNode *newnode = malloc(sizeof(QueueNode));
if(newnode == NULL)
{
perror("enter error.malloc");
return -1;
}
newnode->next = NULL;
memcpy(&newnode->data,data,sizeof(DATATYPE));
if(IsEmptyLinkQueue(queue))
{
queue->head = newnode;
queue->tail = newnode;
}
else
{
queue->tail->next = newnode;
queue->tail = newnode;
}
queue->clen++;
return 0;
}
int QuitLinkQueue(LinkQueue *queue)
{
if(IsEmptyLinkQueue(queue))
{
fprintf(stderr,"linkqueue is null\n");
return -1;
}
QueueNode *tmp = queue->head;
queue->head = queue->head->next;
if(IsEmptyLinkQueue(queue))
{
queue->tail = NULL;
}
free(tmp);
queue->clen--;
return 0;
}
int IsEmptyLinkQueue(LinkQueue *queue)
{
return 0 == queue->clen;
}
int DestroyLinkQueue(LinkQueue *queue)
{
int len = GetSizeLinkQueue(queue);
int i = 0;
for(i = 0;i < len;i++)
{
QuitLinkQueue(queue);
}
free(queue);
return 0;
}
DATATYPE *GetHeadLinkQueue(LinkQueue *queue)
{
if(IsEmptyLinkQueue(queue))
{
fprintf(stderr,"linkqueue is null\n");
return NULL;
}
return &queue->head->data;
}
int GetSizeLinkQueue(LinkQueue *queue)
{
return queue->clen;
}