线性表
线性表按其存储结构可分为顺序表和链表。
用顺序存储结构储存的线性表称为顺序表
用链式存储结构储存的线性表称为链表。
一、顺序表
将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表。一维数据就是用顺序表的顺序方式存储的线性表。
二、链表
1)、单向链表
package linkedlist;
/**
* @Auther: Xinbai
* @Date:2020/4/28 11:25
*/
public class Node {
String data;//存放节点数据本身
Node next;//存放指向下一个节点的引用
public Node(String data) {
this.data = data;
}
}
package linkedlist;
/**
* @Auther: Xinbai
* @Date:2020/4/28 11:28
*/
public class NodeTest {
public static void main(String[] args) {
Node node1=new Node("node1");
Node node2=new Node("node2");
Node node3=new Node("node3");
node1.next=node2;
node2.next=node3;
System.out.println(node1.next.next.data);
System.out.println("-----------------");
//增加node4
Node node4=new Node("node4");
node1.next=node4;
node4.next=node2;
System.out.println(node1.next.next.next.data);
System.out.println("--------------------");
//删除node4
node1.next=node2;
node4.next=null;
System.out.println(node1.next.next.data);
}
}
2)、双向链表
package linkedlist;
/**
* @Auther: Xinbai
* @Date:2020/4/28 13:21
*/
public class Node2 {
Node2 previous;
String data;
Node2 next;
public Node2( String data){
this.data=data;
}
}
package linkedlist;
/**
* @Auther: Xinbai
* @Date:2020/4/28 13:21
*/
public class Node2Test {
public static void main(String[] args) {
Node2 node1=new Node2("node1");
Node2 node2=new Node2("node2");
Node2 node3=new Node2("node3");
node1.previous=node3;
node3.previous=node2;
node2.previous=node1;
node1.next=node2;
node2.next=node3;
node3.next=node1;
System.out.println(node1.next.next.data);
//增加node4
Node2 node4=new Node2("node4");
node1.next=node4;
node4.next=node2;
node2.previous=node4;
node4.previous=node1;
System.out.println(node1.next.next.next.data);
}
}
输出结果:
node3
node3
三、栈
- 栈(Stack)也是一种特殊的线性表,是一种后进先出【LIFO】的结构。
- 栈是限定仅在表尾进行插入和删除运算的线性表,表尾为栈顶(top),表头为栈底(bottom)。
- 栈的物理储存可以用顺序储存结构,也可以用链式储存结构。
package linkedlist;
import java.util.LinkedList;
/**
* @Auther: Xinbai
* @Date:2020/5/2 20:10
*/
public class MyStack {
private LinkedList list = new LinkedList();
public void push(Object o) {
list.add(o);
}
public Object get() {
return list.removeLast();
}
public boolean isEmpty() {
return list.isEmpty();
}
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push("one");
myStack.push("two");
System.out.println(myStack.get());
System.out.println(myStack.get());
System.out.println(myStack.isEmpty());
}
}
四、队列
- 队列(Queue)是限定所以的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。
- 表中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。
- 队列的操作是按先进先出(FIFO)的原则进行的。
- 队列的物理存储可以用顺序储存结构,也可以用链式储存结构。
package linkedlist;
import java.util.LinkedList;
/**
* @Auther: Xinbai
* @Date:2020/5/2 19:53
*/
public class MyQueue {
private LinkedList list=new LinkedList();
public void put(Object o){
list.addLast(o);
}
public Object get(){
return list.removeFirst();
}
public boolean isEmpty(){
return list.isEmpty();
}
public static void main(String[] args) {
MyQueue myQueue=new MyQueue();
myQueue.put("one");
myQueue.put("two");
myQueue.put("three");
System.out.println(myQueue.get());
System.out.println(myQueue.get());
System.out.println(myQueue.get());
System.out.println(myQueue.isEmpty());
}
}