数据结构课上笔记5

介绍了链表和基本操作

用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此,链表中元素的逻辑次序和 物理次序不一定相同。

 

定义:

typedef  struct  Lnode{  //声明结点的类型和指向结点的指针类型  ElemType         data;    //数据元素的类型 struct   Lnode  *next;   //指示结点地址的指针  
}Lnode, *LinkList;  
struct Student
{ char num[8];   //数据域char name[8];  //数据域int score;          //数据域struct Student *next;  // next 既是 struct Student // 类型中的一个成员,又指 // 向 struct Student 类型的数据。 
}Stu_1, Stu_2, Stu_3, *LL;  

头结点:在单链表的第一个结点之前人为地附设的一个结点。

带头结点操作会方便很多。

带和不带的我都写过了

下面列出我见过的一些好题

1、

线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

  • 正确
  • 错误

 

错,线性表是逻辑结构概念,可以顺序存储或链式储,与元素数据类型无关。链表就是线性表的一种  前后矛盾

 

2、

若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(    )存储方式最节省运算时间。

  • 单链表
  • 仅有头指针的单循环链表
  • 双链表
  • 仅有尾指针的单循环链表

    对于A,B,C要想在尾端插入结点,需要遍历整个链表。

    对于D,要插入结点,只要改变一下指针即可,要删除头结点,只要删除指针.next的元素即可。

 

3、注意:线性表是具有n个数据元素的有限序列,而不是数据项

 

4、

以下关于单向链表说法正确的是

  • 如果两个单向链表相交,那他们的尾结点一定相同
  • 快慢指针是判断一个单向链表有没有环的一种方法
  • 有环的单向链表跟无环的单向链表不可能相交
  • 如果两个单向链表相交,那这两个链表都一定不存在环

自己多画画想想就明白了,关于快慢指针我以后会写总结。

 

5、

链接线性表是顺序存取的线性表 。 ( )

  • 正确
  • 错误

链接线性表可以理解为链表
线性表分为顺序表和链表
顺序表是顺序存储结构、随机存取结构
链表是随机存储结构、顺序存取结构

 

6、

typedef struct node_s{int item;struct node_s* next;
}node_t;
node_t* reverse_list(node_t* head)
{node_t* n=head;head=NULL;while(n){_________               }return head;}

空白处填入以下哪项能实现该函数的功能?

  • node_t* m=head; head=n; head->next=m; n=n->next;
  • node_t* m=n; n=n->next; m->next=head; head=m;
  • node_t* m=n->next; n->next=head; n=m; head=n;
  • head=n->next; head->next=n; n=n->next;


 

代码的功能是要实现链表的反转。为了方便阐述,每个结点用①②③④⑤⑥等来标示。

在执行while(n)循环之前,有两句代码:

node_t* n=head;

head=NULL;

这两行代码的中:第一句的作用是用一个临时变量n来保存结点①,第二句是把head修改为NULL。

然后就开始遍历了,我们看到while循环里的那四句代码:

node_t* m=n; 
n=n->next; 
m->next=head; 
head=m;

先看前两句,用m来保存n,然后让n指向n的下一个结点,之所以复制 n 给 m ,是因为 n 的作用其实是  控制while循环次数  的作用,每循环一次它就要被修改为指向下一个结点。

再看后两句,变量head在这里像是一个临时变量,后两句让 m 指向了 head,然后 head 等于 m。

 

7、

若某表最常用的操作是在最后一个结点之后插入一个节点或删除最后一二个结点,则采用()省运算时间。

  • 单链表
  • 双链表
  • 单循环链表
  • 带头结点的双循环链表

D

带头结点的双向循环链表,头结点的前驱即可找到最后一个结点,可以快速插入,再向前可以找到最后一二个结点快速删除

单链表找到链表尾部需要扫描整个链表

双链表找到链表尾部也需要扫描整个链表

单循环链表只有单向指针,找到链表尾部也需要扫描整个链表

 

8、

单链表的存储密度(  )

  • 大于1
  • 等于1
  • 小于1
  • 不能确定

全麦白

存储密度 = 数据项所占空间 / 结点所占空间

 

9、完成在双循环链表结点p之后插入s的操作是

  • s->prior=p; s->next=p->next; p->next->prior=s ; p->next=s;

 

10、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()

  • 仅修改队头指针
  • 仅修改队尾指针
  • 队头、队尾指针都可能要修改
  • 队头、队尾指针都要修改

 

当只有一个元素,出队列时,要将队头和队尾,指向-1.所以说队头和队尾都需要修改

 

 

链表刷了几百道吧,好题还有很多,以后接着更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式(2 / 23):观察者模式

定义 观察者(Observer)模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 OO设计原则:为了交互对象之间的松耦合设计而努力。 案例:气…

二叉树概述

各种实现和应用以后放链接 一、二叉树的基本概念 二叉树:二叉树是每个节点最多有两个子树的树结构。 根节点:一棵树最上面的节点称为根节点。 父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它…

Java设计模式(1 / 23):策略模式

定义 策略(Strategy)模式定义了算法族,分别封装起来,让它们之间可以互相替换 ,此模式让算法的变化独立于使用算法的客户。 案例:模拟鸭子应用 一开始 新需求:模拟程序需要会飞的鸭子 在父类新…

Java设计模式(3 / 23):装饰者模式

文章目录定义案例1:三点几啦首次尝试再次尝试设计原则:类应该对扩展开放,对修改关闭尝用装饰者模式装饰者模式特征本例的类图放码过来饮料类HouseBlendDarkRoastEspressoDecaf调料装饰类MilkMochaSoyWhip运行测试类案例2:编写自己…

c语言知识体系

原文:https://blog.csdn.net/lf_2016/article/details/80126296#comments

《游戏编程入门 4th》笔记(1 / 14):Windows初步

文章目录Windows编程概述获取Windows理解Windows消息机制多任务多线程事件处理DirectX快速概览Direct3D是什么Window程序基础创建第一个Win32项目理解WinMainWinMain函数调用完整的WinMainGetMessage函数调用寻求帮助Windows编程概述 DirectX,流行的游戏编程库。它…

《游戏编程入门 4th》笔记(2 / 14):监听Windows消息

文章目录编写一个Windows程序理解InitInstanceInitInstance函数调用InitInstance的结构理解MyRegisterClassMyRegisterClass函数调用MyRegisterClass的作用揭露WinProc的秘密WinProc函数调用WinProc的大秘密什么是游戏循环The Old WinMain对持续性的需要实时终止器WinMain和循环…

数据结构课上笔记6

本节课介绍了单链表的操作实现细节,介绍了静态链表。 链表带头的作用:对链表进行操作时,可以对空表、非空表的情况以及 对首元结点进行统一处理,编程更方便。 下面给出带头的单链表实现思路: 按下标查找: …

17校招真题题集(3)11-15

注:本系列题目全是按照通过率降序来排列的,基本保证题目难度递增。 11、 题目名称:买苹果 来源:网易 题目描述 小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不…

QT5生成.exe文件时,出现缺少QT5core.dll文件解决方法

在 http://qt-project.org/downloads 下载Qt SDK安装需要Qt版本。在QtCreator下,程序可以正常运行,但是当关闭QtCreator后,在DeBug目录下再运行相应的*.exe程序时,会提示缺少Qt5Core.dll错误。解决方法:添加电脑环境变…

《基于Java实现的遗传算法》笔记(7 / 7):个人总结

文章目录为何采用遗传算法哪些问题适合用遗传算法解决遗传算法基本术语一般遗传算法的过程基本遗传算法的伪代码为何采用遗传算法 遗传算法是机器学习的子集。在实践中,遗传算法通常不是用来解决单一的、特定问题的最好算法。对任何一个问题,几乎总有更…

Java设计模式(4 / 23):单例模式

文章目录单例模式的应用场景饿汉式单例模式懒汉式单例模式改进:synchronized改进:双重检查锁改进:静态内部类破坏单例用反射破坏单例用序列化破坏单例解密注册式单例模式枚举式单例模式解密容器式单例线程单例实现ThreadLocal单例模式小结参考…

约瑟夫环-(数组、循环链表、数学)

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报…

链表相交问题

本来想自己写,写了一半发现一篇文章,解释写得简单易懂,我就直接拿过来了。 这个问题值得反复地写,锻炼链表coding能力的好题。 //如果两个链表都不带环 int NotCycleCheckCross(pLinkNode head1,pLinkNode head2) {pLinkNode lis…

双栈

利用栈底位置相对不变的特性,可以让两个顺序栈共享一个空间。 具体实现方法大概有两种: 一种是奇偶栈,就是所有下标为奇数的是一个栈,偶数是另一个栈。但是这样一个栈的最大存储就确定了,并没有起到互补空缺的作用&a…

单调队列优化的背包问题

对于背包问题,经典的背包九讲已经讲的很明白了,本来就不打算写这方面问题了。 但是吧。 我发现,那个最出名的九讲竟然没写队列优化的背包。。。。 那我必须写一下咯嘿嘿,这么好的思想。 我们回顾一下背包问题吧。 01背包问题 …

用Python去除扫描型PDF中的水印

内容概述 含水印扫描型PDF文件,其中某页如下图所示,用Python去除其页顶及页底的水印。 处理思路:PDF中的每一页的水印的相对位置基本相同,将PDF每一页输出成图片,然后进行图片编辑,用白色填充方形覆盖水印…

二阶有源滤波器

滤波器是一种使用信号通过而同时抑制无用频率信号的电子装置, 在信息处理、数据传送和抑制干扰等自动控制、通信及其它电子系统中应用广泛。滤波一般可分为有源滤波和无源滤波, 有源滤波可以使幅频特性比较陡峭, 而无源滤波设计简单易行, 但幅频特性不如滤波器, 而且体积较大。…

用JS写了一个30分钟倒计时器

效果图 额外功能 左键单击计时器数字区,不显示或显示秒钟区。左键双击计时器数字区,暂停或启动计时器。计时完毕,只能刷新页面启动计时器。输入框可输入备注信息,输入框失去焦点或计时完毕后,时间戳附带备注信息会存入…

为什么高手离不了Linux系统?我想这就是理由!

通过本文来记录下我在Linux系统的学习经历,聊聊我为什么离不了Linux系统,同时也为那些想要尝试Linux而又有所顾忌的用户答疑解惑,下面将为你介绍我所喜欢的Linux系统,这里有一些你应该知道并为之自豪的事实。 这里你应该首先抛开W…