队列的完整C语言实现(含测试例子)

//已经调通,而且能跑通 

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 


#define MAX_SIZE 1024 



//顺序队列的实现————借助数组 
 
typedef struct SEQQUEUE{
	void* data[MAX_SIZE];
	int size;
}SeqQueue;


//初始化 
SeqQueue* Init_SeqQueue(){
	
	SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
	int i;
	for (i =0;i<MAX_SIZE;i++){
		queue->data[i] = NULL;
		 
	}
	queue->size = 0;
	return queue;
}




//入队
void Push_SeqQueue(SeqQueue* queue, void* data){
	//数组左边当对头(两边都可以) 
	if (queue == NULL){
		return;
	} 
	if (data == NULL){
		return;
	}
	if (queue->size == MAX_SIZE){
		return;
	}
	
	queue->data[queue->size] = data;
	queue->size++;
	
} 


//返回队头元素 
void* Front_SeqQueue(SeqQueue* queue){
	if (queue == NULL){
		return NULL;
	} 
	if (queue->size == 0){
		return NULL;
	} 
	return queue->data[0];
	
}


//出队 
void Pop_SeqQueue(SeqQueue* queue){
	
	//需要移动元素 
	if (queue == NULL){
		return;
	} 
	
	if (queue->size == 0){
		return;
	} 
	
	int j;
	for (j = 0; j< queue->size - 1; j++){
		queue->data[j] = queue->data[j+1];
	
	}
	
	queue->size--; 
	 
} 


//返回队尾元素 
void* Back_SeqQueue(SeqQueue* queue){
	if (queue == NULL){
		return NULL;
	}
	if (queue->size == 0){
		return NULL;
	}
	
	return queue->data[queue->size-1];   //因为数组下标从0开始 
}



//返回大小 
int Size_SeqQueue(SeqQueue* queue){
	if (queue == NULL){
		return -1;
	}
	return queue->size;

} 

//清空队列
void Clear_SeqQueue(SeqQueue* queue){
	
	if (queue == NULL){
		return;
	}
	queue->size = 0;
} 


//销毁队列 
void FreeSpace_SeqQueue(SeqQueue* queue){
	if(queue == NULL ){
		return;
	}
	
	free(queue);
}

typedef struct PERSON{
	char name[64];
	int age; 
}Person; 



int main(void){
	
	//创建队列
	SeqQueue* queue = Init_SeqQueue();
	 
	
	
	//创建数据 
	Person p1 = {"aaa",30};
	Person p2 = {"bbb",20};
	Person p3 = {"ccc",40};
	Person p4 = {"ddd",60};
	Person p5 = {"eee",80};
	
	
	//数据入队列
	Push_SeqQueue(queue,&p1);
	Push_SeqQueue(queue,&p2);
	Push_SeqQueue(queue,&p3);
	Push_SeqQueue(queue,&p4);
	Push_SeqQueue(queue,&p5);
	
	
	//输出
	while (Size_SeqQueue(queue) > 0){
	//取出队头元素 
	Person* p = (Person*)Front_SeqQueue(queue);
	printf("Name:%s Age:%d\n", p->name,p->age);
	//从队头弹出元素
	Pop_SeqQueue(queue); 
	} 
	
    //销毁队列
	FreeSpace_SeqQueue(queue); 


	system("pause");
	return 0;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值