利用C语言实现顺序队列:
#ifndef _SEQUENCEQUEUE_H
#define _SEQUENCEQUEUE_H
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
typedef struct SequenceQueue
{
int data[SIZE];
int front;
int rear;
}Queue;
int QueueInit(Queue **queue);
int QueueEmpty(Queue *queue);
int Push(Queue *queue, int i);
int Get(Queue *queue);
int QueueLength(Queue *queue);
int Pop(Queue *queue);
int QueueClear(Queue *queue);
int QueueDestory(Queue **queue);
#endif
#include "SequenceQueue.h"
int QueueInit(Queue **queue)
{
if(queue == NULL)
{
return FAILURE;
}
*queue = (Queue *)malloc(sizeof(Queue));
if(*queue == NULL)
{
return FAILURE;
}
(*queue)->front = 0;
(*queue)->rear = 0;
return SUCCESS;
}
int QueueEmpty(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
if(queue->rear == queue->front)
{
return TRUE;
}
else
{
return FAILURE;
}
}
int Push(Queue *queue, int i)
{
if(queue == NULL)
{
return FAILURE;
}
if((queue->rear+1)%SIZE == queue->front)
{
return FAILURE;
}
queue->data[queue->rear] = i;
queue->rear++;
return SUCCESS;
}
int Get(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
return queue->data[queue->front];
}
int QueueLength(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
return (queue->rear-queue->front+SIZE)%SIZE;
}
int Pop(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
if(queue->front == queue->rear)
{
return FAILURE;
}
int e = queue->data[queue->front];
queue->front = (queue->front+1)%SIZE;
return e;
}
int QueueClear(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
queue->front = queue->rear = 0;
return SUCCESS;
}
int QueueDestory(Queue **queue)
{
if(queue == NULL || *queue == NULL)
{
return FAILURE;
}
free(*queue);
return SUCCESS;
}
- 测试主函数:
#include "SequenceQueue.h"
int main()
{
Queue *queue = NULL;
int ret, i;
ret = QueueInit(&queue);
if(FAILURE == ret)
{
printf("Queue Init Failure.\n");
}
else
{
printf("Queue Init Success.\n");
}
ret = QueueEmpty(queue);
if(TRUE == ret)
{
printf("Queue is Empty.\n");
}
else if(FALSE == ret)
{
printf("Queue is not Empty.\n");
}
else
{
printf("Error!\n");
}
for(i = 0; i < 10; i++)
{
ret = Push(queue, i);
if(SUCCESS == ret)
{
printf("Queue Push %d Success.\n", i);
}
else
{
printf("Queue Push %d Failure.\n", i);
}
}
ret = Get(queue);
if(FAILURE == ret)
{
printf("Get Element Failure.\n");
}
else
{
printf("The Front is %d.\n", ret);
}
ret = QueueLength(queue);
if(FAILURE == ret)
{
printf("Get Length Failure.\n");
}
else
{
printf("The Length is %d.\n", ret);
}
ret = Pop(queue);
if(FAILURE == ret)
{
printf("Pop Failure.\n");
}
else
{
printf("Pop %d Success.\n", ret);
}
ret = QueueClear(queue);
if(FAILURE == ret)
{
printf("CLEAR Failure.\n");
}
else
{
printf("Clear Success.\n", ret);
}
ret = QueueDestory(&queue);
if(FAILURE == ret)
{
printf("QueueDestory Failure.\n");
}
else
{
printf("QueueDestory Success.\n", ret);
}
return 0;
}