c语言实现队列的链式存储结构

             通过对链表两端的有效元素进行操作,来实现队列先进先出的特性。

LinkQueue.h

#pragma once
#include<stdio.h>
#include<stdlib.h>

typedef struct LINKNODE
{
	struct LINKNODE* next;
}LinkNode;

typedef struct LINKQUEUE
{
	LinkNode head;
	int size;
}LinkQueue;

//初始化
LinkQueue* Init_LinkQueue();

//入队
void Push_LinkQueue(LinkQueue* queue, LinkNode* data);

//返回队头元素
LinkNode* Front_LinkQueuee(LinkQueue* queue);

//出队
void Pop_LinkQueue(LinkQueue* queue);

//返回队尾元素
LinkNode* Back_LinkQueue(LinkQueue* queue);

//返回队列长度
int Size_LinkQueue(LinkQueue* queue);

//清空队列
void Clear_LinkQueue(LinkQueue* queue);

//销毁队列
void FreeSpace_LinkQueue(LinkQueue* queue);

LinkQueue.c

#include"LinkQueue.h"

LinkQueue* Init_LinkQueue()
{
	LinkQueue* queue = (LinkQueue*)malloc(sizeof(LinkQueue));

	queue->head.next = NULL;
	queue->size = 0;
    
	return queue;
}

//入队
void Push_LinkQueue(LinkQueue* queue, LinkNode* data)
{
	if (queue == NULL || data == NULL)
	{
		return;
	}
    
	LinkNode* pCurrent = &(queue->head);
	for (int i = 0; i < queue->size; i++)
	{
		pCurrent = pCurrent->next;
	}
    
	data->next = pCurrent->next;
	pCurrent->next = data;
	queue->size++;
}

//返回队头元素
LinkNode* Front_LinkQueuee(LinkQueue* queue)
{
	if (queue == NULL || queue->size == 0)
	{
		return NULL;
	}

	return queue->head.next;
}

//出队
void Pop_LinkQueue(LinkQueue* queue)
{
	if (queue == NULL || queue->size == 0)
	{
		return;
	}

	LinkNode* pDel = queue->head.next;
	queue->head.next = pDel->next;

	queue->size--;
}

//返回队尾元素
LinkNode* Back_LinkQueue(LinkQueue* queue)
{
	if (queue == NULL || queue->size == 0)
	{
		return NULL;
	}

	LinkNode* pCurrent = &(queue->head);
	for (int i = 0; i < queue->size; i++)
	{
		pCurrent = pCurrent->next;
	}

	return pCurrent;
}

//返回队列长度
int Size_LinkQueue(LinkQueue* queue)
{
	if (queue == NULL)
	{
		return -1;
	}

	return queue->size;
}

//清空队列
void Clear_LinkQueue(LinkQueue* queue)
{
	if (queue == NULL)
	{
		return;
	}
  
	queue->size = 0;
	queue->head.next = NULL;
}

//销毁队列
void FreeSpace_LinkQueue(LinkQueue* queue)
{
	if (queue == NULL)
	{
		return;
	}

	free(queue);
}

队列的链式存储结构.c

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"LinkQueue.h"

typedef struct PERSON
{
	LinkNode node;
	char name[64];
	int age;

}Person;

int main()
{
	//创建队列
	LinkQueue* queue = Init_LinkQueue();

	//创建对象
	Person p1;
	Person p2;
	Person p3;
	Person p4;
	Person p5;

	strcpy(p1.name, "aaa");
	strcpy(p2.name, "bbb");
	strcpy(p3.name, "ccc");
	strcpy(p4.name, "ddd");
	strcpy(p5.name, "eee");
	
	p1.age = 10;
	p2.age = 20;
	p3.age = 30;
	p4.age = 40;
	p5.age = 50;

	//入队
	Push_LinkQueue(queue, (LinkNode*)&p1);
	Push_LinkQueue(queue, (LinkNode*)&p2);
	Push_LinkQueue(queue, (LinkNode*)&p3);
	Push_LinkQueue(queue, (LinkNode*)&p4);
	Push_LinkQueue(queue, (LinkNode*)&p5);
	
	//打印队尾元素
	printf("---------------\n");
	Person* pLast = (Person*)Back_LinkQueue(queue);
	printf("Name:%s,age:%d\n", pLast->name, pLast->age);

	//打印队列长度
	printf("---------------\n");
	printf("length= %d\n", Size_LinkQueue(queue));
	
	//出队和打印
	while (Size_LinkQueue(queue) > 0)
	{
		Person* p = (Person*)Front_LinkQueuee(queue);
		printf("name:%s, age:%d\n", p->name, p->age);
		Pop_LinkQueue(queue);
	}

	//清空队列
	Clear_LinkQueue(queue);
	printf("---------------\n");
	printf("length= %d\n", Size_LinkQueue(queue));

	FreeSpace_LinkQueue(queue);

	system("pause");
	return 0;
}

测试结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值