DataStructure_ArrayQueue

Implemention of data structure and algorithm in c language.?

See Github for the complete project:[Data_Structre_and_Algorithm]


array_queue.h:

/*array_queue.h:This is an implemention of array_queue in C language.
 *Characteristic:
 *	1.Give an initial length when defining an array_queue
 *  2.Support for enqueue and dequeue operations
 *author:stdcoutzrh
 *emai:stdcoutzrh@gmail.com
 */
 
 #ifndef ARRAY_QUEUE_H
 #define ARRAY_QUEUE_H
 
 #include<stdio.h>
 #include<stdlib.h>
 #include<stdbool.h>
 #include<string.h>
 
 typedef struct array_queue
 {
	 int length;	
	 int size;	
	 int head;	//head指向头元素
	 int tail;	//tail指向尾元素下一个位置
	 int* arr;
 }array_queue;
 
array_queue* aq_createQueue(int length);
void aq_destoryQueue(array_queue* array_queue);

bool aq_isEmpty(array_queue*array_queue);
bool aq_isFull(array_queue*array_queue);
int aq_getSize(array_queue*array_queue);
void aq_print(array_queue*array_queue);

int aq_enqueue(array_queue*array_queue,int element);	//if queue is full ,enqueue failed.
int aq_dequeue(array_queue*array_queue);

 #endif //ARRAY_QUEUE_H

array_queue.c:

#include"array_queue.h"

array_queue* aq_createQueue(int length)
{
	array_queue* queue = (array_queue*)malloc(sizeof(array_queue));
	if(!queue)
	{
		perror("malloc:");
		exit(-1);
	}
	queue->arr = (int*)malloc(sizeof(int)*length);
	if(!queue->arr)
	{
		perror("malloc:");
		exit(-1);
	}
	queue->length = length;
	queue->head = queue->tail = queue->size = 0;
	return queue;
}
		
void aq_destoryQueue(array_queue* array_queue)
{
	if(array_queue->arr!=NULL)
		free(array_queue->arr);
	free(array_queue);
}

bool aq_isEmpty(array_queue*array_queue)
{
	return array_queue->size == 0;
}

bool aq_isFull(array_queue*array_queue)
{
	return array_queue->size == array_queue->length;
}

int aq_getSize(array_queue*array_queue)
{
	return array_queue->size;
}

void aq_print(array_queue*array_queue)
{
	for(int i=0;i<array_queue->size;++i)
		printf("queue [%d]:%d.\n",i,array_queue->arr[i]);
	printf("current size is %d .\n",array_queue->size);
}

int aq_enqueue(array_queue*array_queue,int element)
{
	if(aq_isFull(array_queue))
	{
		printf("enqueue failed,queue is full!\n");
		return -1;
	}
	else
	{		
		array_queue->arr[array_queue->tail] = element;
		++array_queue->size;
		array_queue->tail = (array_queue->tail + 1) % array_queue->length;
		return element;
	}
	return -1;
}

int aq_dequeue(array_queue*array_queue)
{
	int value;
	if(aq_isEmpty(array_queue))
	{
		printf("dequeue failed,no elements in queue!\n");
		return -1;
	}
	else
	{
		value = array_queue->arr[array_queue->head];
		--array_queue->size;
		array_queue->head = (array_queue->head + 1) % array_queue->length;
		return value;
	}
}

//test code
int main(void)
{
	array_queue* my_queue = aq_createQueue(10);
	for(int i=0;i<10;++i)
	{
		aq_enqueue(my_queue,i);
	}
	aq_print(my_queue);
	
	aq_dequeue(my_queue);
	aq_dequeue(my_queue);
	aq_print(my_queue);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值