链式储存队列

本文介绍了链式存储队列的概念,它是一种遵循先进先出(FIFO)原则的线性数据结构。在链式存储队列中,元素在队尾进行插入,在队头进行删除。队列的操作包括入队和出队。通过C语言,可以有效地实现这种数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列定义:队列简称队。是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。其操作特性为先进先出(First In First Out,FIFO),并且只允许在队尾进,队头出。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct linknode
{
		struct linknode* next;
	void* data;
};
struct linkqueue
{
	struct linknode* start;
	struct linknode* end;
	int size;
};
//初始化
struct linkqueue* init_queue()
{
	struct linkqueue* myqueue=(struct linkqueue*)malloc(sizeof(struct linkqueue));
    if(myqueue==NULL)
{
  return NULL;
}
	myqueue->end = NULL;
	myqueue->start = NULL;
	myqueue->size = 0;
	return myqueue;
}
//入队
void insetnode(struct linkqueue* myqueue, void* data)
{
    if(myqueue==NULL||data==NULL)
    return NULL;
	struct linknode* node = (struct linknode*)malloc(sizeof(struct linknode));
    if(node==NULL)
    return;
	node->data = data;
	node->next = NULL;
	if (myqueue->end == NULL && myqueue->start == NULL)
	{
		myqueue->start = node;
		myqueue->end = node;
		myqueue->size++;
	}
	else
	{
		myqueue->end->next = node;
		myqueue->end = node;
		myqueue->size++;
	}
}
//出队
void dele(struct linkqueue* myqueue)
{
    if(myqueue==NULL)
    return ;
	struct linknode* node = myqueue->start;
	
	myqueue->start=myqueue->start->next;
	free(node);
	myqueue->size--;
	node = NULL;
	
}
void show_all(struct linkqueue* myqueue, void(* myprintf)(void*data))
{
    if(myqueue==NULL&&myprintf==NULL)
    return ;
	struct linknode* node = myqueue->start;
	while (node != NULL)
	{
		myprintf(node->data);
		node = node->next;

	}
}
//销毁
void freequeue(struct linkqueue* myqueue)
{
	struct linknode* node = myqueue->start;
	while (node!= NULL)
	{
		myqueue->start = node->next;
		free(node);
		node = myqueue->start;
	}
	free(myqueue);

}
void myprintf(void* data)
{
	int a = *(int*)data;
	printf("%d\n", a);

}
test01()
{
	struct linkqueue* myqueue = init_queue();
	int a[20] = { 0 };
	for (int i = 0; i < 10; i++)
	{
		//int data = i + 1;
		a[i] = i + 1;
		insetnode(myqueue, (void*)(a+i));
		
	}
	show_all(myqueue,myprintf);
	printf("%d\n", myqueue->size);
	dele(myqueue);
	show_all(myqueue, myprintf);
	printf("%d\n", myqueue->size);
	freequeue(myqueue);
	//printf("%d\n", myqueue->size);
}
int main()
{
	test01();
		return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值