数据结构学习笔记(2)线性表

  1 ================
  2 线性表及其基本运算:
  3     1。线性表(linear_list),n个数据元素的有限序列,记为:L=(a1, a2, ..., an)。
  4     定义:linear_list=(D,R)
  5           D={ai|ai ∈ D0, i=1,2,...,n, n>=0} D0表示相同的数据对象。
  6           R={N}, N={<a(i-1), ai>|a(i-1),ai∈D0, i=1,2,3,...,n}
  7
  8     2.基本运算
  9     void initiate(L) 初始化操作
 10     int length(L) 求长度
 11     elm get(L, i) 若i∈[1,n]返回一个第i个数据元素,i叫L的位序。
 12     elm prior(L, elm) 求前驱
 13     elm next(L, elm) 求后继
 14     int locate(L, x) 返回0,或第一次出现的位序。
 15     void inserte(L, i, b)  前插操作i∈[1,n+1]
 16     void delete(L, i) 删除操作i∈[1,n]
 17     beloon empty(L) 判空操作
 18     void clear(L) 置空表操作
 19
 20     3.例子
 21     (1)求两个集合的并,即A=A∪B
 22         I.依次从Lb中取出数据d。
 23         II.判度d在La中是否存在。
 24         III.若不存在,则插入到La中。
 25
 26         //归并两个集合La, Lb
 27         linear_list A∪B(linear_list La, linear_list Lb){
 28             int elm_b, loc;
 29             int n = length(La);
 30             //在Lb中取数据,插入到La中。
 31             for(int k = 0; k < length(Lb); ++k){
 32                 elm_b = get(Lb, k);
 33                 loc = locate(La, elm_b);
 34                 //判断loc在La中是否存在
 35                 if(loc = -1){
 36                     insert(La, n+1, elm_b);
 37                 }
 38                 ++n;
 39             }
 40             return La;
 41         }
 42
 43
 44         //归并两个有序线性表(不含有相同元素)
 45         I.安顺序分别取La,Lb中的元素得到较小的插入Lc,La指针后移,Lb指针不动,再次
 46         比较,这样反复进行插入。如果比较两个值相等,同时移动两个指针。直到某一个
 47         表结束。
 48         II.
 49         III.
 50         IV.
 51         liear_list AUB(liear_list La, liear_list Lb, liear_list Lc){
 52             int a = 0, b = 0, c = -1;
 53             //取La|Lb中的元素插入到Lc中
 54             while(a < length(La) && b < length(Lb)){
 55                 if(get(La, a) < get(Lb, b)){
 56                     insert(Lc, c+1, get(La, a));
 57                     a++;
 58                     c++;
 59                 }else if(get(La, a) == get(Lb, b)){
 60                     insert(Lc, c+1, get(La, a));
 61                     a++;
 62                     b++;
 63                     c++;
 64                 }else{
 65                     insert(Lc, c+1, get(Lb, b));
 66                     c++;
 67                     b++;
 68                 }
 69             }
 70             while(a < length(La)){
 71                 insert(Lc, c+1, get(La, a));
 72                 c++;
 73                 a++;
 74             }
 75             while(b < length(Lb)){
 76                 insert(Lc, c+1, get(Lb, b));
 77                 c++;
 78                 b++;
 79             }
 80             return Lc;
 81         }
 82         /*算法分析:语句频度:length(La)+length(Lb)-相同元素的个数
 83          *时间复杂度:O(length(La)+length(Lb))
 84          *
 85          */
 86

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值