我的java学习-数据结构的学习重点类变量设计

学数据结构的时候,有点蒙,不知道这个东西学了是干什么用的,翻书看了半天没有找到重点。有天看到数组问题了,说自己也动手搞个数组来看看,结果不知道从哪里下手,猛然间发现,自己的数据结构是白学习了,没有抓住学习的重点内容,简单的数组都不知道怎么设计类变量来实现。
果然还是一动手就知道到底有没有,我自己发现是什么都没有。
现在有点开窍了,数据结构的学习重点,个人感觉,就是类变量和初始方法的实现,这个就是数据结构最重要的体现,也是个人设计程序时的难点,把类变量和初始方法搞清楚了,数据结构就没有白学习。
比如像顺序表里面的内容,顺序表里面是这么定义类变量的

private int maxsize;  //顺序表的最大容量
private E[] data;     //用数组的方式来保存顺序表
private int size;    //顺序表的长度

如果更换成二维数组,这个类变量应该是怎么考虑?考虑可以用下面的方式

private E[][] data;
private int sizem, sizen;

设计sizem,sizen作为二维数组的两个变量,可以传递数组大小。
同样的还有初始化方法,顺序表的初始化方法可以考虑用

public SeqList(Class<E> type, int maxsize){
	this.maxsize = maxsize;
	data = (E[])Array.newInstance(type, maxsize);
	size = 0;
}

这里面用了泛型的方法来设计,稍微复杂一点,如果改成int型数组就比较简单,也好理解但是以后用到泛型就还是要重新掌握

private int[] data;
data = new int[maxsize];

同样的换成二维数组,初始化方法可以考虑用

public Matrix(int sizem, int sizen){
       this.sizem = sizem;
       this.sizen = sizen;
       data = new int[sizem][sizen];
    }

内容到单链表,更复杂一点。单链表的java实现,设计的类变量和初始化方法,在单链表的类里面,专门设计了一个内部类private static类来实现单链表的数据结构。这个内部类定义了一个数据变量item,一个索引变量next,索引变量next被设计成Node类型的变量。
这里面索引变量的设计就很重要,也比较难理解。索引的作用,一般是用来指向单个节点的位置,指向在C语言里面有比较巧妙的指针来实现,而在java语言里面,需要通过类变量的巧妙设计来实现。这里用了Node类型变量,里面保存有item数据变量同时,保存有一个Node类型next变量。这里的next就可以通过赋值的方式来改变指向,达到索引的目的。虽然感觉这样的设计比较C语言里面的指针会浪费一点空间,但是更加安全不会出现指针指向错误出现严重问题。

private Node<E> start;
int size;
private static class Node<E>{
	E item;
	Node<E> next;
	Node(E item, Node<E> next){
		this.item = item;
		this.next = next;	
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43399072/article/details/83037310