java数据结构之链表、栈、队列、树的实现方法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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() {

相关文档
最新文档