資料結構之單鏈表

2021-08-01 09:44:36 字數 3402 閱讀 9264

用一組位址任意的儲存單元存放線性表中的資料元素,以元素(資料元素的映象) + 指標(指示後繼元素儲存位置)= 結點(表示資料元素 或 資料元素的映象),以「結點的序列」表示線性表稱作線性鍊錶(單鏈表)。

有幾個基本概念需要掌握,如下:

1.表頭結點

鍊錶中的第乙個結點,包含指向第乙個資料元素的指標以及鍊錶自身的一些資訊。

2.資料結點

鍊錶中代表資料元素的結點,包含指向下乙個資料元素的指標和資料元素的資訊

3.尾結點

鍊錶中的最後乙個資料結點,其下一元素指標為空,表示無後繼

這裡主要介紹線性表的常用操作:

l 建立線性表

l 銷毀線性表

l 清空線性表

l 將表中元素倒置

l 表元素插入

l 表元素刪除

l 獲取表中某個位置的元素

l 獲取表長度

**總分為三個檔案:

linklist.h : 放置功能函式的宣告,以及表的宣告,表結點的定義 

linklist.c : 放置功能函式的定義,以及表的定義

main.c      : 主函式,使用功能函式完成各種需求,不過一般用作測試

這裡著重說下插入操作﹑刪除操作和倒置操作:

插入操作:

如圖

插入元素方法:

首先判斷線性表﹑插入位置是否合法

由表頭開始通過next指標移動pos次後,當前元素的next指標即指向要插入的位置

把當前元素(current)的next指標包含的位址賦給新元素(node)的next指標

把新元素(node)的位址賦給當前元素(current)的next指標

最後把線性表長度加1

刪除操作:

如圖

刪除元素方法:

首先判斷線性表﹑刪除位置是否合法

獲取第pos個元素

將第pos個元素的next指標儲存的位址賦給第pos個元素前乙個元素的next指標

最後把錶長度減1

倒置操作:

如圖

倒置元素方法:

把頭結點指向的首元素的next指標賦為null

然後把首元素以後的結點依次每個插入到頭結點和首元素中間

ok! 上**:

linklist.h

[cpp]view plain

copy

#ifndef _linklist_h_

#define _linklist_h_

typedef

void linklist;  

typedef

struct _tag_linklistnode linklistnode;  

struct _tag_linklistnode  

;  linklist* linklist_create();  

void linklist_destroy(linklist* list);  

void linklist_clear(linklist* list);  

void linklist_reverse(linklist* list);  

int linklist_length(linklist* list);  

int linklist_insert(linklist* list, linklistnode* node, int pos);  

linklistnode* linklist_get(linklist* list, int pos);  

linklistnode* linklist_delete(linklist* list, int pos);  

#endif

linklist.c

[cpp]view plain

copy

#include 

#include 

#include 「linklist.h」

typedef

struct _tag_linklist  

tlinklist;  

linklist* linklist_create()  

return ret;  

}  void linklist_destroy(linklist* list)  

void linklist_clear(linklist* list)  

}  void linklist_reverse(linklist* list)  

}  }  int linklist_length(linklist* list)  

return ret;  

}  int linklist_insert(linklist* list, linklistnode* node, int pos)  

linklistnode* current = (linklistnode*)slist;  

for(i=0; (inext!=null); i++)  

node->next = current->next;  

current->next = node;  

slist->length++;  

}  return ret;  

}  linklistnode* linklist_get(linklist* list, int pos)  

ret = current->next;  

}  return ret;  

}  linklistnode* linklist_delete(linklist* list, int pos)  

ret = current->next;  

current->next = ret->next;  

slist->length–;  

}  return ret;  

}  

main.c

[cpp]view plain

copy

#include 

#include 

#include 「linklist.h」

typedef

struct _tag_value  

value;  

int main(void)  

while(linklist_length(list) > 0)  

linklist_destroy(list);  

return 0;  

}  

資料結構之單鏈表

date 08 07 06 descript 單鏈表的實現與應用 public class linlist public node gethead 定位函式 public void index int i throws exception if i 1 current head.next int j...

資料結構之單鏈表

鍊錶 儲存結構的一種,包含兩個部分,資料域和指標域,相對於順序儲存結構來說,插入和刪除的演算法時間複雜度只為o 1 定義 定義 typedef struct node linklist linklist,指標指向每乙個元素 typedef struct nodenode 以下為簡單的c語言實現 in...

資料結構之單鏈表

由於順序表再插入或者刪除時需要移動大量資料,並且如果表比較大,會比較難分配連續的儲存空間導致儲存資料失敗。因此可以採用鍊錶結構,鍊錶結構是一種動態儲存分配的結構形式,可以根據需要動態的申請所需的儲存單元。鍊錶又分為單鏈表,雙向鍊錶,以及單迴圈鍊錶,多重鏈的迴圈鍊錶。本文先介紹單鏈表。典型的單鏈表結構...