数据结构__头插法建立单链表、尾插法建立单链表
生活随笔
收集整理的這篇文章主要介紹了
数据结构__头插法建立单链表、尾插法建立单链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單鏈表定義、頭插法建表、尾插法建表
一、單鏈表的定義
? ? ? ? 單鏈表是線性表的鏈式存儲,是指通過一組任意的存儲單元來存儲線性表中的數據元素。
? ? ? ? 單鏈表結構定義為:
? ? ? ? ?其中data為數據域,用來存放數據;next為指針域,用來存放后繼結點的地址。
單鏈表優缺點:
? ? ? ? 優點:插入、刪除方便;無需大量連續的存儲單元。
? ? ? ? 缺點:附加指針域,增加了對存儲空間的消耗;查找速度慢,不支持隨機存取。
通常用頭指針來標識一個單鏈表,如單鏈表L,頭指針為NULL時表示一個空表。
此外,為了操作方便,在單鏈表第一個結點之前附加一個結點,稱為頭結點。
頭結點的數據域可以不設任何信息,也可以記錄表長等信息。
頭結點的指針域指向線性表的第一個元素結點,如圖:
二、頭插法建立單鏈表
? ? ? ? 先建立一個空鏈表,然后創建新結點,將輸入的數據存放在新結點的數據域中,再將新結點插入到當前鏈表的表頭,即頭結點之后。如圖:
#include<iostream> using namespace std;typedef struct LNode{ //定義單鏈表結點類型int data; //數據域struct LNode *next; //指針域 }LNode, *LinkList;void List_HeadInster(LinkList &L){ //頭插法函數LNode *s; int x; //定義一個指向LNode的指針sL=(LinkList)malloc(sizeof(LNode)); //創建頭結點L->next=NULL; //初始為空鏈表while(cin >> x){ //輸入新結點的值s=(LNode*)malloc(sizeof(LNode)); //創建新結點s->data=x;s->next=L->next;L->next=s; //將新結點插入表中,L為頭指針if(getchar()=='\n'){ //遇到換行跳出break;}}while(L->next) { //輸出單鏈表中結點的值cout<<L->next->data<<" ";L->next=L->next->next;} }int main(){LinkList L;List_HeadInster(L);return 0; }三、尾插法建立單鏈表
????????尾插法是將新結點插入到當前鏈表的表尾,為此必須增加一個尾指針r,使其始終指向當前鏈表的尾結點,如圖:
?
#include<iostream> using namespace std;typedef struct LNode{ //定義單鏈表結點類型int data; //數據域struct LNode *next; //指針域 }LNode, *LinkList;void List_TailInsert(LinkList &L){ //正向建立單鏈表int x; //設元素類型為整型4L=(LinkList)malloc(sizeof(LNode));LNode *s, *r = L; //r為表尾指針 while(cin >> x){ //輸入結點的值 s=(LNode *)malloc(sizeof(LNode));//生成一個LNode型的結點//并把該結點的起始位置賦給指針變量ss->data=x;r->next=s;r=s; //r指向新的表尾結點if (getchar() == '\n')break;}r->next=NULL; //尾結點指針置空while(L->next) { //輸出單鏈表中結點的值cout<<L->next->data<<" ";L->next=L->next->next;} }int main(){LinkList L;List_TailInsert(L);return 0; }?
兩種方法時間復雜度都為O(n)
總結
以上是生活随笔為你收集整理的数据结构__头插法建立单链表、尾插法建立单链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上周技术关注:函数式编程另类指南
- 下一篇: 数据机房智能母线槽技术分析