用一組位址任意的儲存單元存放線性表中的資料元素,以元素(
資料元素的映象
) + 指標(
指示後繼元素儲存位置
)= 結點
(表示資料元素 或 資料元素的映象
),以「結點的序列」表示線性表稱作線性鍊錶(單鏈表)。
有幾個基本概念需要掌握,如下:
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);
intlinklist_length(linklist* list);
intlinklist_insert(linklist* list, linklistnode* node,
intpos);
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,
intpos)
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;
intmain(
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...
資料結構之單鏈表
由於順序表再插入或者刪除時需要移動大量資料,並且如果表比較大,會比較難分配連續的儲存空間導致儲存資料失敗。因此可以採用鍊錶結構,鍊錶結構是一種動態儲存分配的結構形式,可以根據需要動態的申請所需的儲存單元。鍊錶又分為單鏈表,雙向鍊錶,以及單迴圈鍊錶,多重鏈的迴圈鍊錶。本文先介紹單鏈表。典型的單鏈表結構...