线性表习题

上传人:gbs****77 文档编号:10473577 上传时间:2020-04-12 格式:DOC 页数:9 大小:51KB
返回 下载 相关 举报
线性表习题_第1页
第1页 / 共9页
线性表习题_第2页
第2页 / 共9页
线性表习题_第3页
第3页 / 共9页
点击查看更多>>
资源描述
绪言和线性表习题一、 选择题类型1、.在一个单链表中,若p结点不是最后结点,在p之后插入s结点,则实行( )。 A. s-next=p;p-next=s; B、 s-next=p-next; p-next=s; C. s-next=p-next;p=s; D. p-next=s;s-next=p;2.与单链表相比,双链表优点之一( ). A.插入删除操作更简单. B.可随机访问 C.可省略表头指针和表尾指针 D、 顺序访问相临结点更灵活3.在长度为n的顺序表的第i(1in+1)个位置上插入一个元素,元素的移动次数为( ) A、 n-i+1 B.n-i C.i D.i-1 4.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( ) A.顺序表 B.用头指针表示的单循环链表 C、 用尾指针表示的单循环链表 D.单链表 5.在需要经常查找结点的前驱与后继的场合中,使用( )比较合适。 A.单链表 B、 双链表 C.顺序表 D.循环链表6.下面关于线性表的叙述中,错误的为( ) A.顺序表使用一维数组实现的线性表 B.顺序表必须占用一片连续的存储单元 C.顺序表的空间利用率高于链表 D、 在链表中,每个结点只有一个链域7.带头结点head的单链表为空的判断条件是( ) A. head=NUIL B、 head-next=NUIL C. head-next=head D. head!=NUIL8.线性表通常采用两种存储结构是( ) A、 顺序存储结构和链式存储结构 B.散列方式和索引方式 C.链表存储结构和数组 D.线性存储结构和非线性存储结构9线性表采用链式存储时,结点的存储地址( ) A必须是不连续的 B、 连续与否均可 C必须是连续的 D和头结点的存储地址相连续10将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( ) AO(1) BO(n) C、 O(m) DO(m+n)11、在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是( )A.p=p-next; B、 p-next=p-next-next;C.p-next=p; D.p=p-next-next;12在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p-next-next=head,则( )A.p指向头结点 B.p指向尾结点C.*p的直接后继是头结点 D、 *P的直接后继是尾13.为了最快地对线性结构的数据进行某数据元素的读取操作,则其数据存储结构宜采用( )方式。A、顺序存储 B.链式存储C.索引存储 D.散列存储二、判断题(判断下列各小题,正确的在题后括号内打“”,错的打“”。)1、单链表中的头结点就是单链表的第一个结点。( )2、所谓数据的逻辑结构指的是数据元素之间的逻辑关系。( )3、在线性结构中,每个结点都有一个直接前驱和一个直接后继。( )三、填空题1、在单链表中设置头结点的作用_ 简化插入删除算法。2、.设head为带有头结点的单链表的头指针,则判断单链表为空的条件是:_ head-next= =NULL_。3、.带头结点的循环链表L为空表的条件是_ L-next=L _ _。带头结点的双循环链表L为空表的条件是_ L-next=L-prior=L 。4、在如图所示的链表中,若在指针p所指的结点之后插入数据域值相继为a和b的两个结点,则可用下列两个语句实现该操作,它们依次是_ _ s-next-next=p-next _和_ p-next=s_。 5、.通常单链表的头结点指的是_ _在单链表第一个节点之前增设的一个类型相同的结点_;单链表的首结点指的是_ _表结点中的第一个结点_。6、在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为 pnextnext=head 。7、从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需_ _向前移动_一个位置。1、简化插入删除算法. 2、head-next= =NULL_。3、 L-next=L _。L-next=L-prior=L 4、_s-next-next=p-next_和_p-next=s_。 5、_在单链表第一个结点之前增设的一个类型相同的结点_; _表结点中的第一个结点_。6、pnextnext=head 。7、_向前移动_四、算法阅读题 1、.以下函数中,h是带头结点的双向循环链表的头指针。 (1)说明程序的功能; (2)当链表中结点数分别为1和6(不包括头结点)时,请写出程序中while循环体的执行次数。 int f(DListNode *h) DListNode *p,*q; int j=1; p=h-next; q=h-prior; while(p!=q | p-prior!=q)&(j!=0) if(p-data=q-data) p=p-next; q=q-prior; else j=0; return j; (1)是否对称(2)1-0;6-32、阅读下面的算法 LinkList mynote(LinkList L) /L是不带头结点的单链表的头指针 if(L&L-next) q=L;L=Lnext;p=L; S1: while(pnext) p=pnext; S2: pnext=q;qnext=NULL; return L; 请回答下列问题: (1)说明语句S1的功能; (2)说明语句组S2的功能; (3)设链表表示的线性表为(a1,a2, ,an),写出算法执行后的返回值所表示的线性表。(1)查询表的尾节点 (2)将第一个节点链接到表的尾部成为新的尾节点(3)(a2,a3,.an,a1)五、应用题1、假定在学生的档案中含有:姓名、学号、年龄、性别。如采用线性表作为数据结构来实现档案管理问题,分别给出线性表的在顺序实现下的类型定义和在链接实现下的类型定义。2.假设以带头结点的单循环链表作非递减有序线性表的存储结构。请设计一个时间复杂度为O(n)的算法,删除表中所有数值相同的多余元素,并释放结点空间。例如:(7,10,10,21,30,42,42,42,51,70)经算法操作后变为(7,10,21,30,42,51,70)参考答案:typedef struct node int data;struct node * next;LinkList;Delete_Eq(LinkList * head) LinkList * p, * q, * s; p=head; doq= p-next;if(p-data = = q-data) s= q; free(s); q = q-next; else p=q;while(p-next != head);2、线性表逆置void Convers(LinkList *head) LinkList * p, *q, *r; p = head; q = p-next; p-next = NULL; while ( q!= NULL) r=q-next; q-next=p; p=q; q=r; head = p;9
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!