跳到正文

2.1 线性表的定义和基本操作

40 分钟

2.1 线性表:先把“第几个”和“存在哪里”分开

线性表是 个同类型元素的有限序列,记作 。这里描述的是逻辑关系:除 外每个元素有唯一直接前驱,除 外每个元素有唯一直接后继。它没有规定元素必须挨着存放,因此数组和链表都能实现同一个线性表。

最容易混淆的是位序与下标。位序回答“这是表中第几个元素”,从 1 开始;C 数组下标从 0 开始。于是第 个元素若用数组保存,应访问 data[i-1]。空表长度是 0,不存在表头和表尾;“整数集合”也不是线性表,因为它既可能无限,也没有约定唯一次序。

一个可用的线性表接口至少覆盖创建、销毁、增、删、查:InitListDestroyListListInsert(i,e)ListDelete(i,e)GetElem(i)LocateElem(e)。接口只规定行为,不绑定顺序或链式实现。插入到位序 的合法范围是 ,删除则是

再看参数传递。若操作会改变表长、首指针或内部元素,修改必须对调用者可见;C 中通常传结构体指针,C++ 也可传引用。输出被删元素也应通过返回值或输出参数带回。只把结构体按值传入,函数改到的是副本。

陪做:表 [12,20,35] 在位序 2 插入 18,结果是 [12,18,20,35];删除位序 3,删掉的是 20,而不是数组下标 3 对应的 35。每一步先标位序,再翻译成实现下标。

错解反馈:把“有序表”误解为数值递增,错在混淆了“存在先后次序”和“按关键字排序”;说链表没有位序也错,位序属于逻辑序列,与地址是否连续无关。

迁移练习:设计 Replace(L,i,x) 的前置条件与效果。参考:要求 ,把第 个元素改为 ,表长及其余元素次序不变。独立验收:能对任意操作写出合法位序范围,并说明哪些参数的修改必须带回。

小纸条

单选:长度 n 的线性表,在哪些位序可以插入新元素?A 0..n-1 B 1..n C 1..n+1 D 0..n

登录 后可看答案

Practice

本课练习

0

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

本课练习正在补齐,暂不应标记为完成。