在一般的语言中线性表包括:
1、线性表:由零个或多个数据元素组成的有限序列。
2、单链表:存放数据元素信息的称为数据域,存放其后继地址的称为指针域。因此n个元素的线性表通过每个结点的指针域拉成了一个“链子”,称之为链表。因为每个结点中只有一个指向后继的指针,所以称其为单链表。
3、静态链表:静态链表中要解决的是:如何用静态模拟动态链表结构的存储空间分配,也就是需要的时候申请,不需要的时候释放。
4、循环链表:表头指针置入尾指针域,则使得链表头尾结点相连,就构成了单循环链表。
但是erlang没有指针和数组下标所以在线性表这块只能用list做处理,下面代码是做了基本的初始化,查找,插入,删除,仅仅封装了lists模块,仅作学习看看:
%% Copyright
-module(line_data).
-author("sugar").
%% API
-compile(export_all).
run_time(Func,Arg)->
timer:tc(?MODULE,Func,Arg).
%%初始化
init(Len)->
lists:foldl(fun(Key,Acc)->
[{Key,Key}|Acc]
end,[],lists:seq(1,Len)).
%% D1=line_data:run_time(init,[1000000]). 341000 微秒
%%插入
insert(Pos,{Key,Key},List) when Pos =< length(List) ->
{Head,Tail} = lists:split(Pos,List),
Head ++ [{Key,Key}|Tail];
insert(_, _, _) ->
error.
%% line_data:run_time(insert,[100000,{100000,100000},D1]). 18000 微秒
%% line_data:run_time(insert,[1000000,{1000000,1000000},D1]). 172000 微秒
%%删除 具体值
delete_data({Key,Key},List)->
lists:delete({Key,Key},List);
delete_data(_,_) -> error.
%% line_data:run_time(delete_data,[{9,9},D1]). 114000 微秒
%%删除位置
delete_pos(Pos,List) when Pos =< length(List) ->
lists:keydelete(Pos,1,List);
delete_pos(_, _) -> error.
%% line_data:run_time(delete_pos,[{9,9},D1]). 104000 微秒
find(Pos,List) when Pos =< length(List) ->
lists:keyfind(Pos, 1, List);
find(_, _) ->
error.
%% line_data:run_time(find,[9,D1]). 4000 微秒
作为erlang最常用的数据结构lists的基本操作都在O(n)级别,作为kv存储的话erlang还是有比较丰富的数据结构的比如:property list (proplist), orderd dictionary(orddict) 这两个数据结构存储相对轻量的数据,大量的数据存储结构可以用 dicts , gb_trees ,这些对应后面博客会一一分析讲解,希望各位大神指点。