数据结构第二章作业及答案.ppt
1 数据结构第二章作业及答案一 选择题1 下述哪一条是顺序存储结构的优点 A 存储密度大B 插入运算方便C 删除运算方便D 可方便地用于各种逻辑结构的存储表示2 下面关于线性表的叙述中 错误的是哪一个 A 线性表采用顺序存储 必须占用一片连续的存储单元 B 线性表采用顺序存储 便于进行插入和删除操作 C 线性表采用链接存储 不必占用一片连续的存储单元 D 线性表采用链接存储 便于插入和删除操作 3 线性表是具有n个 的有限序列 n 0 A 表元素B 字符C 数据元素D 数据项4 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算 则利用 存储方式最节省时间 A 顺序表B 双向链表C 带头结点的双向循环链表D 循环链表 2 5 利用双向链表作线性表的存储结构的优点是什么 便于进行插入和删除的操作B 提高按关系查找数据元素的速度C 节省空间D 便于销毁结构释放空间6 链表不具有的特点是 A 插入 删除不需要移动元素B 不必事先估计存储空间C 可随机访问任一元素D 所需空间与线性长度成正比7 非空的循环链表head的尾结点指针p满足 A p headB p next NILLC p NILLD p next head8 对于一个头指针为head的带头结点的线性链表 判定该表为空表的条件是 A head NULLB head NULLC head next headD head next NULL 3 9 设线性链表中结点的结构为 data next 已知指针q所指结点是指针p所指结点的直接前驱 若在 q与 p之间插入结点 s 则应执行下列哪一个操作 s next p next p next s B q next s s next p p next s next s next p p next s s next q 10 在线性链表指针为p的结点之后插入指针为s的结点 正确的操作是 A p next s s next p next B s next p next p next s C p next s p next s next D p next s next p next s 请将选择题答案写在下面括号内 1 2 3 4 5 6 7 8 9 10 4 二 顺序表和线性链表的特点分别是什么 三 请写出顺序表的类型定义SqList 解释各变量和常量的含义 并给出初始化操作 插入操作和删除操作的算法的类C语言描述 其中插入和删除操作还要求给出算法操作步骤的文字描述 1 StatusInitList Sq SqList L 2 StatusListInsert Sq SqList L inti ElemTypee 3 ListDelete Sq SqList L inti ElemType e 四 请写出线性链表的结点类型定义LNode及指向结点的指针类型定义LinkList 并给出逆序创建带头结点的单链表的算法操作步骤的文字描述及算法的类C语言描述 voidCreateList L LinkListL intn 5 五 在双向链表中 在ai之前插入一结点 画出指针的变化 并写出指针变化的主干语句 六 已知q为z所在结点的指针 删除y所在结点 画出指针的变化 并写出指针变化的主干语句 6 第二章作业解答 一 1 A 2 B 3 C 4 A 5 B 6 C 7 D 8 D 9 B 10 B 二 顺序表的特点 1 通过元素的存储顺序反映线性表中数据元素之间的逻辑关系 2 可随机存取顺序表的元素 3 顺序表的插入 删除操作要通过移动元素实现 线性链表的特点 1 通过保存直接后继元素的存储位置来表示数据元素之间的逻辑关系 2 插入删除操作通过修改结点的指针实现 3 不能随机存取元素 7 解答 续 三 解 顺序表的类型定义 defineLIST INIT SIZE100 线性表存储空间的初始分配量 defineLISTINCREMENT10 线性表存储空间的分配增量typedefstruct ElemType elem 线性表存储空间基址intlength 当前线性表长度intlistsize 当前分配的线性表存储空间大小 以sizeof ElemType 为单位 SqList 其中 SqList 类型名 SqList类型的变量是结构变量 它的三个域分别是 elem 存放线性表元素的一维数组基址 其存储空间在初始化操作 建空表 时动态分配 length 存放线性表的表长 listsize 用于存放当前分配 存放线性表元素 的存储空间的大小 8 解答 续 1 初始化操作算法 算法2 3 StatusInitList Sq SqList InitList Sq 9 解答 续 2 插入操作基本步骤 1 若i不合法或表L已满 算法结束并返回ERROR 否则转2 2 将第i个元素及之后的所有元素均后移一个位置3 将新元素写入空出的位置 4 表长 1 10 解答 续 插入操作算法 算法2 4 StatusListInsert Sq SqList ListInsert Sq 11 解答 续 3 删除算法的主要步骤 1 若i不合法或表L空 算法结束 并返回ERROR 否则转2 2 将第i个元素赋值给e 3 将第i个元素之后的元素 不包括第i个元素 依次向前移动一个位置 4 表长 1 12 解答 续 删除操作算法 算法2 5 StatusListDelete Sq SqList ListDelete Sq 13 解答 续 四 线性链表的结点类型定义及指向结点的指针类型定义typedefstructLNode ElemTypedata structLNode next LNode LinkList 逆序创建带头结点的单链表的算法操作如下 1 建立一个 空表 2 输入数据元素an 建立结点并插入 3 输入数据元素an 1 建立结点并插入 4 依次类推 直至输入a1为止 14 解答 续 逆序创建带头结点的单链表的算法的类C语言描述如下 voidCreateList L LinkListL intn 逆序输入n个数据元素 建立带头结点的单链表L LinkList malloc sizeof LNode L next NULL 先建立一个带头结点的单链表for i n i 0 i p LinkList malloc sizeof LNode scanf 插入 CreateList L 15 解答 续 五 解 此处图略 1 s prior q prior 2 q prior next s 3 s next q 4 q prior s 六 解 此处图略 1 p q prior 2 p prior next q 3 q prior p prior 4 free p