数据结构(C语言版)——线性表

学习目录:

1.线性表

2.线性表的顺序表示和实现


学习内容:

1.线性表

(1)定义:由n(n>=0)个数据特征相同的元素构成的有限序列,称为线性表;若线性表中元素的个数n定义为线性表的长度,当n=0时称之为空表。

(2)对于非空的线性表或线性结构,其特点是:

  • 存在唯一的一个被称作“第一个”的数据元素;
  • 存在唯一的一个被称作“最后一个”的数据元素;
  • 除第一个元素之外,结构中的每个数据元素均只有一个前驱;
  • 除最后一个元素之外,结构中的每个数据元素均只有一个后继。

(3)线性表的类型定义——ADT定义

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(Lre)
初始条件:线性表L已存在
操作结果:返回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已存在且非空,且1iListLength(I)。
操作结果 :删除L的第i个数据元素,L的长度减1
TraverseList(L)
初始条件:线性表L已存在。
操作结果:对线性表L进行遍历,在遍历过程中对L的每个节点访问一次

     抽象的数据类型仅是一个模型的定义,并不涉及模型的具体实现,因此这里描述中所涉及的参数不必考虑具体数据类型。在实际应用中,数据元素可能有多种类型,到时可根据具体的需要选择使用不同的数据类型。

2.线性表的顺序表示和实现

(1)线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素,这种表示称为线性表的顺序存储结构或顺序映像。通常称这种存储结构的线性表为顺序表。其特点是:逻辑上相邻的数据元素,其物理位置也是相邻的。同时线性表的顺序存储结构是一种随机存取的存储结构。

顺序表的存储结构:

#define MAXSIZE 100  //顺序表可达到的最大长度
typedef struct
{
   ElemType *elem;    //存储空间的基地址
   int length;    //当前长度
}SqList;         顺序表的结构类型为SqList

图书数据的实例:

#define MAXSIZE 10000  
typedef struct   //图书信息的定义
{
  char no[20];     //图书编号
  char name[50];    //图书名称
  float price;       //图书价格
}Book;      
typedef struct
{
   ElemType *elem;    
   int length;    
}SqList;         

 (2)顺序表中基本操作的实现:初始化、取值、查找、插入、删除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值