实习的最后一天,是在不想这样干坐着,上网看着那些无聊的信息。 送上一句:此刻打盹,你将做梦,此刻学习,你将圆梦。 数据结构与算法是我一直想去精通,但是一直没搞出个所以然来,好吧,今天就从单链表下手吧。结点包含两个域:data域---存放结点值的数据域;next域---存放结点的直接后继的地址(位置)的指针域(链域)。链表通过每个结点的链域将线性表的N个结点按其逻辑顺序链接在一起;每个结点只有一个链域的链表称为单链表(Single Linked List)。
第一:结点本身就是一个类,现在先声明结点类。
package demo.zhuchuan.first;
public class Node {/*节点类*/
private int data; /*节点数据*/
private Node node_next; /*节点的下一个节点*/
public Node(int val_data){ /*节点构造函数*/
this.data = val_data;
node_next = null;
}
public void setNode_next(Node val_node){/*设置节点的下一个节点*/
node_next = val_node;
}
public Node getNode_next(){/*获取节点的下一个节点*/
return node_next;
}
public void printNode(){ /*输出节点数据*/
System.out.println(this.data+" ");
}
}
第二:声明一个访问链表的类。
package demo.zhuchuan.first;
public class SingleLinkedList {/*单链表类*/
private Node pointer_head,pointer_tail;/*链表的头指针和尾指针,都是伪指针,实属节点*/
public SingleLinkedList(){/*单链表构造函数*/
pointer_head = pointer_tail =null;/*指针初始化都为空*/
}
public boolean isEmpty(){/*判断链表是否为空函数*/
return pointer_head == null;
}
public void addNode(int val_data){/*链表增加节点函数*/
if(this.isEmpty()){/*判断链表是否为空*/
pointer_head = pointer_tail = new Node(val_data);/*链表为空,头指针和尾指针都指向新增节点*/
}else{
pointer_tail.setNode_next(new Node(val_data));/*链表不为空,新增节点连接到表尾,尾指针指向新增节点*/
pointer_tail = pointer_tail.getNode_next();
}
}
public void printListNode(){/*输出链表函数*/
for(Node temp = pointer_head;temp != null;temp = temp.getNode_next()){
temp.printNode();
}
}
public static void main(String[] args) {
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.addNode(1);
singleLinkedList.addNode(2);
singleLinkedList.addNode(3);
singleLinkedList.printListNode();
}
}
完成了第一步,初始化了,接下来要做的就是插入、删除了,接着把相关的时间什么复杂度搞一下。