广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++实现线性单链表的示例代码
  • 865
分享到

C/C++实现线性单链表的示例代码

2024-04-02 19:04:59 865人浏览 薄情痞子
摘要

目录线性单链表简介C语言实现代码c++语言实现代码线性单链表简介 使用链存储结构的线性存储结构为线性单链表,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,线性单链

线性单链表简介

使用链存储结构的线性存储结构为线性单链表,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,线性单链表操作没有限制,线性单链表优点是可以直接插入和删除元素,线性单链表缺点是不可以使用下标获取和修改元素.

C语言实现代码

#include<stdio.h>//包含标准输入输出文件
#include<stdlib.h>//包含标准库文件
typedef struct element//元素
{
	int data;//数据
	struct element*next;//下一个
}Element;//元素
typedef struct
{
	Element*head;//头
	int length;//长度
}Single_Linked_List;//单链表
Single_Linked_List Single_Linked_List_Create(void)//单链表创造
{
	return(Single_Linked_List){(Element*)calloc(1,sizeof(Element)),0};//单链表头初始化为分配1个元素数据类型动态内存返回值,单链表长度初始化为0,返回单链表并且退出函数
}
int Single_Linked_List_Obtain_Length(Single_Linked_List*single_linked_list)//单链表获取长度
{
	return single_linked_list->length;//返回单链表长度并且退出函数
}
void Single_Linked_List_Insert(Single_Linked_List*single_linked_list,int insert_index,int insert_data)//单链表插入
{
	Element*insert_element_prev=single_linked_list->head,*insert_element=(Element*)calloc(1,sizeof(Element));//插入元素上一个初始化为单链表头,插入元素初始化为分配1个元素数据类型动态内存返回值
	for(int index=0;index<insert_index;++index)//索引初始化为0,索引小于插入索引,索引累加1
		insert_element_prev=insert_element_prev->next;//插入元素上一个赋值为插入元素上一个下一个
	insert_element->data=insert_data;//插入元素数据赋值为插入数据
	insert_element->next=insert_element_prev->next;//插入元素下一个赋值为插入元素上一个下一个
	insert_element_prev->next=insert_element;//插入元素上一个下一个赋值为插入元素
	++single_linked_list->length;//单链表长度累加1
}
void Single_Linked_List_Delete(Single_Linked_List*single_linked_list,int delete_index)//单链表删除
{
	Element*delete_element_prev=single_linked_list->head;//删除元素上一个初始化为单链表头
	for(int index=0;index<delete_index;++index)//索引初始化为0,索引小于删除索引,索引累加1
		delete_element_prev=delete_element_prev->next;//删除元素上一个赋值为删除元素上一个下一个
	Element*delete_element=delete_element_prev->next;//删除元素初始化为删除元素上一个下一个
	delete_element_prev->next=delete_element_prev->next->next;//删除元素上一个下一个赋值为删除元素上一个下一个下一个
	free(delete_element);//释放删除元素
	--single_linked_list->length;//单链表长度累减1
}
void Single_Linked_List_Modify(Single_Linked_List*single_linked_list,int modify_index,int modify_data)//单链表修改
{
	Element*modify_element=single_linked_list->head;//修改元素初始化为单链表头
	for(int index=0;index<modify_index;++index)//索引初始化为0,索引小于修改索引,索引累加1
		modify_element=modify_element->next;//修改元素赋值为修改元素下一个
	modify_element->next->data=modify_data;//修改元素下一个数据赋值为修改数据
}
int Single_Linked_List_Obtain(Single_Linked_List*single_linked_list,int obtain_index)//单链表获取
{
	Element*obtain_element=single_linked_list->head;//获取元素初始化为单链表头
	for(int index=0;index<obtain_index;++index)//索引初始化为0,索引小于获取索引,索引累加1
		obtain_element=obtain_element->next;//获取元素赋值为获取元素下一个
	return obtain_element->next->data;//返回获取元素下一个数据
}
void Single_Linked_List_Output(Single_Linked_List*single_linked_list)//单链表输出
{
	Element*output_element=single_linked_list->head;//输出元素初始化为单链表头
	for(int index=0;index<single_linked_list->length;++index)//索引初始化为0,索引小于单链表长度,索引累加1
	{
		output_element=output_element->next;//输出元素赋值为输出元素下一个
		printf("%i ",output_element->data);//输出输出元素数据
	}
}
void Single_Linked_List_Clear(Single_Linked_List*single_linked_list)//单链表清空
{
	for(;single_linked_list->length>0;--single_linked_list->length)//单链表长度大于0,单链表长度累减1
	{	
		Element*delete_element=single_linked_list->head;//删除元素初始化为单链表头
		single_linked_list->head=delete_element->next;//单链表头赋值为删除元素下一个
		free(delete_element);//释放删除元素
	}
}
int main(void)//主函数
{
	Single_Linked_List single_linked_list=Single_Linked_List_Create();//单链表初始化为单链表创造返回值
	int select_number=0,index=0,data=0;//选择号码初始化为0,索引初始化为0,数据初始化为0
	do{
		printf("\n0.退出程序\n1.单链表获取长度\n2.单链表插入\n3.单链表删除\n4.单链表修改\n5.单链表获取\n6.单链表输出\n7.单链表清空\n输入选择号码:");
		scanf("%i",&select_number);//输入选择号码
		if(select_number==1)//选择号码等于1
			printf("%i",Single_Linked_List_Obtain_Length(&single_linked_list));//输出单链表获取长度返回值
		else if(select_number==2)//选择号码等于2
		{
			printf("输入单链表插入的索引和数据:");
			scanf("%i%i",&index,&data);//输入索引和数据
			Single_Linked_List_Insert(&single_linked_list,index,data);//单链表插入第索引个元素数据为数据
		}
		else if(select_number==3)//选择号码等于3
		{
			printf("输入单链表删除的索引:");
			scanf("%i",&index);//输入索引
			Single_Linked_List_Delete(&single_linked_list,index);//单链表删除第索引个元素数据
		}
		else if(select_number==4)//选择号码等于4
		{
			printf("输入单链表修改的索引和数据:");
			scanf("%i%i",&index,&data);//输入索引和数据
			Single_Linked_List_Modify(&single_linked_list,index,data);//单链表修改第索引个元素数据为数据
		}
		else if(select_number==5)//选择号码等于5
		{
			printf("输入单链表获取的索引:");
			scanf("%i",&index);//输入索引
			printf("%i",Single_Linked_List_Obtain(&single_linked_list,index));//输出单链表获取第索引个元素数据返回值
		}
		else if(select_number==6)//选择号码等于6
			Single_Linked_List_Output(&single_linked_list);//单链表输出
		else if(select_number==7)//选择号码等于7
			Single_Linked_List_Clear(&single_linked_list);//单链表清空
	}while(select_number!=0);//选择号码不等于0
	Single_Linked_List_Clear(&single_linked_list);//单链表清空
	free(single_linked_list.head);//释放单链表头
}

C++语言实现代码

#include<iOStream>//包含输入输出流文件
struct Element//元素
{
	int data;//数据
	Element*next;//下一个
};
struct Single_Linked_List//单链表
{
	Element*head{new Element[1]{}};//头初始化为分配1个元素数据类型动态内存返回值
	int length{};//长度初始化为0
	~Single_Linked_List(void)//析构
	{
		Clear();//清空
		delete[]head;//释放头
	}
	int Obtain_Length(void)//获取长度
	{
		return length;//返回长度并且退出函数
	}
	void Insert(int insert_index,int insert_data)//插入
	{
		Element*insert_element_prev{head};//插入元素上一个初始化为头
		for(int index{};index<insert_index;++index)//索引初始化为0,索引小于插入索引,索引累加1
			insert_element_prev=insert_element_prev->next;//插入元素上一个赋值为插入元素上一个下一个
		Element*insert_element{new Element[1]{insert_data,insert_element_prev->next}};//插入元素初始化为分配1个元素数据类型动态内存返回值,插入元素数据初始化为插入数据,插入元素下一个初始化为插入元素上一个下一个
		insert_element_prev->next=insert_element;//插入元素上一个下一个赋值为插入元素
		++length;//长度累加1
	}
	void Delete(int delete_index)//删除
	{
		Element*delete_element_prev{head};//删除元素上一个初始化为头
		for(int index{};index<delete_index;++index)//索引初始化为0,索引小于删除索引,索引累加1
			delete_element_prev=delete_element_prev->next;//删除元素上一个赋值为删除元素上一个下一个
		Element*delete_element{delete_element_prev->next};//删除元素初始化为删除元素上一个下一个
		delete_element_prev->next=delete_element_prev->next->next;//删除元素上一个下一个赋值为删除元素上一个下一个下一个
		delete[]delete_element;//释放删除元素
		--length;//长度累减1
	}
	void Modify(int modify_index,int modify_data)//修改
	{
		Element*modify_element{head};//修改元素初始化为头
		for(int index{};index<modify_index;++index)//索引初始化为0,索引小于修改索引,索引累加1
			modify_element=modify_element->next;//修改元素赋值为修改元素下一个
		modify_element->next->data=modify_data;//修改元素下一个数据赋值为修改数据
	}
	int Obtain(int obtain_index)//获取
	{
		Element*obtain_element{head};//获取元素初始化为头
		for(int index{};index<obtain_index;++index)//索引初始化为0,索引小于获取索引,索引累加1
			obtain_element=obtain_element->next;//获取元素赋值为获取元素下一个
		return obtain_element->next->data;//返回获取元素下一个数据
	}
	void Output(void)//输出
	{
		Element*output_element{head};//输出元素初始化为头
		for(int index{};index<length;++index)//索引初始化为0,索引小于长度,索引累加1
		{
			output_element=output_element->next;//输出元素赋值为输出元素下一个
			std::cout<<output_element->data<<" ";//标准输出输出元素数据
		}
	}
	void Clear(void)//清空
	{
		for(;length>0;--length)//长度大于0,长度累减1
		{	
			Element*delete_element{head};//删除元素初始化为头
			head=delete_element->next;//头赋值为删除元素下一个
			delete[]delete_element;//释放删除元素
		}
	}
};
int main(void)//主函数
{
	Single_Linked_List single_linked_list;//单链表
	int select_number{},index{},data{};//选择号码初始化为0,索引初始化为0,数据初始化为0
	do{
		std::cout<<"\n0.退出程序\n1.单链表获取长度\n2.单链表插入\n3.单链表删除\n4.单链表修改\n5.单链表获取\n6.单链表输出\n7.单链表清空\n输入选择号码:";//标准输出
		std::cin>>select_number;//标准输入选择号码
		if(select_number==1)//选择号码等于1
			std::cout<<single_linked_list.Obtain_Length();//标准输出单链表获取长度返回值
		else if(select_number==2)//选择号码等于2
		{
			std::cout<<"输入单链表插入的索引和数据:";//标准输出
			std::cin>>index>>data;//标准输入索引和数据
			single_linked_list.Insert(index,data);//单链表插入第索引个元素数据为数据
		}
		else if(select_number==3)//选择号码等于3
		{
			std::cout<<"输入单链表删除的索引:";//标准输出
			std::cin>>index;//标准输入索引
			single_linked_list.Delete(index);//单链表删除第索引个元素数据
		}
		else if(select_number==4)//选择号码等于4
		{
			std::cout<<"输入单链表修改的索引和数据:";//标准输出
			std::cin>>index>>data;//标准输入索引和数据
			single_linked_list.Modify(index,data);//单链表修改第索引个元素数据为数据
		}
		else if(select_number==5)//选择号码等于5
		{
			std::cout<<"输入单链表获取的索引:";//标准输出
			std::cin>>index;//标准输入索引
			std::cout<<single_linked_list.Obtain(index);//标准输出单链表获取第索引个元素数据返回值
		}
		else if(select_number==6)//选择号码等于6
			single_linked_list.Output();//单链表输出
		else if(select_number==7)//选择号码等于7
			single_linked_list.Clear();//单链表清空
	}while(select_number!=0);//选择号码不等于0
}

到此这篇关于C/C++实现线性单链表的示例代码的文章就介绍到这了,更多相关C++线性单链表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++实现线性单链表的示例代码

本文链接: https://www.lsjlt.com/news/149843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++实现线性单链表的示例代码
    目录线性单链表简介C语言实现代码C++语言实现代码线性单链表简介 使用链存储结构的线性存储结构为线性单链表,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,线性单链...
    99+
    2022-11-13
  • C语言实现线性动态(单向)链表的示例代码
    目录什么是链表为什么不用结构体数组链表的操作创建表删除元素插入元素代码及运行结果什么是链表 链表是数据结构里面的一种,线性链表是链表的一种,线性链表的延伸有双向链表和环形链表。在编程...
    99+
    2022-11-13
  • C/C++实现线性顺序表的示例代码
    目录线性顺序表简介C语言实现代码C++语言实现代码线性顺序表简介 使用顺序存储结构的线性存储结构的表为线性顺序表,线性存储结构是元素逻辑结构一对一,顺序存储结构是元素物理结构连续,线...
    99+
    2022-11-13
  • C++中单链表操作的示例代码
    任务要求 实现单链表的下列功能: 1、 从键盘输入一组数据,创建单链表; 2、 输出单链表; 3、 插入元素,给出插入成功或失败的信息; 4、 头插,给出插入成功或失败的信息; 5、...
    99+
    2022-11-13
    C++ 单链表
  • C语言实现无头单向链表的示例代码
    目录一、易错的接口实现 1.1 新节点开辟函数 1.2 尾插 1.3 尾删 二、常见简单接口 2.1 打印链表 2.2 节点计数器 2.3 判断是否为空链表 2.4 通过值查找节点 ...
    99+
    2022-11-12
  • C语言实现动态链表的示例代码
    目录结构体定义已经函数声明函数实现创建一个链表判断链表是否为空获得链表中节点的个数在某个特定的位置插入一个元素获得指定下标的节点的元素删除一个节点链表逆序链表的清空链表的销毁链表的遍...
    99+
    2022-11-13
  • C++单例模式实现线程池的示例代码
    C语言单例模式实现线程池。 该代码中,使用了单例模式来创建线程池对象,保证了整个程序中只有一个线程池对象。 线程池中包含了任务队列、工作线程数组、互斥锁、条件变量等成员,通过这些成员...
    99+
    2023-05-16
    C++单例模式实现线程池 C++单例模式 线程池 C++ 线程池 C++ 单例模式
  • Golang实现单链表的示例代码
    目录1. 定义节点2. IsEmpty():3. Length():4. AddFromHead():5. AddFromTail():6. Insert()7. Delet ...
    99+
    2023-03-15
    Golang 单链表
  • C++实现一个简单的线程池的示例代码
    目录一、设计二、参数选择三、类设计一、设计 线程池应该包括 保存线程的容器,保存任务的容器。为了能保证避免线程对任务的竞态获取,需要对任务队列进行加锁。为了使得工作线程感知任务的到来...
    99+
    2022-11-13
  • C语言实现链表与文件存取的示例代码
    目录此处为main函数的内容一、输入数据到链表中二、把链表数据存入文件三、输出文件完整代码本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。 不...
    99+
    2022-11-13
  • C语言单双线性及循环链表与实例
    目录链表思维顺序存储结构单链表单链表存储结构 单链表的读取单链表的插入 单链表的删除 单链表的整表创建 头插法建立单链表尾插法建立单链表单链表...
    99+
    2023-03-24
    C语言单双链表 C语言循环链表
  • C语言线性表链式表示及实现的方法
    今天小编给大家分享一下C语言线性表链式表示及实现的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言线性表的顺序表示指的...
    99+
    2023-07-02
  • C语言线性表的链式表示及实现详解
    目录前言代码实现1. 单链表的结点构造2. 构造一个空的头结点3. 对线性表进行赋值4.对线性表进行销毁5.对线性表进行重置6.判断线性表是否为空7.获取线性表的长度8.获取线性表某...
    99+
    2022-11-13
  • C++代码实现双向链表
    本文实例为大家分享了C++实现双向链表的具体代码,供大家参考,具体内容如下 双向链表:两个指针域,一个指向前结点,一个指向后结点 list.h #pragma once #defin...
    99+
    2022-11-13
  • C语言线性代数算法实现矩阵示例代码
    目录C语言实现矩阵特殊矩阵特殊矩阵验证C语言实现矩阵 矩阵作为一个结构体而言,至少要包含行数、列数以及数据。 #include <stdio.h> #include ...
    99+
    2022-11-12
  • C++实现MyString的示例代码
    MyString的构造、析构、拷贝构造、赋值运算 class String { char* str; public: String(const char* p = NULL) :...
    99+
    2022-11-13
  • C语言怎么实现线性动态单向链表
    本篇内容主要讲解“C语言怎么实现线性动态单向链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现线性动态单向链表”吧!什么是链表链表是数据结构里面的一种,线性链表是链表的一种,线性链...
    99+
    2023-06-30
  • C语言中单链表的示例分析
    这篇文章将为大家详细讲解有关C语言中单链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、思路步骤1. 定义结构体a.数据域:用来存放数据b.指针域:用来存放下一个数据的位置2.初始化申请头结...
    99+
    2023-06-25
  • C/C++实现精灵游戏的示例代码
    目录前言创建win32项目游戏效果核心代码前言 采用面向过程的遍程思想,通过acllib图形库来实现。 acllib下载地址:acllib tom,jerry,dog,heart以及...
    99+
    2022-11-13
  • C/C++实现蛇形矩阵的示例代码
    目录题目描述题解部分完整代码菜鸡蒟蒻想在博客中记录一些算法学习的心得体会,会持续更新C/C++方面的题解,方便理清思路和日后复习。如果还能结识一起敲代码的小伙伴的话就更好啦嘿嘿,因为...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作