算法村,队列的基本操作

队列结构体

typedef struct Node
{
	int data;//数据域
	struct Node* next;//指针域
}Node;
typedef struct LinkQueue {
	Node* front;//队头指针
	Node* rear;//队尾指针
	int size;//队列的大小
}LinkQueue;

队列的基本操作

//初始化队列
LinkQueue* InitLinkQueue(){
	LinkQueue* queue = malloc(sizeof(LinkQueue));
	queue->front = NULL;
	queue->rear = NULL;
	queue->size = 0;
	return queue;
}
//入队
void push_LinkQueue(LinkQueue *queue,int value) {
	if (NULL == queue) {
		return;
	}
	
	Node* newNode = malloc(sizeof(Node));
	newNode->data = value;
	newNode->next = NULL;
	//当尾指针为空时,入队时头指针和尾指针指向一个同一个值
	if (queue->rear == NULL) {
	
		queue->front = newNode;
		queue->rear = newNode;
	}
	else {
		//尾指针指向的最后一个元素
		queue->rear->next = newNode;
		//改变尾指针的元素
		queue->rear = newNode;
	}
	queue->size++;
}
//出队
int pop_LinkQueue(LinkQueue* queue) {
	if (queue->front== NULL) {
		return -1;
	}
	//拿到头指针
	Node* firstNode = queue->front;
	//得到头指针的值
	int value = firstNode->data;
	queue->front = queue->front->next;//更新头指针
	free(firstNode);
	queue->size--;
	
	//如果头指针为空尾指针也为空
	if (queue->front== NULL) {
		queue->rear = NULL;
	}
	//返回出队的值
	return value;
}
//打印队列
void print_LinkQueue(LinkQueue* queue) {
	if (queue->front == NULL) {
		return;
	}
	Node* node = queue->front;
	while (node)
	{
		printf("%d\t", node->data);

		node = node->next;
	}
}
//获得队头元素
void * Front_LinkQueue(LinkQueue* queue) {
	if (queue == NULL) {
		return;
	}
	Node* node = queue->front;
	return node->data;
}
//获得队尾元素
void * Back_LinkQueue(LinkQueue* queue) {
	if (queue == NULL) {
		return;
	}
	
	Node* node = queue->rear;
	return node->data;
}
//大小
int Size_LinkQueue(LinkQueue* queue) {
	if (queue == NULL) {
		return 0;
	}
	return queue->size;
}
//销毁队列
void Destory_LinkNode(LinkQueue* queue) {
	if (NULL == queue) {
		return;
	}
	free(queue);
	queue = NULL;
}

测试用例

int main() {
	LinkQueue* queue = InitLinkQueue();
	push_LinkQueue(queue, 1);
	push_LinkQueue(queue, 2);
	push_LinkQueue(queue, 3);
	push_LinkQueue(queue, 4);
	push_LinkQueue(queue, 5);
	print_LinkQueue(queue);
	int value = pop_LinkQueue(queue);
	printf("出队元素%d\n", value);
	print_LinkQueue(queue);
	printf("队头元素%d\n", Front_LinkQueue(queue));
	printf("队尾元素%d\n", Back_LinkQueue(queue));
	printf("队列大小%d\n", Size_LinkQueue(queue));

	Destory_LinkNode(queue);
	return 0;

}

总结

队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,队列实现方式也有两种形式,基于数组和基于链表。对于基于链表,因为链表的长度是随时都可以变的,实现起来比较简单。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值