数据结构线性表(1)

线性表是最基本且最常用的一种线性结构,同时也是其他数据结构的基础,尤其单链表,是贯穿整个数据结构课程的基本技术。

线性表的定义和特点

线性表的定义:由n个数据特性相同的元素构成的有限序列称为线性表(当然,这里指的n当然是大于零的哈)。
线性表中元素的个数n定义为线性表的长度,n等于0时称为空表,所以如果n不等于0的话,那就都不是空表。
当然对于非空的线性表或线性结构来说,他们肯定有他们的特点。
特点:1、存在唯一的一个被称作“第一个”的数据元素;
2、存在唯一的一个被称为“最后一个”的数据元素;
3、除第一个外,结构中的每个数据元素均只有一个前驱;
4、除最后一个之外,每个结构中的每个数据元素均只有一个后继。

线性表的类型定义

线性表是一个相当灵活的数据结构,他的长度可以根据自己的需要来增长或者减少,即不但可以对线性表中的数据元素进行访问,而且还可以进行插入和删除,可以说功能是比较强大了。而且线性表的抽象数据类型定义也有很多。下面给出**线性表的抽象数据类型定义

**:ADT list{
数据对象: D={ai|ai∈ElemSet,i=1,2,……,n,n≥0}
**数据关系**: R={<ai-1,ai>|ai-1,ai∈D,i=2,……,n}
**基本操作**:
  
   InitList(&L)   
          构造一个空的线性表L。
     DestroyList (&L)
         初始条件:线性表L已存在。
         操作结果:销毁线性表L。
     ClearList (&L)
           初始条件:线性表L已存在。
          操作结果:将L重置为空表。
      ListEmpty (L)
           初始条件:线性表L已存在。
           操作结果:若L为空表,则返回true,否则返回false。
       ListLength (L)
             初始条件:线性表L已存在。
             操作结果:返回L中数据元素个数。            GetElem(L,i, &e)
             初始条件:线性表L已存在,且1≤i≤ListLength(L)。
             操作结果:用e返回L中第i个数据元素的值。
             LocateElem(L,e)
             初始条件:线性表L已存在。
             操作结果:返回工中第1个值与e相同的元素在L中的位置。若这样的数据元素不存在,则返回值为0。
             PriorElem(L,cur._e,&pre _e)
            初始条件:线性表工已存在。
            操作结果:若cur _e是L的数据元素,且不是第一个, 则用pre _e返回其前驱,否则操作失败,pre_e无定义
           NextElem(L,cur _e,&next _e)
           初始条件:线性表L已存在。
           操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回共后继,否则操作失败。next _e无定义
           ListInsert (&L,i,e)
           初始条件:线性表L已存在,且1≤i≤ListLength(L)+1。
           操作结果:在L中第i个位置之前插人新的数据元素e,L的长度加1。
           ListDelete(&L,i)
           初始条件:线性表L已存在且非空,且1≤i≤ListLength(L)。
           操作结果:删除L的第i个数据元素,L的长度减1。
           TraverseList(L)
           初始条件:线性表L已存在。
           操作结果:对线性表L进行遍历,在遍历过程中对L的每个结点访问一次。}ADT List}

线性表的顺序表示和实现

线性表的顺序储存表示
线性表的顺序表示指的是用一组地址连续的存储单元依次储存线性表的数据元素,这种表示也称作线性表的顺序储存结构或顺序映像。通常这种存储结构的线性表为顺序表。
** 顺序表的特点**:逻辑上相邻的数据元素,其物理次序也是相邻的。
假设线性表的每个元素需占用l个存储单元,并以所占的第一个 单元的存储地址作为数据元素的存储起始位置。则线性表中第i+ 1个数据元素的存储位置LOC(ai+ 1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:
LOC(ai+1)= LOC(ai) +l
一般来说,线性表的第i个数据元素ai的存储位置为:LOC(ai)= LOC(a1)+(i-1)xl式中,LOC(a1)是线性表的第一个数据元素a1 的存储位置,通常称作线性表的起始位置或基地址,表中相邻的元素ai和ai+1的存储位置LOC(ai)和LOC(ai+1)是相邻的。每一个数据元素的存储位置都和线性表的起始位置相差一个常数, 这个常数和数据元素在线性表中的位序成正比(见图2.2)。由此,只要确定了存储线性表的起始位置,线性表中任一 数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。在这里插入图片描述
由于高级程序设计语言中的数组类型也有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序存储结构。在此,由于线性表的长度可变,且所需最大存储空间随问题不同而不同,则在C语言中可用动态分配的一维数组表示线性表,描述如下:

//--一--顺序表的存储结构----

#define MAXSIZE 100

//顺序表可能达到的最大长度

typedef   struct    

{
ElemType  *elem;  //储存空间的基地址
int  length;  //当前长度
}SqList;  //顺序表的结构类型为Sqlist

特别说明:(1 )数组空间通过后面算法初始化动态分配得到,初始化完成后,数组指针elem指示顺序表的基地址,数组空间大小为MAXSIZE。
(2)元素类型定义中的ElemType 数据类型是为了描述统一而自定的,在实际应用中,用户可根据实际需要具体定义表中数据元素的数据类型,既可以是基本数据类型,如int、float、 char 等,也可以是构造数据类型,如struct结构体类型。
(3) length表示顺序表中当前数据元素的个数。因为C语言数组的下标是从0开始的,而位置序号是从1开始的,所以要注意区分元素的位置序号和该元素在数组中的下标位置之间的对应关系,数据元素a1、a2、…an依次存放在数组elem[0]、elem[1]、 …elem[length-1]中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值