C/C++實(shí)現(xiàn)線性單鏈表的示例代碼
線性單鏈表簡介
使用鏈存儲(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)所有單詞的子串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07makefile如何調(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++的動(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-09C++中opencv4.1.0環(huán)境配置的詳細(xì)過程
這篇文章主要介紹了C++中opencv4.1.0環(huán)境配置的詳細(xì)過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10