欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++實(shí)現(xiàn)線性單鏈表的示例代碼

 更新時(shí)間:2022年05月26日 15:13:32   作者:學(xué)編程的鬧鐘  
使用鏈存儲(chǔ)結(jié)構(gòu)的線性存儲(chǔ)結(jié)構(gòu)為線性單鏈表,本文將分別利用C語言和C++實(shí)現(xiàn)線性單鏈表,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

線性單鏈表簡介

使用鏈存儲(chǔ)結(jié)構(gòu)的線性存儲(chǔ)結(jié)構(gòu)為線性單鏈表,線性存儲(chǔ)結(jié)構(gòu)是元素邏輯結(jié)構(gòu)一對(duì)一,鏈存儲(chǔ)結(jié)構(gòu)是元素物理結(jié)構(gòu)不連續(xù),線性單鏈表操作沒有限制,線性單鏈表優(yōu)點(diǎn)是可以直接插入和刪除元素,線性單鏈表缺點(diǎn)是不可以使用下標(biāo)獲取和修改元素.

C語言實(shí)現(xiàn)代碼

#include<stdio.h>//包含標(biāo)準(zhǔn)輸入輸出文件
#include<stdlib.h>//包含標(biāo)準(zhǔn)庫文件
typedef struct element//元素
{
	int data;//數(shù)據(jù)
	struct element*next;//下一個(gè)
}Element;//元素
typedef struct
{
	Element*head;//頭
	int length;//長度
}Single_Linked_List;//單鏈表
Single_Linked_List Single_Linked_List_Create(void)//單鏈表創(chuàng)造
{
	return(Single_Linked_List){(Element*)calloc(1,sizeof(Element)),0};//單鏈表頭初始化為分配1個(gè)元素?cái)?shù)據(jù)類型動(dòng)態(tài)內(nèi)存返回值,單鏈表長度初始化為0,返回單鏈表并且退出函數(shù)
}
int Single_Linked_List_Obtain_Length(Single_Linked_List*single_linked_list/*單鏈表*/)//單鏈表獲取長度
{
	return single_linked_list->length;//返回單鏈表長度并且退出函數(shù)
}
void Single_Linked_List_Insert(Single_Linked_List*single_linked_list/*單鏈表*/,int insert_index/*插入索引*/,int insert_data/*插入數(shù)據(jù)*/)//單鏈表插入
{
	Element*insert_element_prev=single_linked_list->head,*insert_element=(Element*)calloc(1,sizeof(Element));//插入元素上一個(gè)初始化為單鏈表頭,插入元素初始化為分配1個(gè)元素?cái)?shù)據(jù)類型動(dòng)態(tài)內(nèi)存返回值
	for(int index=0;index<insert_index;++index)//索引初始化為0,索引小于插入索引,索引累加1
		insert_element_prev=insert_element_prev->next;//插入元素上一個(gè)賦值為插入元素上一個(gè)下一個(gè)
	insert_element->data=insert_data;//插入元素?cái)?shù)據(jù)賦值為插入數(shù)據(jù)
	insert_element->next=insert_element_prev->next;//插入元素下一個(gè)賦值為插入元素上一個(gè)下一個(gè)
	insert_element_prev->next=insert_element;//插入元素上一個(gè)下一個(gè)賦值為插入元素
	++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;//刪除元素上一個(gè)初始化為單鏈表頭
	for(int index=0;index<delete_index;++index)//索引初始化為0,索引小于刪除索引,索引累加1
		delete_element_prev=delete_element_prev->next;//刪除元素上一個(gè)賦值為刪除元素上一個(gè)下一個(gè)
	Element*delete_element=delete_element_prev->next;//刪除元素初始化為刪除元素上一個(gè)下一個(gè)
	delete_element_prev->next=delete_element_prev->next->next;//刪除元素上一個(gè)下一個(gè)賦值為刪除元素上一個(gè)下一個(gè)下一個(gè)
	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/*修改數(shù)據(jù)*/)//單鏈表修改
{
	Element*modify_element=single_linked_list->head;//修改元素初始化為單鏈表頭
	for(int index=0;index<modify_index;++index)//索引初始化為0,索引小于修改索引,索引累加1
		modify_element=modify_element->next;//修改元素賦值為修改元素下一個(gè)
	modify_element->next->data=modify_data;//修改元素下一個(gè)數(shù)據(jù)賦值為修改數(shù)據(jù)
}
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;//獲取元素賦值為獲取元素下一個(gè)
	return obtain_element->next->data;//返回獲取元素下一個(gè)數(shù)據(jù)
}
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;//輸出元素賦值為輸出元素下一個(gè)
		printf("%i ",output_element->data);//輸出輸出元素?cái)?shù)據(jù)
	}
}
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;//單鏈表頭賦值為刪除元素下一個(gè)
		free(delete_element);//釋放刪除元素
	}
}
int main(void)//主函數(shù)
{
	Single_Linked_List single_linked_list=Single_Linked_List_Create();//單鏈表初始化為單鏈表創(chuàng)造返回值
	int select_number=0,index=0,data=0;//選擇號(hào)碼初始化為0,索引初始化為0,數(shù)據(jù)初始化為0
	do{
		printf("\n0.退出程序\n1.單鏈表獲取長度\n2.單鏈表插入\n3.單鏈表刪除\n4.單鏈表修改\n5.單鏈表獲取\n6.單鏈表輸出\n7.單鏈表清空\n輸入選擇號(hào)碼:");
		scanf("%i",&select_number);//輸入選擇號(hào)碼
		if(select_number==1)//選擇號(hào)碼等于1
			printf("%i",Single_Linked_List_Obtain_Length(&single_linked_list));//輸出單鏈表獲取長度返回值
		else if(select_number==2)//選擇號(hào)碼等于2
		{
			printf("輸入單鏈表插入的索引和數(shù)據(jù):");
			scanf("%i%i",&index,&data);//輸入索引和數(shù)據(jù)
			Single_Linked_List_Insert(&single_linked_list,index,data);//單鏈表插入第索引個(gè)元素?cái)?shù)據(jù)為數(shù)據(jù)
		}
		else if(select_number==3)//選擇號(hào)碼等于3
		{
			printf("輸入單鏈表刪除的索引:");
			scanf("%i",&index);//輸入索引
			Single_Linked_List_Delete(&single_linked_list,index);//單鏈表刪除第索引個(gè)元素?cái)?shù)據(jù)
		}
		else if(select_number==4)//選擇號(hào)碼等于4
		{
			printf("輸入單鏈表修改的索引和數(shù)據(jù):");
			scanf("%i%i",&index,&data);//輸入索引和數(shù)據(jù)
			Single_Linked_List_Modify(&single_linked_list,index,data);//單鏈表修改第索引個(gè)元素?cái)?shù)據(jù)為數(shù)據(jù)
		}
		else if(select_number==5)//選擇號(hào)碼等于5
		{
			printf("輸入單鏈表獲取的索引:");
			scanf("%i",&index);//輸入索引
			printf("%i",Single_Linked_List_Obtain(&single_linked_list,index));//輸出單鏈表獲取第索引個(gè)元素?cái)?shù)據(jù)返回值
		}
		else if(select_number==6)//選擇號(hào)碼等于6
			Single_Linked_List_Output(&single_linked_list);//單鏈表輸出
		else if(select_number==7)//選擇號(hào)碼等于7
			Single_Linked_List_Clear(&single_linked_list);//單鏈表清空
	}while(select_number!=0);//選擇號(hào)碼不等于0
	Single_Linked_List_Clear(&single_linked_list);//單鏈表清空
	free(single_linked_list.head);//釋放單鏈表頭
}

C++語言實(shí)現(xiàn)代碼

#include<iostream>//包含輸入輸出流文件
struct Element//元素
{
	int data;//數(shù)據(jù)
	Element*next;//下一個(gè)
};
struct Single_Linked_List//單鏈表
{
	Element*head{new Element[1]{}};//頭初始化為分配1個(gè)元素?cái)?shù)據(jù)類型動(dòng)態(tài)內(nèi)存返回值
	int length{};//長度初始化為0
	~Single_Linked_List(void)//析構(gòu)
	{
		Clear();//清空
		delete[]head;//釋放頭
	}
	int Obtain_Length(void)//獲取長度
	{
		return length;//返回長度并且退出函數(shù)
	}
	void Insert(int insert_index/*插入索引*/,int insert_data/*插入數(shù)據(jù)*/)//插入
	{
		Element*insert_element_prev{head};//插入元素上一個(gè)初始化為頭
		for(int index{};index<insert_index;++index)//索引初始化為0,索引小于插入索引,索引累加1
			insert_element_prev=insert_element_prev->next;//插入元素上一個(gè)賦值為插入元素上一個(gè)下一個(gè)
		Element*insert_element{new Element[1]{insert_data,insert_element_prev->next}};//插入元素初始化為分配1個(gè)元素?cái)?shù)據(jù)類型動(dòng)態(tài)內(nèi)存返回值,插入元素?cái)?shù)據(jù)初始化為插入數(shù)據(jù),插入元素下一個(gè)初始化為插入元素上一個(gè)下一個(gè)
		insert_element_prev->next=insert_element;//插入元素上一個(gè)下一個(gè)賦值為插入元素
		++length;//長度累加1
	}
	void Delete(int delete_index/*刪除索引*/)//刪除
	{
		Element*delete_element_prev{head};//刪除元素上一個(gè)初始化為頭
		for(int index{};index<delete_index;++index)//索引初始化為0,索引小于刪除索引,索引累加1
			delete_element_prev=delete_element_prev->next;//刪除元素上一個(gè)賦值為刪除元素上一個(gè)下一個(gè)
		Element*delete_element{delete_element_prev->next};//刪除元素初始化為刪除元素上一個(gè)下一個(gè)
		delete_element_prev->next=delete_element_prev->next->next;//刪除元素上一個(gè)下一個(gè)賦值為刪除元素上一個(gè)下一個(gè)下一個(gè)
		delete[]delete_element;//釋放刪除元素
		--length;//長度累減1
	}
	void Modify(int modify_index/*修改索引*/,int modify_data/*修改數(shù)據(jù)*/)//修改
	{
		Element*modify_element{head};//修改元素初始化為頭
		for(int index{};index<modify_index;++index)//索引初始化為0,索引小于修改索引,索引累加1
			modify_element=modify_element->next;//修改元素賦值為修改元素下一個(gè)
		modify_element->next->data=modify_data;//修改元素下一個(gè)數(shù)據(jù)賦值為修改數(shù)據(jù)
	}
	int Obtain(int obtain_index/*獲取索引*/)//獲取
	{
		Element*obtain_element{head};//獲取元素初始化為頭
		for(int index{};index<obtain_index;++index)//索引初始化為0,索引小于獲取索引,索引累加1
			obtain_element=obtain_element->next;//獲取元素賦值為獲取元素下一個(gè)
		return obtain_element->next->data;//返回獲取元素下一個(gè)數(shù)據(jù)
	}
	void Output(void)//輸出
	{
		Element*output_element{head};//輸出元素初始化為頭
		for(int index{};index<length;++index)//索引初始化為0,索引小于長度,索引累加1
		{
			output_element=output_element->next;//輸出元素賦值為輸出元素下一個(gè)
			std::cout<<output_element->data<<" ";//標(biāo)準(zhǔn)輸出輸出元素?cái)?shù)據(jù)
		}
	}
	void Clear(void)//清空
	{
		for(;length>0;--length)//長度大于0,長度累減1
		{	
			Element*delete_element{head};//刪除元素初始化為頭
			head=delete_element->next;//頭賦值為刪除元素下一個(gè)
			delete[]delete_element;//釋放刪除元素
		}
	}
};
int main(void)//主函數(shù)
{
	Single_Linked_List single_linked_list;//單鏈表
	int select_number{},index{},data{};//選擇號(hào)碼初始化為0,索引初始化為0,數(shù)據(jù)初始化為0
	do{
		std::cout<<"\n0.退出程序\n1.單鏈表獲取長度\n2.單鏈表插入\n3.單鏈表刪除\n4.單鏈表修改\n5.單鏈表獲取\n6.單鏈表輸出\n7.單鏈表清空\n輸入選擇號(hào)碼:";//標(biāo)準(zhǔn)輸出
		std::cin>>select_number;//標(biāo)準(zhǔn)輸入選擇號(hào)碼
		if(select_number==1)//選擇號(hào)碼等于1
			std::cout<<single_linked_list.Obtain_Length();//標(biāo)準(zhǔn)輸出單鏈表獲取長度返回值
		else if(select_number==2)//選擇號(hào)碼等于2
		{
			std::cout<<"輸入單鏈表插入的索引和數(shù)據(jù):";//標(biāo)準(zhǔn)輸出
			std::cin>>index>>data;//標(biāo)準(zhǔn)輸入索引和數(shù)據(jù)
			single_linked_list.Insert(index,data);//單鏈表插入第索引個(gè)元素?cái)?shù)據(jù)為數(shù)據(jù)
		}
		else if(select_number==3)//選擇號(hào)碼等于3
		{
			std::cout<<"輸入單鏈表刪除的索引:";//標(biāo)準(zhǔn)輸出
			std::cin>>index;//標(biāo)準(zhǔn)輸入索引
			single_linked_list.Delete(index);//單鏈表刪除第索引個(gè)元素?cái)?shù)據(jù)
		}
		else if(select_number==4)//選擇號(hào)碼等于4
		{
			std::cout<<"輸入單鏈表修改的索引和數(shù)據(jù):";//標(biāo)準(zhǔn)輸出
			std::cin>>index>>data;//標(biāo)準(zhǔn)輸入索引和數(shù)據(jù)
			single_linked_list.Modify(index,data);//單鏈表修改第索引個(gè)元素?cái)?shù)據(jù)為數(shù)據(jù)
		}
		else if(select_number==5)//選擇號(hào)碼等于5
		{
			std::cout<<"輸入單鏈表獲取的索引:";//標(biāo)準(zhǔn)輸出
			std::cin>>index;//標(biāo)準(zhǔn)輸入索引
			std::cout<<single_linked_list.Obtain(index);//標(biāo)準(zhǔn)輸出單鏈表獲取第索引個(gè)元素?cái)?shù)據(jù)返回值
		}
		else if(select_number==6)//選擇號(hào)碼等于6
			single_linked_list.Output();//單鏈表輸出
		else if(select_number==7)//選擇號(hào)碼等于7
			single_linked_list.Clear();//單鏈表清空
	}while(select_number!=0);//選擇號(hào)碼不等于0
}

到此這篇關(guān)于C/C++實(shí)現(xiàn)線性單鏈表的示例代碼的文章就介紹到這了,更多相關(guān)C++線性單鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(30.串聯(lián)所有單詞的子串)

    C++實(shí)現(xiàn)LeetCode(30.串聯(lián)所有單詞的子串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(30.串聯(lián)所有單詞的子串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn)

    makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn)

    這篇文章主要介紹了makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C語言尋找無向圖兩點(diǎn)間的最短路徑

    C語言尋找無向圖兩點(diǎn)間的最短路徑

    這篇文章主要為大家詳細(xì)介紹了C語言尋找無向圖兩點(diǎn)間的最短路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++超詳細(xì)講解引用和指針

    C++超詳細(xì)講解引用和指針

    引用是C++一個(gè)很重要的特性,顧名思義是某一個(gè)變量或?qū)ο蟮膭e名,對(duì)引用的操作與對(duì)其所綁定的變量或?qū)ο蟮牟僮魍耆葍r(jià),這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下
    2022-06-06
  • 簡要解讀C++的動(dòng)態(tài)和靜態(tài)關(guān)聯(lián)以及虛析構(gòu)函數(shù)

    簡要解讀C++的動(dòng)態(tài)和靜態(tài)關(guān)聯(lián)以及虛析構(gòu)函數(shù)

    這篇文章主要介紹了簡要解讀C++的動(dòng)態(tài)和靜態(tài)關(guān)聯(lián)以及虛析構(gòu)函數(shù),析構(gòu)函數(shù)在C++編程中平時(shí)并不是太常用,需要的朋友可以參考下
    2015-09-09
  • 帶你深度走入C語言取整以及4種函數(shù)

    帶你深度走入C語言取整以及4種函數(shù)

    大家都知道取整這回事,但是對(duì)于取整只有單一的認(rèn)識(shí),下面這篇文章主要給大家介紹了關(guān)于C語言取整以及4種函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C語言入門篇--局部全局變量的作用域及生命周期

    C語言入門篇--局部全局變量的作用域及生命周期

    本篇文章是c語言基礎(chǔ)篇,本文對(duì)初識(shí)c語言的變量、局部全局變量的作用域及生命周期做了簡要的概述,希望可以幫助大家快速入門c語言的世界,更好的理解c語言
    2021-08-08
  • Qt中QZXing 的編譯與使用

    Qt中QZXing 的編譯與使用

    本文主要介紹了Qt中QZXing 的編譯與使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言實(shí)現(xiàn)通訊錄的詳細(xì)代碼

    C語言實(shí)現(xiàn)通訊錄的詳細(xì)代碼

    本文詳細(xì)講解了C語言實(shí)現(xiàn)通訊錄的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C++中opencv4.1.0環(huán)境配置的詳細(xì)過程

    C++中opencv4.1.0環(huán)境配置的詳細(xì)過程

    這篇文章主要介紹了C++中opencv4.1.0環(huán)境配置的詳細(xì)過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10

最新評(píng)論