erl_线性结构

在一般的语言中线性表包括:
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 ,这些对应后面博客会一一分析讲解,希望各位大神指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值