现在我大二了,学校里面开的数据结构我们已经学习了半个多学期了。在我看来,数据结构这东西其实是非常重要的,他会
告诉你什么时候用什么
算法,用那种思想考虑问题,会是你的代码有大幅度的提升。并且还有一个更重要的认识便是,对于数据结构而言,无论是那种语言,都是通用的。
那就让我先概括的介绍一下基本数据结构吧。
数据结构包含线性表、栈、
队列、
hashu.html" target="_blank">二叉树、树这几种基本的结构。
一:线性表、栈、队列
在我学的这本数据结构书上,将这三种基本结构放在了一章上面了,其实并不是因为这三种不重要或者是简单。而是这三者中存在着某种联系。即都是利用数组来实现的,只不过
他们的添加数据和删除数据的实现方式不同。
线性表在插入数据时,需要把插入位置后面的数据都向后面挪一位,才能给要插入的位置赋值,同理如果要删除一个数据,则需要删除这个数据后的所有数据都向前面挪动一位。对于c++而言,线性表还有一种链表,是线性表一种实现方式。他的插入和
caozuo.html" target="_blank">删除操作就没有刚刚想的那么麻烦了,这种实现方式只需要将其指针改变就好了。在这里就不赘述了。
栈,称他为“后进先出”的线性表。即如果要想栈里插入数据,只能把数据插入栈顶,如果要删除数据,也只能从栈顶开始删除。
队列,则是与栈相对的,他的数据存储方式则是“先进先出”。
下面给出在java中如何在数组中插入一个数据:
class="java">
//插入
public void insert(int index,E e){
//判断所插入的位置及元素是否符合规则
if(index>=count){
System.out.println("输入错误");
}
if(count==index){
Object[] newarray=new Object[array.length+increase];
for(int i=0;i<newarray.length;i++){
newarray[i]=array[i];
}
newarray[index]=e;
array=newarray;
}
else{
for(int i=count;i>index;i--){
array[i]=array[i-1];
}
array[index]=e;
}
count+=1;
}
以及如何删除
//删除
public void delete(int index){
//判断是否超出
if(index>count){
System.out.println("没有要删除的位置");
}
if(index==count){
count-=1;
}
else{
Object[] newarray=new Object[count];
for(int i=index;i<count;i++){
newarray[i]=array[i+1];
}
array=newarray;
}
}
二:二叉树
一棵二叉树是由有限集合组成的,这个集合或为空。
下面是一个简单的造树的过程,现让我们简单的了解一下二叉树的基本结构吧!
public class Tree {
public Node creatTree(){
Node root=new Node();
root.data="根节点";
Node left1=new Node();
left1.data="左一节点";
Node right1=new Node();
right1.data="右一节点";
root.leftchild=left1;
root.rightchild=right1;
left1.parent=root;
right1.parent=root;
Node left1left=new Node();
left1left.data="左左一节点";
Node left1right=new Node();
left1right.data="左右一节点";
left1.leftchild=left1left;
left1.rightchild=left1right;
left1left.parent=left1;
left1right.parent=left1;
Node right1left=new Node();
right1left.data="右左一节点";
Node right1right=new Node();
right1right.data="右右一节点";
right1.leftchild=right1left;
right1.rightchild=right1right;
right1left.parent=right1;
right1right.parent=right1;
return root;
}
了解了其基本的结构后,还要了解二叉树的遍历。一般的,我们只会提三种遍历:前序遍历、中序遍历、后序遍历。
所谓前序遍历,即遍历的顺序遵从先根节点,再左节点,最后右节点。中序遍历则遵从先左节点,再根节点,最后右节点。后序遍历则遵从先左节点,再右节点,最后根节点。
下面是中序遍历的代码:
//中序遍历
public void middle()
{
middleEx(root.leftchild);
System.out.print(root.nValue + " ");
middleEx(root.rightchild);
}
private void middleEx(JTreeNode node)
{
if(node == null)
return;
middleEx(node.leftchild);
System.out.print(node.nValue +" ");
middleEx(node.rightchild);
}
其实数据结构并不是只包含了这些结构,还有一些比较经典的排序及检索的算法。像什么插入排序、
冒泡排序、选择排序==。
这些排序算法到目前还没有时间写,等以后有时间在为大家进行详解。