数据结构(顺序队列)(C语言)

利用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;
    }
    

猜你喜欢

转载自blog.csdn.net/x18261294286/article/details/81569215