线性表-顺序表和链式表概念及其代码实现【数据结构与算法】

    文章主要是对于数据结构与算法课程学习的读书记录。欢迎学习交流。
    [内容范围]第二章线性表-顺序表和链式表概念及其代码实现。

1 线性表的定义

线性表: n个同类型数据元素的有限序列,记为:
L= (a1,a2,…,ai,…,an)
L为表名;
i为数据元素ai 在线性表中的位序;
n为线性表的表长; n=0 时称为空表;
数据元素之间的关系是:
ai-1领先于ai,ai领先于ai+1。
称ai-1是ai的直接前驱,ai+1是ai的直接后继,
除第一元素a1外,均有唯一的前驱;

2 基于线性表的简单操作

2.1 合并线性表

算法设计:
思想:从LB中逐一取出元素,判断元素是否存在LA中,若不在则将这个元素插入到LA中

//依次从LB中取出第i个数据元素:List_Retrieve(Lb, i, &elem) →elem
//判elem是否在LA中存在:List_Locate(La,elem,&j)
//若不存在,则将elem插入到LA中:List_Insert(La,1,elem)

Status List_Union (SqListPtr La, SqListPtr Lb){
   
ElemType elem; /* 存放从Lb中取出的元素*/
Status status; /*状态代码*/
int i, j, len = List_Size(Lb); /*len存放Lb的元素个数*/
for (i=1; i<=len; i++){
   
List_Retrieve(Lb, i, &elem); /*取出Lb中第i个数据元素*/
status = List_Locate(La,elem,&j); /*判它是否在La中*/
if(status!= success){
    /*如果不在*/
status = List_Insert(La,1,elem); /*插入到第一个位置*/
if(status!= success) break; /*插入失败则退出*/ }
else List_Add(La,j,1);/*La的第j个数据加1*/
}
return status;
}

2.2 合并有序表

问题:已知线性表La和Lb中的元素按照递增顺序排列,现要求将他们合并成一个新的线性表Lc,病似的Lc中元素也按照递增的顺序排列

思想:线性表Lc初始为空。依次扫描La和Lb中的元素,比较
当前元素的值,将较小值的元素插入Lc的表尾之后,如此反
复,直到一个线性表扫描完毕,然后将未完的那个线性表中
余下的元素逐个插入到Lc的表尾之后

Status List_Merge (SqListPtr La, SqListPtr Lb, SqListPtr Lc){
   
ElemType elem1, elem2; status = List_Init(Lc);
int i=1, j=1, k=1; /*i, j, k分别用于指示La, Lb, Lc中当前元素*/
int n = List_Size(La),m = List_Size(Lb);
while(i<=n && j<=m){
    /*两个表都还未处理完*/
List_Retrieve(La,i,&elem1); List_Retrieve(Lb,j,&elem2);
if(elem1<elem2){
    status = List_Insert(Lc,k,elem1); i
  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Windalove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值