基础知识:
算法面临的问题类型:
- 排序(冒泡,选择,快速http://blog.youkuaiyun.com/wangkuifeng0118/article/details/7286332)
- 查找
- 字符串处理
- 图问题
- 组合问题
- 几何问题
- 数值问题
排序算法有两个不得不提的概念:
- 稳定:保留等值元素在输入中的相对顺序,也就是相等的元素位置不动,否则为不稳定
- 在位:也就是就地排序,并不需要额外的存储空间。
String和数组的一些装换:
String.toCharArray();
Arrays.sort(char[]);
Arrays.toString(char[]);-------返回数组
数据结构基础结构:
链表:
Class Node{
int val;
Node next;
Node(int x){//构造函数
val = x;
next =null;
}
}
链表的实现【其实就是对进出的实现】有:栈+ 队列
栈(Stack):
Class Stack{
Node top;
//获取栈顶对象
public Nodepeek(){
if(top != null){
return top ;
}else return null;
}
//入栈
public voidpush(Node node){
if(node!=null){
top = node;
node.next = top;
}
//出栈
public Nodepop(){
Node popNode = new Node(top.val);
pop = pop.next;
return popNode ;
}
}
队列(Queue):
class Queue{
Node first,last;
//入队
public voidenqueue(Node node){
if(first==null){
first = node;
last = first;
}else{
last.next = node;//旧的last
last = node;新的last
}
}
//出队
public Node dequeue(){
if(first==null){
return null;
}else{
Node node = new Node(first.val);
first = first.next;
return node;
}
}
}
===========上面是自己写的实现,其实在java中已经有现成的实现了,Stack类和Queue类=======
java.util.Stack
Stack.peek();//获得栈顶元素
Stack.pop();//获取栈顶元素并出栈
Stack.push();//入栈
有了以上的数据结构可以解决狠多问题:比如二叉树的遍历【前序,中序,后序】:具体代码我的资源中有
这里只分析思路
前序直接递归,查左树,再查右树
中序则是自顶向下,后入的先出,所以自然想到用栈的数据结构:stack
后序则是中序的逆过程。
二叉树的数据结构:
Class TreeNode{
int value;
TreeNode left;
TreeNode right;
public TreeNode(int x,TreeNode leftTree,TreeNode rightTree){
this.value = x;
this.left = leftTree;
this.right = rightTree;
}
}