資料結構_線性表之連結串列(1)
阿新 • • 發佈:2020-08-14
這是連結串列的第一篇。連結串列方便插入刪除,但是不是隨機存取。實際應用中,用於頻繁的增加刪除操作。
1.基礎知識。
單鏈表:
<1>帶頭結點單鏈表
L為頭指標,指向第一個結點,當有頭結點時,第一個結點為頭結點;當沒有頭結點時,第一個結點為儲存第一個元素的a1結點
<2>不帶頭結點的單鏈表
兩者區別:通常使用有頭結點的連結串列,因為有頭結點比較方便。因為對於類似頭插法這樣的操作,需要對第一個儲存元素的結點進行操作時,很明顯帶有頭結點的頭指標可以保持不變,因為元素操作都在頭結點與a1結點之間完成;而對於沒有頭結點的連結串列,需要頻繁改變頭指標的位置,才能保持頭指標始終指向第一個結點。
2.基本操作
<1>頭插法建立單鏈表:總是在頭部操作,進行插值
程式碼:
typedef struct Node{ int data; struct Node *next; }Node; //頭插法建立單鏈表,插入的元素總在頭結點之後 Node *CreateList_L(LinkList &L,int n){//前提L已經初始化完成 Node *p; int num;//p儲存結點,num儲存資料 L = (Node*)malloc(sizeof(Node));//建立頭結點 L->next = NULL;for(int i=0;i<n;i++){ p = (Node*)malloc(sizeof(Node));//建立新的結點 cin>>num; p->data = num;//存入結點資料域 p->next = L->next;//p指向下一個 L->next = p;//再將p給單鏈表L的表頭 } return L; //返回值為Node*型 }
<2>尾插法建立單鏈表:總是在尾部操作,進行插值
尾插法需要增加一個尾指標,尾指標總是用於指向最後一個尾結點
第一步:
第二步:
以此類推,每一次r都往後移動。
程式碼:
typedef struct Node{ int data; struct Node *next; }Node; //尾插法建立單鏈表,插入的元素總在最後一個位置 Node *CreateList_L(LinkList &L,int n){//前提L已經初始化完成 Node *p,*r; int num;//p儲存結點,num儲存資料,r用於指向最後一個結點 L = (Node*)malloc(sizeof(Node));//建立頭結點 L->next = NULL; for(int i=0;i<n;i++){ p = (Node*)malloc(sizeof(Node));//建立新的結點 cin>>num; p->data = num;//存入結點資料域 r->next = p;//p指向下一個 r = p;//r指標後移,指向尾結點 } r->next = NULL;//插入操作結束時,尾結點置空 return L; //返回值為Node*型 }