数据结构线性单链队列

数据结构线性单链队列

线性单链队列简介

使用链存储结构的线性存储结构的队列为线性单链队列,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,队列是只能在队尾插入元素,队头删除元素(先进先出).

C语言实现代码

#include<stdio.h>//包含标准输入输出库文件
#include<stdlib.h>//包含标准库库文件
typedef struct Element//类型定义结构元素
{
	int Data;//整数数据
	struct Element*Next;//结构元素指针下一个
}Element;//元素
typedef struct//类型定义结构
{
	Element*Head;//元素指针头
	int Length;//整数长度
}Single_Linked_Queue;//单链队列
Single_Linked_Queue Single_Linked_Queue_Create(void)//单链队列单链队列创造,空
{
	return(Single_Linked_Queue){malloc(sizeof(Element))};//返回单链队列成员头赋值分配字节元素
}
void Single_Linked_Queue_Destroy(Single_Linked_Queue*single_linked_queue)//空单链队列销毁,单链队列指针单链队列
{
	for(;single_linked_queue->Length>0;--single_linked_queue->Length)//循环,单链队列成员长度大于0,减减单链队列成员长度
	{	
		Element*Delete_Element=single_linked_queue->Head;//元素指针删除元素赋值单链队列成员头
		single_linked_queue->Head=Delete_Element->Next;//单链队列成员头赋值删除元素成员下一个
		free(Delete_Element);//释放删除元素
	}
	free(single_linked_queue->Head);//释放单链队列成员头
}
void Single_Linked_Queue_Insert(Single_Linked_Queue*single_linked_queue,int Insert_Data)//空单链队列插入,单链队列指针单链队列,整数插入数据
{
	Element*Insert_Element_Prev_Element=single_linked_queue->Head,*Insert_Element=malloc(sizeof(Element));//元素指针插入元素上一个元素赋值单链队列成员头,元素指针插入元素赋值分配字节元素
	for(int Index=0;Index<single_linked_queue->Length;++Index)//循环,整数索引赋值0,索引小于单链队列成员长度,加加索引
		Insert_Element_Prev_Element=Insert_Element_Prev_Element->Next;//插入元素上一个元素赋值插入元素上一个元素成员下一个
	Insert_Element->Data=Insert_Data;//插入元素成员数据赋值插入数据
	Insert_Element->Next=Insert_Element_Prev_Element->Next;//插入元素成员下一个赋值插入元素上一个元素成员下一个
	Insert_Element_Prev_Element->Next=Insert_Element;//插入元素上一个元素成员下一个赋值插入元素
	++single_linked_queue->Length;//加加单链队列成员长度
}
void Single_Linked_Queue_Delete(Single_Linked_Queue*single_linked_queue)//空单链队列删除,单链队列指针单链队列
{
	Element*Delete_Element=single_linked_queue->Head;//元素指针删除元素赋值单链队列成员头
	single_linked_queue->Head=single_linked_queue->Head->Next;//单链队列成员头赋值单链队列成员头成员下一个
	free(Delete_Element);//释放删除元素
	--single_linked_queue->Length;//减减单链队列成员长度
}
int Single_Linked_Queue_Obtain(Single_Linked_Queue single_linked_queue)//整数单链队列获取,单链队列单链队列
{
	return single_linked_queue.Head->Next->Data;//返回单链队列成员头成员下一个成员数据
}
int Single_Linked_Queue_Size(Single_Linked_Queue single_linked_queue)//整数单链队列尺寸,单链队列单链队列
{
	return single_linked_queue.Length;//返回单链队列成员长度
}
int main(void)//整数主,空
{
	Single_Linked_Queue single_linked_queue=Single_Linked_Queue_Create();//单链队列单链队列赋值单链队列创造
	for(int Select=5,Data;Select;scanf("%i",&Select))//循环,整数选择赋值5,整数数据,选择不等于0,格式扫描选择
	{
		if(Select==1)//如果,选择等于1
		{
			scanf("%i",&Data);//格式扫描数据
			Single_Linked_Queue_Insert(&single_linked_queue,Data);//单链队列插入单链队列最后数据
		}
		else if(Select==2)//否则如果,选择等于2
			Single_Linked_Queue_Delete(&single_linked_queue);//单链队列删除单链队列零数据
		else if(Select==3)//否则如果,选择等于3
			printf("%i",Single_Linked_Queue_Obtain(single_linked_queue));//格式打印单链队列获取单链队列零数据
		else if(Select==4)//否则如果,选择等于4
			printf("%i",Single_Linked_Queue_Size(single_linked_queue));//格式打印单链队列尺寸单链队列
	}
	Single_Linked_Queue_Destroy(&single_linked_queue);//单链队列销毁单链队列
}

C++语言实现代码

#include<iostream>//包含输入输出流库文件
struct Single_Linked_Queue//结构单链队列
{
	struct Element//结构元素
	{
		int Data;//整数数据
		Element*Next;//元素指针下一个
	}*Head=new Element;//元素指针头赋值新元素
	int Length=0;//整数长度赋值0
	~Single_Linked_Queue(void)//单链队列析构,空
	{
		for(;Length>0;--Length)//循环,长度大于0,减减长度
		{	
			Element*Delete_Element=Head;//元素指针删除元素赋值头
			Head=Delete_Element->Next;//头赋值删除元素成员下一个
			delete Delete_Element;//删除删除元素
		}
		delete Head;//删除头
	}
	void Insert(int Insert_Data)//空插入,整数插入数据
	{
		Element*Insert_Element_Prev_Element=Head;//元素指针插入元素上一个元素赋值头
		for(int Index=0;Index<Length;++Index)//循环,整数索引赋值0,索引小于长度,加加索引
			Insert_Element_Prev_Element=Insert_Element_Prev_Element->Next;//插入元素上一个元素赋值插入元素上一个元素成员下一个
		Element*Insert_Element=new Element{Insert_Data,Insert_Element_Prev_Element->Next};//元素指针插入元素赋值新元素,插入元素数据赋值插入数据,插入元素下一个赋值插入元素上一个元素成员下一个
		Insert_Element_Prev_Element->Next=Insert_Element;//插入元素上一个元素成员下一个赋值插入元素
		++Length;//加加长度
	}
	void Delete(void)//空删除,空
	{
		Element*Delete_Element=Head;//元素指针删除元素赋值头
		Head=Head->Next;//头赋值头成员下一个
		delete Delete_Element;//删除删除元素
		--Length;//长度前缀减减
	}
	int Obtain(void)//整数获取,空
	{
		return Head->Next->Data;//返回头成员下一个成员数据
	}
	int Size(void)//整数尺寸,空
	{
		return Length;//返回长度
	}
}single_linked_queue;//单链队列
int main(void)//整数主,空
{
	for(int Select=5,Data;Select;std::cin>>Select)//循环,整数选择赋值5,整数数据,选择不等于0,标准输入选择
	{
		if(Select==1)//如果,选择等于1
		{
			std::cin>>Data;//标准输入索引和数据
			single_linked_queue.Insert(Data);//单链队列成员插入最后数据
		}
		else if(Select==2)//否则如果,选择等于2
			single_linked_queue.Delete();//单链队列成员删除零数据
		else if(Select==3)//否则如果,选择等于3
			std::cout<<single_linked_queue.Obtain();//标准输出单链队列成员获取零数据
		else if(Select==4)//否则如果,选择等于4
			std::cout<<single_linked_queue.Size();//标准输出单链队列成员尺寸
	}
}

欢迎大家来加我自己的编程语言交流QQ群群号:387618421

线性扫描机制通常用于数据处理、算法执行等多个领域,安装成功后的相关操作和应用场景如下: ### 后续操作 - **配置参数**:根据具体的使用需求,对线性扫描机制的参数进行配置。例如,在图像扫描中,可能需要设置扫描的分辨率、扫描范围等参数。在数据处理中,可能需要设置扫描的步长、起始位置等参数。 ```python # 示例:设置线性扫描的起始位置和步长 start_position = 0 step_size = 1 ``` - **测试运行**:在正式投入使用之前,进行测试运行以确保线性扫描机制正常工作。可以使用一些示例数据或场景进行测试,检查扫描结果是否符合预期。 ```python # 示例:测试线性扫描 data = [1, 2, 3, 4, 5] for i in range(start_position, len(data), step_size): print(data[i]) ``` - **集成到系统**:将线性扫描机制集成到具体的系统或应用程序中。这可能涉及到与其他模块或组件的交互,需要进行相应的接口开发和调试。 ### 应用场景 - **数据搜索**:在线性数据结构(如数组、列表)中查找特定元素时,线性扫描机制可以依次遍历每个元素,直到找到目标元素或遍历完整个数据结构。 ```python # 示例:在列表中查找特定元素 target = 3 data = [1, 2, 3, 4, 5] for i in range(len(data)): if data[i] == target: print(f"找到目标元素 {target},位置为 {i}") break ``` - **图像处理**:在图像处理中,线性扫描机制可以用于图像的逐行或逐列扫描,进行图像的滤波、边缘检测等操作。 ```python # 示例:简单的图像灰度化处理(逐像素扫描) import cv2 image = cv2.imread('image.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow('Gray Image', gray_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` - **传感器数据采集**:在传感器数据采集过程中,线性扫描机制可以按照一定的时间间隔依次采集传感器的数据,进行数据分析和处理。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的闹钟

自愿打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值