第三章 线性表

3.1 线性表的定义

线性表(List):零个或多个数据元素的有限序列。

 n为元素总个数,即表长;当n=0时称为空表。

_{a_{i}}是第i个数据元素,称i为数据元素_{a_{i}}在线性表中的位序。

例子: 分析26个字母组成的英文表

             (A,B,C,D,...,Z)

数据元素都是字母; 元素间的关系是线性的。

12星座(白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座、水瓶座、双鱼座)

同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。


3.2 线性表的抽象数据类型

ADT List{

       数据对象:D={_{a_{i}}|_{a_{i}}属于Elemset,(i=1,2,3...,n,n\geqslant0}

       数据关系:R={<a_{i-1},a_{i}>|a_{i-1},a_{i},属于D,(i=2,3,...,n)}

       基本操作

       lnitList(&L);                    DestroyList(&L);

       Listlnsert(&L,i,e);           ListDelete(&L,i,&e);

       .....等等

}ADT List

   注意一个容易混淆的地方:

   当你传递一个参数给函数时,这个参数会不会在函数内被改动决定了使用什么参数形式。

   如果需要被改动,则需要传递指向这个参数的指针。

   如果不用被改动,可以直接传递这个参数。


3.3 线性表的顺序存储结构

3.3.1 顺序存储定义

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

 顺序表的特点:以物理位置相邻表示逻辑关系,任一元素均可随机存取。

3.3.2 顺序存储方式

顺序结构存储结构代码:

#define MAXSIZE 20                      /*存储空间初始分配量 */

typedef int ElemType;                     /*ElemType类型根据实际情况决定,这里定义为int*/

typedef struct                                  

{

       ElemType data[MAXSIZE];  /*数组,存储数据元素*/

       int length;                              /*线性表当前长度*/

}SqList;

补充:C语言的内存动态分配

//数组动态分配
typedef struct
{
    ElemType *data;
    int length;
}SqList;
SqList L;
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);

补充:C++的动态存储分配

//new 类型名T(初值列表)
int *p1=new int;
或 int*p1=new int(10);

补充:C++中参数传递:

参数传递有两种方式:

  •       值传递(参数为整数、实型、字符型等)
  •      传地址(参数为指针变量、引用类型、数组名) 

3.3.3 数据长度和线性表长度的区别

   数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般不变。

   线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。

  在任意时刻,线性表的长度应该小于等于数组的长度。

3.3.4 地址计算方法

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值