第一 队列的链式的接口
1 头文件
#ifndef LINK_QUEUE
#define LINK_QUEUE
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
struct Node //结点信息
{
int data;
struct Node *next;
};
typedef struct Node node;
struct Queue //队列信息
{
node *front;
node *rear;
};
typedef struct Queue queue;
int InitQueue(queue *q);
int EnterElem(queue *q, int e);
int EmptyQueue(queue q);
int LengthQueue(queue q);
int DeleteQueue(queue *q);
int clear(queue *q);
int destroy(queue *q);
#endif
2 主函数
#include “LinkQueue.h”
#include <stdio.h>
int main()
{
queue q;
int ret;
ret = InitQueue(&q);
if(FAILURE ==ret )
{
printf("init failed!\n");
}
else if(SUCCESS == ret)
{
printf("init success!\n");
}
int i;
for( i = 0;i < 5; i++)
{
ret = EnterElem(&q,i+1);
if(FAILURE ==ret )
{
printf("enter failed!\n");
}
else if(SUCCESS == ret)
{
printf("enter %d success!\n",i +1);
}
}
ret = EmptyQueue(q);
if (ret == TRUE)
{
printf("queue is empty\n");
}
else if(ret == FALSE)
{
printf("queue is not empty\n");
}
ret = LengthQueue(q);
printf ("length is %d\n",ret);
ret = DeleteQueue(&q);
if(ret == FAILURE)
{
printf("delete failure\n");
}
else
{
printf("delete %d success\n", ret);
}
ret = clear(&q);
{
if(FAILURE == ret)
{
printf("clear failure!\n ");
}
else
{
printf("clear success!\n");
}
}
ret = destroy(&q);
{
if(FAILURE == ret)
{
printf("destory failure!\n");
}
else
{
printf("destory success!\n");
}
}
for( i = 0;i < 5; i++)
{
ret = EnterElem(&q,i+1);
if(FAILURE ==ret )
{
printf("enter failed!\n");
}
else if(SUCCESS == ret)
{
printf("enter %d success!\n",i +1);
}
}
return 0;
}
三 函数库
#include “LinkQueue.h”
#include <stdlib.h>
int InitQueue(queue *q)
{
if(NULL == q)
{
return FAILURE;
}
node *s = (node *)malloc(sizeof(node) * 1);
if(NULL == s)
{
return FAILURE;
}
q->front = q->rear = s;
s->next = NULL;
return SUCCESS;
}
int EnterElem(queue *q, int e)
{
if(q == NULL || q->front == NULL || q->rear == NULL)
{
return FAILURE;
}
node *n = (node *)malloc(sizeof(node) * 1);
if(NULL == n)
{
return FAILURE;
}
n->data = e;
n->next = NULL;
q->rear->next = n;
q->rear = n;
return SUCCESS;
}
int EmptyQueue(queue q)
{
return (q.front == q.rear) ? TRUE : FALSE;
}
int LengthQueue(queue q)
{
node *n = q.front;
int count = 0;
while(n->next)
{
count++;
n = n->next;
}
return count;
}
int DeleteQueue(queue *s)
{
int a;
if(s == NULL || s->front == NULL || s->rear == NULL)
{
return FAILURE;
}
node *n = s->front->next;
a = n->data;
s->front->next = n->next;
if(s->front->next == NULL)
{
s->rear = s->front;
}
free(n);
return a;
}
int clear(queue *q)
{
if(NULL == q || q->front == NULL || q->rear == NULL)
{
return FAILURE;
}
node *p = q->front->next;
while(p)
{
q->front->next = p->next;
free(p);
p = q->front->next;
}
q->rear = q->front;
return SUCCESS;
}
int destroy(queue *q)
{
if(NULL == q)
{
return FAILURE;
}
free(q->front);
q->front = q->rear =NULL;
return SUCCESS;
}