大二学过数据结构的知识,只不过那时候用的是c语言,很多数据结构需要自己去实现,仍然记得拿指针写双向链表和二叉树的那种痛苦,那个时候,因为没有实际应用,所以总在怀疑,学数据结构是为了什么?
然后大三学习了Java,用Java也写过一些代码了,似乎数据结构课上讲的那些东西仍然没有在实际中用到,那么,当初学的数据结构,到底用在哪?
后来在看Java的一些面试题,讲到很多面试会问到ArrayList与LinkedList的区别,然后自己百度了一下,恍然大悟,原来数据结构在Java里面天天在用,只不过用的是别人封装好的类。
那么,我也一定可以写出这些数据结构,简单的那种。。。。。。。
---------------------------------------------------------------------------------------------------------------------------
①ArrayList:
package test; import java.util.ArrayList; public class ArrayListTest<E> { //记录数组长度 private static int max=10; //保存数据 private static Object[] values=new Object[max]; //保存当前数组长度 private static int len=0; public void add(E value) { if(len<max) { values[len]=value; len++; }else { max=max+10; values=new Object[max]; } } public boolean remove(E value) { Object[] values2=new Object[len-1]; int beRemovedNum=-1; for(int i=0;i<len;i++) { if(values[i]==value||values[i].equals(value)) { beRemovedNum=i; break; } } if(beRemovedNum!=-1&&beRemovedNum!=(len-1)) { for(int i=0;i<beRemovedNum;i++) { values2[i]=values[i]; } for(int i1=beRemovedNum;i1<len-1;i1++) { values2[i1]=values[i1+1]; } len--; values=values2; return true; }else if(beRemovedNum!=-1&&beRemovedNum==(len-1)){ for(int i=0;i<beRemovedNum;i++) { values2[i]=values[i]; } len--; if(len==0) { values=new Object[max]; return true; } values=values2; return true; }else { System.out.println("没有这个数据,删除失败!"); return false; } } @Override public String toString() { if(len>0) { String arr="["; for(int i=0;i<len-1;i++) { arr=arr+values[i]+","; } arr=arr+values[len-1]+"]"; return arr; } return "[null]"; } //测试 public static void main(String[] args) { ArrayListTest<Integer> alt=new ArrayListTest<Integer>(); alt.add(1); System.out.println(alt); alt.remove(1); System.out.println(alt); alt.add(1); alt.add(1); alt.add(1); alt.add(4); alt.add(4); alt.add(5); System.out.println(alt); alt.remove(5); System.out.println(alt); alt.remove(100); System.out.println(alt); } }
②LinkedList:
1 package LinkedListTest; 2 3 public class LinkedListTest<E> { 4 private Node<Object> tail=new Node<Object>(); 5 private Node<Object> head=new Node<Object>(); 6 7 public LinkedListTest() { 8 super(); 9 head.setData(null); 10 head.setNext(tail); 11 tail.setData(null); 12 tail.setNext(null); 13 } 14 15 @Override 16 public String toString() { 17 Node<Object> node=new Node<Object>(); 18 node=head.getNext(); 19 String str="["; 20 while(node.getNext().getData()!=null) { 21 str=str+node.getData()+","; 22 System.out.println(node.getData()+"-"+node.getNext()); 23 node=node.getNext(); 24 } 25 str=str+node.getData()+"]"; 26 return str; 27 } 28 29 public void append(E value) { 30 Node<Object> node=new Node<Object>(); 31 tail.setData(value); 32 tail.setNext(node); 33 tail=node; 34 } 35 36 public static void main(String[] args) { 37 LinkedListTest<Integer> llt=new LinkedListTest<Integer>(); 38 llt.append(1); 39 llt.append(2); 40 llt.append(3); 41 System.out.println(llt); 42 } 43 }