coding第15天1.2

线性表

抽象数据类型线性表的定义如下:
ADT List
{
数据对象:D={ai|ai属于ElemSet,i,2,3…,n,n>=0}
数据关系:R1={<a(i-1),a(i)>|a(i),a(i-1)属于D,i=1,2,…n}
基本操作:
InitList(&L)
操作结果:构造一个空的线性表。
DestroyList(&L)
初始条件:线性表已经存在。
操作结果:销毁线性表。
ClearList(&L)
初始条件:线性表已经存在。
操作结果:将L重置为空表。
ListEmpty(L)
初始条件:线性表已经存在。
操作结果:若表L为空返回TRUE,否则返回FALSE。
ListLength(L)
初始条件:线性表已经存在。
操作结果:返回数据中元素的个数。
GetElem(L,i,&e)
初始条件:线性表已经存在,1<=i<=Listlength(L);
操作结果:用e返回第i个元素的值。
LocateElem(L,e,compare())
初始条件:线性表已经存在,compare是元素判定函数。
操作结果:返回L中第一个与e满足关系compare的数据元素的位序,若这样的元素不存在,则返回值为0;
PriorElem(L,cur_e,&pre_e)
初始条件:线性表已存在。
操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作结果失败,pre_e无定义。
NextElem(L,cur_e,&next_e)
初始条件:线性表已经存在。
操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作结果失败,next_e无定义。
ListInsert(&L,cur_e,&next_e)
初始条件:线性表已经存在,1<=i<=ListLength(L)+1;
操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1.
ListDelete(&L,i,&e)
初始条件:线性表已经存在且非空,1<=i<=ListLength(L)
操作结果:删除L的第i个元素,并用e返回其值,L的长度减一
ListTraverse(L,visit())
初始条件:线性表已经存在
操作结果:依次对每个元素调用visit,一旦visit失败,则操作失败

}ADT List;
费力写下上面的抽象数据类型的定义,只是想说明一个问题:
在利用抽象数据类型描述线性表时候,不管其中的存储方式是什么样的,抽象数据类型提供的函数都是一样的,且功能一样。这种封装使得我们能够轻松的编程。

我们也用c++的理由是:
(1)只关注统一的封装接口
(2)只关注算法
(3)不必关心具体语法,c++的语言表达性更强。注意在本文中函数 命名是以大写开头的

于是利用上述的函数,不需要考虑具体细节就能实现的函数有(比较顺序表与链表用该函数写是否需要区别对待)
(1)LocateElem(L,e,compare())函数,
注意函数实现时候的语法!

#include <unistd.h>
#include <stdio.h>

typedef int Status;

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int ElemType;

//List表示线性表类型在此未定义


Status GetElem(List L,int i,ElemType &c);//函数i满足条件下返回OK,否则放回ERROR
int ListLength(List L);//函数返回L的长度
//参数满足compare函数,函数返回0;否则返回1或者-1;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

来根华子冷静下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值