/*LinkQueue.h函数*/
#ifndef _LINKQUEUE_H_
#define _LINKQUEUE_H_
#define SUCCESS 100000
#define FAILURE -100000
typedef int Elemtype;
struct Node
{
Elemtype data;
struct Node *next;
};
typedef struct Node Node;
struct Queue
{
Node *front;
Node *rear;
};
typedef struct Queue LinkQueue;
int InitQueue(LinkQueue *Q);
int EnQueue(LinkQueue *Q,Elemtype e);
int LengthQueue(LinkQueue *Q);
int DeQueue(LinkQueue *Q,Elemtype *e);
int TraverseQueue(LinkQueue *Q);
#endif
/*Main.c 函数*/
#include <stdio.h>
#include "LinkQueue.h"
int main()
{
LinkQueue LinkQueue;
int ret;
int i;
Elemtype e;
ret = InitQueue(&LinkQueue);
if(SUCCESS == ret)
{
printf("Init success!\n");
}
else
{
printf("Init failure!\n");
}
for(i = 0;i < 5;i++)
{
ret = EnQueue(&LinkQueue,i);
if(SUCCESS == ret)
{
printf("Enter %d success!\n",i);
}
else
{
printf("Enter %d failure!\n",i);
}
}
ret = LengthQueue(&LinkQueue);
printf("The length :%d\n",ret);
for(i = 0;i < 2;i++)
{
ret = DeQueue(&LinkQueue,&e);
if(SUCCESS == ret)
{
printf("Delete %d success!\n",e);
}
else
{
printf("Delete failure!\n");
}
}
ret = LengthQueue(&LinkQueue);
printf("The length :%d\n",ret);
ret = TraverseQueue(&LinkQueue);
if(SUCCESS == ret)
{
printf("Traverse success!\n");
}
else
{
printf("Traverse failure!\n");
}
return 0;
}
/*LinkQueue.c函数*/
#include <stdio.h>
#include "LinkQueue.h"
#include <stdlib.h>
int InitQueue(LinkQueue *Q)
{
Node *p = (Node *)malloc(sizeof(Node));
if(NULL == p)
{
return FAILURE;
}
Q->front = p;
Q->rear = p;
p->next = NULL;
return SUCCESS;
}
int EnQueue(LinkQueue *Q,Elemtype e)
{
Node *p = (Node *)malloc(sizeof(Node));
if(NULL == p)
{
return FAILURE;
}
p->data = e;
p->next = Q->rear->next;
Q->rear->next = p;
Q->rear = p;
return SUCCESS;
}
int LengthQueue(LinkQueue *Q)
{
int len = 0;
Node *p = Q->front->next;
while(p)
{
len++;
p = p->next;
}
printf("len:%d\n",len);
return len;
}
int DeQueue(LinkQueue *Q,Elemtype *e)
{
if(Q->front == Q->rear)
{
return FAILURE;
}
Node *p = Q->front->next;
if(NULL == p)
{
return FAILURE;
}
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p)
{
Q->rear = Q->front;
}
free(p);
return SUCCESS;
}
int TraverseQueue(LinkQueue *Q)
{
if(Q->front == Q->rear)
{
return FAILURE;
}
Node *p = Q->front->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return SUCCESS;
}