概述
第一题:设有n个元素的集合,采用带头结点有序链表来实现,设集合的元素占8个字节,链接指针占2个字节,该集合的存储密度为(C)
A、0.8
B、n/(n+1)
C、0.8n/(n+1)
D、0.8(n+1)/n
答案解析:题目要求计算集合的存储密度首先需要知道什么是存储密度:存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量)由题目可知:元素占8n字节,指针占2n字节,头结点不存元素,一共10字节,所以有8n/(8n+2n+10)=0.8n/(n+1)
第二题:在一个长度为 n ( n>1 )的单链表上,设有头和尾两个指针,执行 操作与链表的长度有关。(B)
A、删除单链表中的第一个元素
B、删除单链表中的最后一个元素
C、在单链表第一个元素前插入一个新元素
D、在单链表最后一个元素后插入一个新元素
答案解析:因为在单链表中删除元素时需要从头进行遍历,直至找到修后一个元素的前一个元素,将此元素的指针域清空,则最后一个元素被删除,这时删除最后一个元素就与长度有关系
第三题:若串 =’software’ ,其子串数目为:(B)
A、8
B、37
C、36
D、9
答案解析:自己在做题时是一个一个数的,还是做错了,选择了36。少的那个是空串,因为空串是每个字符串的字串,如果使用公式的话就是:s=(1+n)*n/2+1,计算出来是算有空串的。
第四题:下面程序的运行结果:(B)
public static void main(String args[]) {
Thread t=new Thread(){
public void
run(){
dianping();
}
};
t.run();
System.out.print("dazhong");
}
static void dianping(){
System.out.print("dianping");
}
A、dazhongdianping
B、dianpingdazhong
C、a和b都有可能
D、dianping循环输出,dazhong夹杂在中间
答案解析:按照执行顺序,先调用run()方法,打印dinanping然后执行输出语句dazhong所以答案是dianpingdazhong
第五题:给定如下C程序:(B)
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;
}
A、node_t* m=head; head=n; head->next=m; n=n->next;
B、node_t* m=n; n=n->next; m->next=head; head=m;
C、node_t* m=n->next; n->next=head; n=m; head=n;
D、head=n->next; head->next=n; n=n->next;
答案解析:m->next=head : NULL,m->next=head : A-> NULL,m->next=head : B-> A-> NULL,m->next=head : C-> B-> A-> NULL
第六题:在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入指针s指向的节点,其修改指针的操作是(D)
A、p->next->prev=s; p->next=s; s->prev=p; s->next=p->next;
B、s->next =p->next;s->prev=p; p->next=s;p->next->prev=s;
C、s->prev=p; s->next=p->next; p->next=s; p->next->prev=s;
D、s->prev=p; s->next=p->next; p->next->prev=s; p->next=s;
答案解析:在中间位置插入元素的执行顺序是找到插入的位置,将元素的下一跳给要插入元素的下一跳,然后将插入位置的吓一跳指向插入元素。
第七题:指针 P 指向单链表 L 中的非尾部结点,则删除其后继结点的语句是?(D)
A、p = p.next
B、p =null
C、p.next=null
D、p.next = p.next.next
答案解析:自己读题失误以为是将p节点后面的元素全部删除,仔细读题后发现是删除后继节点,只需要将p的吓一跳的吓一跳指向p的吓一跳就可以,这样p的后继元素就不会被指向,相当于被从L中移除。
第八题:对于函数y = ax^2 + bx + c,(a > 0),需要找出y的小值,精确到小数点后6位。下列选项中最有效的方法是(D)。
A、枚举
B、二分查找
C、三分查找
D、推公式
答案解析:推公式计算比较方便
第九题:Java多线程有几种实现方法?(AB)
A、继承Thread类
B、实现Runnable接口
C、实现Thread接口
D、以上都不正确
答案解析:多线程一共有三种实现方式
1:继承Thread类,并重写run()方法
2:实现Runnable接口,实现run()方法
3:实现Callable接口,线程结束后可以有返回值,但是该方式是依赖于线程池的。
第十题:关于equals和hashCode描述正确的是 (ABC)
A、两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
B、两个obj,如果hashCode()相等,equals()不一定相等
C、两个不同的obj, hashCode()可能相等
D、其他都不对
答案解析:equals进行对比的是对象的地址和内容,而hashcode()是通过哈希表将数据按照特有的方式进行转化存放,其特点就是没有重复的,只要内容是一样的内容转化为has是一样的
第十一题:下面的对象创建方法中哪些会调用构造方法 (AC)?
A、new语句创建对象
B、调用Java.io.ObjectInputStream的readObject方法
C、java反射机制使用java.lang.Class或java.lang.reflect.Constructor的newInstance()方法
D、调用对象的clone()方法
答案解析:A、new对象是肯定会使用构造器创建对象,
B、readObject()是序列化,虽然方法返回的是一个对象但是没有使用 构造器,而是返回的是一个Object对像;
C、反射机制在调用newInstance()时是会调用构造方法
D、clone()克隆方法、不管是深克隆还是浅克隆,都只是复制,并没有调用构造方法。
第十二题:下列有关java构造函数叙述正确的是(CD)
A、构造器的返回值为void类型
B、如果一个源文件中有多个类,那么构造器必须与公共类同名
C、构造器可以有0个,1个或一个以上的参数
D、每个类可以有一个以上的构造器
答案解析:构造器没有返回值,每个类可以有一个或者多个构造器,同名不同参、方法体不同的那种构造方法,命名需要和类名相同。
第十三题:以下哪些jvm的垃圾回收方式采用的是复制算法回收(AD)
A、新生代串行收集器
B、老年代串行收集器
C、并行收集器
D、新生代并行回收收集器
E、老年代并行回收收集器
F、cms收集器
答案解析:两个最基本的java回收算法:复制算法和标记清理算法,复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法,标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
新生代:初始对象,生命周期短的。永久代:长时间存在的对象(百度)
第十四题:以下哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址( B)
A、String a = "hello"; String b = "hello";
B、Integer a; Integer b = a;
C、int a = 1; Integer b = new Integer(1);
D、int a = 1; Integer b = 1;
答案解析:个人觉得A也是正确的,因为ab的指向都是常量池中的hello,选择题B的b指向的是创建的a对象的地址。
第十五题:关于c语言,下列说法正确的是(CG)
A、结构只能包含一种数据类型
B、可以比较两个联合是否相等
C、结构的标记名是可以没有 的
D、不同结构的成员必须有唯一的名字
E、关键字typedef用来定义新的数据类型
F、结构总是以传引用的方式传递给函数
G、结构是不可以比较的
答案解析:A结构不是只能包含一种数据类型
B选项中,结构体和共用体变量都不能进行比较操作,因为类型不一样,无法比较,除非强制转换或重载比较运算符
D不同结构的成员必须有唯一的名字是错误的
E选项中,typedef不是用来定义新的数据类型,而是创建易于记忆的类型名,给类型取别名
F选项中,结构总是以传值的方式传递给函数
最后
以上就是幽默小丸子为你收集整理的牛客(9.18)-链表专项练习的全部内容,希望文章能够帮你解决牛客(9.18)-链表专项练习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复