您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言數據結構之單鏈表存儲實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言數據結構之單鏈表存儲實例分析文章都會有所收獲,下面我們一起來看看吧。
如果說,順序表的所占用的內存空間是連續的,那么鏈表則是隨機分配的不連續的,那么為了使隨機分散的內存空間串聯在一起形成一種前后相連的關系,指針則起到了關鍵性作用。
單鏈表的基本結構:
頭指針:永遠指向鏈表第一個節點的位置。
頭結點:不存任何數據的空節點,通常作為鏈表的第一個節點。對于鏈表來說,頭節點不是必須的,它的作用只是為了方便解決某些實際問題。
首元結點:首個帶有元素的結點。
其他結點:鏈表中其他的節點。
包括數據域和指針域
typedef struct Link{ char elem;//數據域 struct Link *next;//指針域,用來連接后繼元素 }link;//link為節點名,每個結點都是一個link結構體
(1)創建一個頭結點
(2)聲明一個臨時指針指向頭結點
(3)用循環創建新的結點并賦值且依次相連
newLink a;
a->data=i;
a->next=null;
temp->next=a;
temp=a;
過程如下:
帶頭結點:
link * initLink(){ link *p=(link*)malloc(sizeof(link));//創建頭結點 link*temp = p;//聲明一個指針temp指向頭結點,也就是頭結點的地址賦值給指針變量(注意這不是頭指針而是用來連接數組的臨時指針變量) //生成鏈表 for(int i=1;i<5;i++) { link *a=(link*)malloc(sizeof(link));//生成一個結點 a->elem=i;//給結點的數據域賦值 a->next=NULL;//指針域設置為空 temp->next=a;//上一個結點的指針指向新增結點 temp=temp->next;//臨時指針向后移動也可寫成temp=a } //返回頭結點,通過頭節點的指針即可找到整個鏈表 return p; }
無頭結點的單鏈表初始化:
link * initLink2(){ link *p=NULL;//創建頭指針 link*temp=(link*)malloc(sizeof(link));//創建首元結點 //首元結點初始化 temp->elem=1; temp->next=NULL; p=temp;//頭結點指向首元結點 //接下來從第二個結點開始創建 for(int i=2;i<5;i++){ //創建一個新結點并初始化 link *a=(link*)malloc(sizeof(link)); a->elem=i; a->next=NULL; //將temp結點與新建的a結點建立邏輯關系 temp->next=a; temp=a; } //返回建立的節點,只返回頭指針 p即可,通過頭指針即可找到整個鏈表 return p; }
帶頭結點:
void display(link *p){ link*temp=p;//將temp指向頭結點 //只要temp指針指向的結點的next不是Null,就執行輸出語句。 while(temp->next){ temp=temp->next; printf("%d ",temp->elem); } printf("\n"); }
不帶頭結點:
void display2(link *p){ link* temp=p;//將temp指針重新指向頭結點 //只要temp指針指向的結點的next不是Null,就執行輸出語句。 while (temp) { printf("%d ",temp->elem); temp=temp->next; } printf("\n"); }
#include<stdio.h> #include<stdlib.h> typedef struct Link{ int elem;//數據域 struct Link *next;//指針域,用來連接后繼元素 }link;//link為節點名,每個結點都是一個link結構體 //帶頭結點 link * initLink(){ link *p=(link*)malloc(sizeof(link));//創建頭結點 link*temp = p;//聲明一個指針temp指向頭結點,也就是頭結點的地址賦值給指針變量(注意這不是頭指針而是用來連接數組的臨時指針變量) //生成鏈表 for(int i=1;i<5;i++) { link *a=(link*)malloc(sizeof(link));//生成一個結點 a->elem=i;//給結點的數據域賦值 a->next=NULL;//指針域設置為空 temp->next=a;//上一個結點的指針指向新增結點 temp=temp->next;//臨時指針向后移動也可寫成temp=a } //返回頭結點,通過頭節點的指針即可找到整個鏈表 return p; } //不帶頭結點 link * initLink2(){ link *p=NULL;//創建頭指針 link*temp=(link*)malloc(sizeof(link));//創建首元結點 //首元結點初始化 temp->elem=1; temp->next=NULL; p=temp;//頭結點指向首元結點 //接下來從第二個結點開始創建 for(int i=2;i<5;i++){ //創建一個新結點并初始化 link *a=(link*)malloc(sizeof(link)); a->elem=i; a->next=NULL; //將temp結點與新建的a結點建立邏輯關系 temp->next=a; temp=a; } //返回建立的節點,只返回頭指針 p即可,通過頭指針即可找到整個鏈表 return p; } //帶頭結點 void display(link *p){ link*temp=p;//將temp指向頭結點 //只要temp指針指向的結點的next不是Null,就執行輸出語句。 while(temp->next){ temp=temp->next; printf("%d ",temp->elem); } printf("\n"); } //不帶頭結點 void display2(link *p){ link* temp=p;//將temp指針重新指向頭結點 //只要temp指針指向的結點的next不是Null,就執行輸出語句。 while (temp) { printf("%d ",temp->elem); temp=temp->next; } printf("\n"); } int main() { display(initLink()); return 0; }
輸出結果:
關于“C語言數據結構之單鏈表存儲實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言數據結構之單鏈表存儲實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。