收藏 分享(赏)

数据结构第二章作业及答案.ppt

上传人:oil007 文档编号:3817427 上传时间:2018-11-19 格式:PPT 页数:15 大小:247.50KB
下载 相关 举报
数据结构第二章作业及答案.ppt_第1页
第1页 / 共15页
数据结构第二章作业及答案.ppt_第2页
第2页 / 共15页
数据结构第二章作业及答案.ppt_第3页
第3页 / 共15页
数据结构第二章作业及答案.ppt_第4页
第4页 / 共15页
数据结构第二章作业及答案.ppt_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、1,数据结构第二章作业及答案 一 、选择题 1下述哪一条是顺序存储结构的优点? A存储密度大 B插入运算方便 C删除运算方便 D可方便地用于各种逻辑结构的存储表示 2下面关于线性表的叙述中,错误的是哪一个? A线性表采用顺序存储,必须占用一片连续的存储单元。 B线性表采用顺序存储,便于进行插入和删除操作。 C线性表采用链接存储,不必占用一片连续的存储单元。 D线性表采用链接存储,便于插入和删除操作。3线性表是具有n个( )的有限序列(n0)。 A表元素 B字符 C数据元素 D数据项 4若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。 A

2、顺序表 B双向链表 C带头结点的双向循环链表 D循环链表,2,5利用双向链表作线性表的存储结构的优点是什么? 便于进行插入和删除的操作 B. 提高按关系查找数据元素的速度 C. 节省空间 D. 便于销毁结构释放空间6链表不具有的特点是: A插入、删除不需要移动元素 B不必事先估计存储空间 C可随机访问任一元素 D所需空间与线性长度成正比7非空的循环链表head的尾结点指针p满足: Ap =head Bp-next=NILL Cp=NILL D p-next= head 8. 对于一个头指针为head的带头结点的线性链表,判定该表为空表的条件是: Ahead=NULL Bhead!=NULL C

3、headnext=head Dheadnext=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的结点,正确的操作是: Ap-next=s; s-next=p-next; B s-next=p-ne

4、xt; p-next=s; Cp-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) Status InitList_Sq(SqList &L) (2) Status ListInsert_Sq(SqL

5、ist &L, int i , ElemType e) (3) ListDelete_Sq(SqList &L, int i, ElemType &e) 四、请写出线性链表的结点类型定义LNode及指向结点的指针类型定义LinkList , 并给出逆序创建带头结点的单链表的算法操作步骤的文字描述及算法的类C语言描述。void CreateList_L(LinkList L, int n),5,五、在双向链表中,在ai之前插入一结点,画出指针的变化,并写出指针变化的主干语句。六、已知q为z所在结点的指针,删除y所在结点。画出指针的变化,并写出指针变化的主干语句。,6,第二章作业解答: 一、 1【

6、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,解答(续): 三、解: 顺序表的类型定义 #define LIST_INIT_SIZE 100 / 线性表存储空间的初始分配量 #define LISTINCREMENT 10 / 线性表存储空间的

7、分配增量 typedef struct ElemType * elem; /线性表存储空间基址 int length; /当前线性表长度 int listsize; /当前分配的线性表存储空间大小/ (以sizeof(ElemType)为单位) SqList; 其中:SqList :类型名, SqList类型的变量是结构变量,它的三个域分别是: *elem:存放线性表元素的一维数组基址;其存储空间在初始化操作(建空表)时动态分配; length:存放线性表的表长; listsize:用于存放当前分配 (存放线性表元素)的存储空间的大小。,8,解答(续):(1) 初始化操作算法(算法2.3 ):

8、 Status InitList_Sq(SqList /InitList_Sq,9,解答(续): (2) 插入操作基本步骤: 1) 若i不合法或表L已满,算法结束并返回 ERROR;否则转2) 2) 将第i个元素及之后的所有元素均后移一个位置 3) 将新元素写入空出的位置; 4) 表长+1,10,解答(续): 插入操作算法(算法2.4 ): Status ListInsert_Sq(SqList /ListInsert_Sq,11,解答(续): (3) 删除算法的主要步骤: 1) 若i 不合法或表L空,算法结束,并返回ERROR;否则转2) 2) 将第i个元素赋值给e; 3) 将第i个元素之后

9、的元素(不包括第i个元素)依次向前移动一个位置; 4) 表长-1,12,解答(续): 删除操作算法(算法2.5 ): Status ListDelete_Sq(SqList /ListDelete_Sq,13,解答(续): 四、线性链表的结点类型定义及指向结点的指针类型定义 typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList; 逆序创建带头结点的单链表的算法操作如下: (1)建立一个“空表”; (2)输入数据元素an,建立结点并插入; (3)输入数据元素an-1,建立结点并插入; (4)依次类推,直至

10、输入a1为止。,14,解答(续): 逆序创建带头结点的单链表的算法的类C语言描述如下: void CreateList_L(LinkList L, int n) / 逆序输入 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) sprior =qprior; (2) qpriornext =s;(3) snext=q; (4) qprior=s; 六、解: (此处图略)(1) p =qprior; (2) ppriornext =q;(3) qprior =pprior; (4) free(p);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报