这四道题来自一个公司的笔试题,我一道也打不上于是拍照后走人。回来之后仔细百度了一下,研究完答案之后,我真是不知道为什么出这种题,这题考的是java数据结构,比如二叉树。但姑且放在这里也算供大家学习了。
答案都是总结百度结果自己写的答案,欢迎喷。
1:给定一个正整数序列比如int[] data={6,42,34,12,35,75,323},请构造一个树的数据结构,将这些整数依次插入到树中,插入时大的数放右边,小的数放左边最后请将排序后的整数序列输出,比如输出3 5 6 12 34 42 75 323
注:二叉排序树(Binary Sort Tree)又称二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树,
(1)若左子树不为空,则左子树上所有节点的值均小于它的根节点的值。
(2)若右子树不为空,则右子树上所有节点的值均大于它的根节点的值。
(3)左右子树也分别为二叉排序树。
2:从一批数据(比如10万个随机数)中取出最大的100个数据。
3:已知带头节点的动态链表中的节点是按照整数增值排列的,请自定义写一个数据结构实现链表,不要使用java.util.List等实现,写个函数将值为x的节点插入到该链表中,使链表仍有序,同时返回该数值x在该链表中是否存在,已经存在返回true,否则返回false
4:实现一个栈 其中的元素的值是int数据,满足min() pop() push()方法的时间复杂度都为0(1).(min()返回栈中最小元素)栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈低固定,而栈顶浮动;栈中元素个数为零时称为空栈,插入一般称为进栈(push),删除则称为退栈(pop),栈也称为后进先出表。
时间复杂度,简单来说就是关键代码重复执行的次数
1:首先第一题,我想排序就是冒泡排序呗,结果不是,实际上人家让实现的是二叉树,然后递归升序输出二叉树。
其中对初级程序员比较难的应该是递归吧,
public class BinarySortTree { public static Tree tree; public static void main(String[] args) { int[] data = { 6, 42, 34, 12, 3 , 5, 75, 323 }; tree = new Tree(); tree.value = data[0]; for (int i = 1; i < data.length; i++) { tree.makeTree(data[i]); } perPrintTree(tree); } // 升序输出 public static void perPrintTree(Tree tree) { if (tree.left != null) perPrintTree(tree.left); System.out.print(tree.value + " "); if (tree.right != null) perPrintTree(tree.right); } } class Tree { public int value; public Tree left; public Tree right; // 构造 public void makeTree(int value) { if (value < this.value) { if (this.left == null) { this.left = new Tree(); this.left.value = value; } else { this.left.makeTree(value); } } else if (value > this.value) { if (this.right == null) { this.right = new Tree(); this.right.value = value; } else { this.right.makeTree(value); } } } }
2:网上找了一段代码自己测一下,效率不低。我找不到其他的例子所以姑且用这个。
仔细看了一下,怎么觉得逻辑没有什么,就是一个LinkedList按大小往里放,超过100个就removeLast,因为这里频繁的插入操作,所以LinkedList效率比较高嘛,目测细节尚有提升空间
import java.util.LinkedList; import java.util.Random; public class MaxFinderTest { public static void main(String[] args) { long time01 = System.currentTimeMillis(); MaxFinder maxFinder = new MaxFinder(100); Random random = new Random(); System.out.println("ADDING..."); for (int i = 0; i < 100000; i++) { maxFinder.addNum(random.nextInt()); } int[] array = maxFinder.getArray(); for (int i = 0; i < array.length; i++) { System.out.println((i + 1) + " : " + array[i]); } long time02 = System.currentTimeMillis(); System.out.println("这段代码运行了:" + (time02 - time01) + "毫秒!"); } } class MaxFinder { private int count; public LinkedList<Integer> list; public MaxFinder(int count) { this.count = count; this.list = new LinkedList<Integer>(); } public void addNum(int num) { int addIndex = findAddIndex(num); list.add(addIndex, num); if (list.size() > count) list.removeLast(); } private int findAddIndex(int num) { for (int i = 0; i < list.size(); i++) { if (num >= list.get(i)) return i; } return list.size(); } public int[] getArray() { int[] array = new int[list.size()]; for (int i = 0; i < array.length; i++) { array[i] = list.get(i); } return array; } }
3:特么专科非计算机专业伤不起呀,不懂数据结构啊!!什么叫动态链表什么叫头结点啊。。。。
头结点:在单链表的第一个结点之前附设一个结点,称之为头结点。头结点的数据域可以不存储任何信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。头结点的作用是使所有链表(包括空表)的头指针非空,并使对单链表的插入、删除操作不需要区分是否为空表或是否在第一个位置进行,从而与其他位置的插入、删除操作一致。
动态链表:这种链表在初始时必须分配足够的空间, 也就是空间大小是静态的, 在进行插入和删除时则不需要移动元素, 修改指针域即可,所以仍然具有链表的主要优点,链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。
貌似都看懂了,头结点就是链表第一位放一个结点,不放数据,动态链表类似数据库连接池,先放一些链接在那。
这个代码没百度到,是自己写的,估计和标准答案有一定差距,欢迎喷。。。。
public class LinkTest { public static void main(String args[]) { Link l = new Link(); l.addnode("1"); l.addnode("2"); l.addnode("3"); l.addnode("4"); l.addnode("5"); l.printnode(); l.deletenode("2"); l.deletenode("3"); System.out.println(""); l.printnode(); System.out.println(""); System.out.println("查询节点:" + l.contains("4")); } } class Link { class Node { private String data; private Node next; // 设置节点信息 public Node(String data) { this.data = data; } // 增加一个add操作 public void add(Node newnode) { if (this.next == null) this.next = newnode; else this.next.add(newnode); } // 打印节点信息 public void print() { System.out.print(this.data + " "); if (this.next != null) this.next.print(); } public boolean search(String data) { if (data.equals(this.data)) return true; else if (this.next != null) return this.next.search(data); else return false; } public void delete(Node previous, String data) { if (data.equals(this.data)) previous.next = this.next; else if (this.next != null) this.next.delete(this, data); } } private Node root; // 增加根节点信息 public void addnode(String data) { Node newnode = new Node(data); if (this.root == null) this.root = newnode; else this.root.add(newnode); } public void printnode() { if (this.root != null) this.root.print(); } public boolean contains(String name) { return this.root.search(name); } public void deletenode(String data) { if (this.contains(data)) if (this.root.data.equals(data)) this.root = this.root.next; else this.root.next.delete(root, data); } }
4:实在懒得做了,将来在评论中更新吧。
相关推荐
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案.docx c++笔试面试宝典.docx C++笔试面试题带答案.docx c++笔试题汇总.pdf ...
数据结构常见笔试题汇总 本资源摘要信息中,我们将对数据结构常见笔试题进行汇总,涵盖算法的基本概念、数据结构的定义、线性结构和非线性结构、线性表的顺序存储结构、顺序表的插入和删除运算、栈及其基本运算等...
数据结构算法设计笔试面试题,主要包括链表,二叉树,排序,查找等算法
Java面试笔记 225道Java面试题JAVA面试基础知识点总结Java数据结构题 JAVA笔试面试WORD资料汇总(19个): 2014年最新Java笔试题及答案.docx 225道Java面试题 学会了Java面试随你问.docx Ant和Maven的作用是什么?两者...
互联网行业面试笔试真题资料BAT谷歌微软等笔试面试真题复习资料合集200MB: 2015创新工场校招研发笔试题.pdf ...算法 数据结构 网易搜狐新浪笔试面试 腾讯笔试面试 计算机基础 计算机网络 软件测试 阿里巴巴笔试面试
这份“常见数据结构与算法笔试面试题大集合”涵盖了这一领域的核心概念,旨在帮助求职者更好地准备相关考试和面试。 1. **数组**:数组是最基础的数据结构,它提供了一种在内存中存储和访问固定数量元素的方式。...
2014年最新Java笔试题及答案.docx 225道Java面试题 学会了Java面试随你问.docx Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?.docx Java初级程序员面试必备的基础知识总结.docx Java基础、Java集合、多...
本压缩包“数据结构笔试题.rar”显然包含了一些与数据结构相关的笔试题目,旨在测试和提升对这门学科的理解。数据结构的选择和设计直接影响到算法的效率,进而影响整个软件系统的性能。 在数据结构中,我们通常会...
BAT谷歌微软等各IT公司互联网C++ JAVA 计算机笔试面试真题复习资料108个文档合集 C++基础面试题.docx ...算法 数据结构 网易搜狐新浪笔试面试 腾讯笔试面试 计算机基础 计算机网络 软件测试 阿里巴巴笔试面试
在大公司的校园招聘中,数据结构常常是笔试和面试的重点,因为它是算法设计和分析的基础。针对2010届毕业生的这个合集,涵盖了数据结构的多个重要主题,可以帮助求职者准备相关考试。 1. **线性表**(第2章):...
本资料集重点是数据结构相关的笔试面试题,旨在帮助求职者准备这些关键环节。 1. **数组**:数组是最基本的数据结构之一,它是一个有序的元素集合,每个元素通过索引访问。面试中可能会问到数组的特性,如连续存储...
程序员面试宝典,C.C++,数据结构笔试面试题
"Java 数据结构笔试题" 本资源提供了一些常见的 Java 数据结构笔试题,包括冒泡排序、选择排序、二分查找等。这些题目都是作者在 2009 年参加 Java 工程师面试时遇到的,代码已经通过测试,可以放心使用。下面是对...
对于面试题和笔试题,你应该熟悉以下几种常见的问题类型: 1. 代码实现:例如,实现一个简单的排序算法或者设计一个特定功能的函数。 2. 逻辑分析:比如给出一段代码,让你分析其运行结果或者找出可能存在的问题。 3...
接下来,我们关注《阿里谷歌数据结构笔试题精讲PPT》。这份资料很可能包含了一些实际的面试题目和解题思路,可能涵盖以下几点: 1. **问题分析**:讲解如何分析题目需求,确定合适的数据结构和算法。 2. **解题策略...
算法 数据结构 网易搜狐新浪笔试面试 腾讯笔试面试 计算机基础 计算机网络 软件测试 阿里巴巴笔试面试 C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案.docx ...
网上搜集的一个c++数据结构与算法的文档,包含各类数据结构、算法、大量数据处理等方法,然后我还增加了那些是笔试面试中重点需要看的。希望能帮助到找工作的同学。另外可以从我的资源中下载c++基础知识的文档。
了解这些公司的面试笔试题,有助于应聘者更好地准备,提升自己的竞争力。 Google的面试通常以其难度著称,涉及算法、数据结构、计算机网络、操作系统、编程语言等多个方面。例如,可能会被问到如何优化搜索算法,...