java数据结构之链表、栈、队列、树的实现方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java数据结构之链表、栈、队列、树的实现
方法
一、链表的实现方法
链表是一种常见的线性数据结构,它由节点(Node)组成,每个节点包含数据及指向下一个节点的引用。
链表可以分为单向链表和双向链表两种形式。
1.单向链表(Single Linked List):
单向链表中,每个节点只包含一个指向下一个节点的引用,最后一个节点的引用为空。
节点定义如下:
```java
public class Node {
public int data; //存储数据
public Node next; //下个节点的引用
}
```
单向链表的实现方法如下:
```java
public class LinkedList {
private Node head; //头节点
private int size; //链表大小
//链表构造函数
public LinkedList() {
head = null;
size = 0;
}
//在链表头部插入元素
public void insertAtHead(int data) {
Node newNode = new Node(); newNode.data = data;
newNode.next = head;
head = newNode;
size++;
}
//在链表尾部插入元素
public void insertAtTail(int data) { Node newNode = new Node(); newNode.data = data;
newNode.next = null;
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) { current = current.next;
}
current.next = newNode;
}
size++;
}
//删除链表中指定值的节点
public void deleteNode(int data) { if (head == null) {
return;
}
if (head.data == data) {
head = head.next;
size--;
return;
}
Node current = head;
Node previous = null;
while (current != null && current.data != data) { previous = current;
current = current.next;
}
if (current == null) {
return;
}
previous.next = current.next;
size--;
}
//获取链表的大小
public int getSize() {
return size;
}
//判断链表是否为空
public boolean isEmpty() {
return head == null;
}
}
```
2.双向链表(Double Linked List):
双向链表在单向链表的基础上新增了一个指向前一个节点的引用,可以实现双向遍历。
节点定义如下:
```java
public class Node {
public int data; //存储数据
public Node prev; //上个节点的引用
public Node next; //下个节点的引用
}
```
双向链表的实现方法与单向链表类似,只是在节点的定义和操作
中需要考虑前一个节点的引用。
二、栈的实现方法
栈(Stack)是一种特殊的线性表,采用“先进后出”(Last In First Out,LIFO)的原则,即最后入栈的元素最先出栈。栈可以通过数组或链表实现。
1.数组栈的实现方法:
```java
public class ArrayStack {
private int[] array; //存储栈元素的数组
private int top; //栈顶指针
//栈的构造函数
public ArrayStack(int size) {
array = new int[size];
top = -1;
}
//入栈操作
public void push(int data) {
if (top == array.length - 1) {
throw new RuntimeException("Stack is full."); }
array[++top] = data;
}
//出栈操作
public int pop() {
if (top == -1) {
throw new RuntimeException("Stack is empty."); }
return array[top--];
}
//判断栈是否为空
public boolean isEmpty() {