做机械外贸什么网站好,上海室内设计,互联网产品推广方案范文,重庆建筑模板生产厂家数据结构#xff08;线性表部分2#xff09; 数据结构习题持续更新中#xff01;#xff01;#xff01; 目录 一、单选题二、简答题1. 顺序表就地逆置2. 循环单项链表的就地逆置 作业习题笔记#xff1a;
该部分是线性表部分习题的补充、更多习题见: 数据结构#xf…数据结构线性表部分2 数据结构习题持续更新中 目录 一、单选题二、简答题1. 顺序表就地逆置2. 循环单项链表的就地逆置 作业习题笔记
该部分是线性表部分习题的补充、更多习题见: 数据结构线性表习题1详细一元多项式的操作方法见文章【数据结构】一元多项式的表示与相加无序输入 有序输出知识点【数据结构】线性表部分笔记1以及静态链表、循环单链表、双向链表、双向循环链表线性表笔记2
一、单选题
下面关于线性表的叙述中,错误的是哪一个?( ) A 线性表采用顺序存储,必须占用一片连续的存储单元。 B 线性表采用顺序存储,便于进行插入和删除操作。 C 线性表采用链接存储,不必占用一片连续的存储单元。 D 线性表采用链接存储,便于插入和删除操作。 选B A、C、D是正确的是顺序存储结构和链式存储结构的特点. 顺序存储的根据数组指针直接定位在顺序表的任何位置上插入一个数据元素平均需要移动n/2个数据元素算法效率为O(n) 线性表是具有 n 个( )的有限序列(n0)。 A 表元素 B 字符 C 数据元素 D 数据项 E 信息项 选 C 数据元素是数据的基本单位通常作为一个整体进行考虑和处理。 一个数据元素可由若干个数据项组成数据项是构成数据元素的不可分割的最小单位。例如学生记录就是一个数据元素它由学号、姓名、性别等数据项组成 引用牛客网中的解析 线性表0个或者多个数据元素的有限序列。 数据项一个数据元素可以由多个数据项组成例如人由头身体双手双脚颈部组成。 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。 A 顺序表 B 双链表 C 带头结点的双循环链表 D 单循环链表 选A 对于B、C、D链表不能随意存取指定序号的元素。因此应使用顺序表来存取任一指定序号的元素该操作的复杂度为O(n)。同时顺序表在最后进行插入和删除一个元素的复杂度只是是O(1) 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素则采用( )存储方式最节省运算时间。 A 单链表 B 仅有头指针的单循环链表 C 双链表 D 仅有尾指针的单循环链表 选D 对于A、B、C要想在尾端插入结点需要遍历整个链表,复杂度为O(n)。 对于D要插入结点只要改变一下指针即可要删除头结点只要将指针移动到头结点即可。 链表不具有的特点是( ) A 插入、删除不需要移动元素 B 可随机访问任一元素 C 不必事先估计存储空间 D 所需空间与线性长度成正比 选B 链表不能随机访问任一元素因为其存储空间不连续需要通过链表指针去寻找 下面的叙述不正确的是( ) A 线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比 B 线性表在链式存储时,查找第 i 个元素的时间同 i 的值相关 C 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比 D 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关 选C 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关 若长度为 n 的线性表采用顺序存储结构,在其第 i 个位置插入一个新元素的算法的时间复杂度为( )(1in1)。 A O(0) B O(1) C O(n) D O(n^2) 选C 顺序存储的根据数组指针直接定位在顺序表的任何位置上插入一个数据元素平均需要移动n/2个数据元素算法效率为On 对于一个头指针为 head 的带头结点的单链表,判定该表为空表的条件是( ) A headNULL; B head-nextNULL; C head-nexthead; D head!NULL; 选B 由于单链表是带头结点的单链表头指针为 head第一个结点为head -next。 则判断该单链表表为空的条件是head -nextNULL选项ACD都错误。 所以正确答案为B。 双向链表中有两个指针域,llink 和 rlink 分别指向前趋及后继,设 p 指向链表中的一个结点,现要求删去 p 所指结点,则正确的删除是( ) A p-llink-rlink p-llink; p-llink-rlink p-rlink; free(p); B free(p); p-llink-rlink p-llink; p-llink-rlink p-rlink; C p-llink-rlink p-llink; free(p); p-llink-rlink p-rlink; D 以上 A,B,C 都不对。 选D 双向链表中有两个指针域llink 和 rlink分别指回前驱及后继设 p 指向链表中的一个结点q 指向一待插入结点现要求在 p 前插入 q则正确的插入为 。 A p-llink q; q-rlink p; p-llink-rlink q;q-llink p-llink; B q-llink p-llink; p-llink-rlink q; q-rlink p;p-llink q-rlink; C q-rlink p; p-rlink q;p-llink-rlink q; q-rlink p; D p-llink-rlink q; q-rlink p;q-llink p-llink; p-llink q; 选D 二、简答题
1. 顺序表就地逆置
用类C语言设计算法实现顺序表就地逆置
//实现顺序表就地逆置
//就地逆置顺序表
//写法一
void Reverse(SqList L){int temp;for(int i0;iL.length/2;i){temp *(L.elemi);*(L.elemi)*(L.elemL.length-1-i);*(L.elemL.length-1-i)temp;// temp L.elem[i];// L.elem[i] L.elem[L.length - 1 - i];// L.elem[L.length - 1 - i] temp;}}//写法二
//顺序表就地逆置
void Reverse2(SqList L) {int *start_arry L.elem;//指向首地址int *end_arry L.elemL.length-1;//指向存放数据尾部位置while (start_arry end_arry) {int temp *start_arry;*start_arry *end_arry;*end_arry temp;start_arry;end_arry--;}
}2. 循环单项链表的就地逆置
用类C语言设计算法实现循环单项链表的就地逆置
//实现循环单项链表的就地逆置
//方法一
//循环单链表就地逆置()
void Reverse(LinkList L) {LinkList pre, curr, next;pre L;curr L-next;while (curr!L) {next curr-next;curr-next pre;pre curr;curr next;}L-next pre; // 之后将头节点 指向 原本的尾结点
}//方法二
//循环链表的就地倒置
void Reverse_Circular(LinkList Link_Circular){if ( Link_Circular-next Link_Circular) {return; // 链表为空或只有一个节点无需逆置}LinkList p,q; int num1;p Link_Circular-next; /*p为原链表的当前处理节点*/while(p ! Link_Circular ){ /*当原链表未处理完*/q p-next; /*q指针保留原链表当前处理节点的下一个节点*/if(num){p-next Link_Circular; /*将当前处理节点p插入到逆置L的表头*/num--; //对第一个结点特殊处理}elsep-next Link_Circular-next; Link_Circular-next p;p q; /*p指向下一个待插入的节点*/}}
作业习题笔记
该部分是线性表部分习题的补充、更多习题见: 数据结构线性表习题1详细一元多项式的操作方法见文章【数据结构】一元多项式的表示与相加无序输入 有序输出知识点【数据结构】线性表部分笔记1以及静态链表、循环单链表、双向链表、双向循环链表线性表笔记2