<!--
<div class="ad_single">
<script type="text/javascript">
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
-->
数据结构一方面是专业程序员必须熟练掌握的基础知识,另一方面也是非专业人员比较头痛的内容。从本篇文章开始,楠哥将开始连载数据结构的入门知识。本篇为大家介绍Java实现链表。
因为在Java当中,所有的元素都是对象,而且Java抛弃了指针和地址,而使用了引用的方法,所以使用Java构成链表相对简单。链表的好处在于,你可以事先不知道一个数组的大小,而是动态的加载数据,分配空间,从而确保程序的健壮性和效率。Java已经实现了标准的List、ArrayList等,为了更好的阐述链表的结构,下面我们动手写一下自己的链表类。
Java链表的实现首先需要自定义节点类Node,其中包括数据成员和下一个数据成员的引用。在楠哥的代码中,为了方便,就把数据成员定义成了int类型。链表类的成员属性事实上只需要一个头结点header即可,但是为了增加在成员较多情况下的程序的链表的效率,加入tail节点可以更方便的进行操作。如下是链表的样例代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package ds;
public class Node {
private Node next=null;
private int data=0;
public Node(){}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
package ds;
public class Linklist {
private Node header=null;
private Node tail=null;
public Linklist(){}
public void add(int data)
{
if(header==null)
{
Node newnode = new Node();
newnode.setData(data);
newnode.setNext(null);
header=newnode;
tail = newnode;
}
else
{
Node newnode = new Node();
newnode.setData(data);
newnode.setNext(null);
tail.setNext(newnode);
tail = tail.getNext();
}
}
public int getdata(int index)
{
Node temp=header;
for(int i=0;i<index;i++)
{
temp= temp.getNext();
}
return temp.getData();
}
public void deletehead()
{
header = header.getNext();
}
public void deletetail()
{
Node temp = header;
while(temp.getNext() != tail)
temp=temp.getNext();
tail=temp;
tail.setNext(null);
}
public void delete(int data)
{
Node temp=header;
while(temp.getNext().getData() != data)
temp=temp.getNext();
temp.setNext(temp.getNext().getNext());
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package ds;
public class Tester {
public static void main(String[] args) {
Linklist l = new Linklist();
for(int i=0;i<10;i++)
l.add(i);
for(int i=0;i<10;i++)
System.out.print(l.getdata(i)+" ");
System.out.println();
System.out.println(l.getdata(5));
l.deletehead();
for(int i=0;i<9;i++)
System.out.print(l.getdata(i)+" ");
System.out.println();
l.deletetail();
for(int i=0;i<8;i++)
System.out.print(l.getdata(i)+" ");
System.out.println();
l.delete(3);
for(int i=0;i<7;i++)
System.out.print(l.getdata(i)+" ");
}
}
|
======================================================
栈(stack)和队列(queue)是一种最基本、最常用的数据结构。今天我们用Java来实现栈的最基本的功能。栈(stack)的基本操作包括压栈(push)、出栈(pop)和查看栈顶元素(peek)。还经常用到的操作包括获取栈的大小(元素个数)、判断是否为空等此文当中略去,可以通过检测peek()获取的元素是否为空进行实现。(楠哥计算机学习网www.liubonan.com)
栈的特点是后进先出,因此我们只用一个元素top记录栈顶元素的引用即可。push()操作通过将栈顶的标示移往新填入的元素实现,peek()通过返回top的数据实现,pop()通过将栈顶标示向反方向移动并返回原来的top元素实现。请注意,因为栈当中的标示操作存在向反方向移动,所以Node的定义当中,使用了previous来记录前一个结点的引用,这与linklist稍有不同。本文采用int型作为数据,源码如下。(楠哥计算机学习网www.liubonan.com)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package ds;
public class Node {
private int data;
private Node previous;
public Node(){}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package ds;
public class Stack {
private Node top;
public Stack(int data)
{
top = new Node();
top.setData(data);
top.setPrevious(null);
}
public void push(int data)
{
Node temp = new Node();
temp.setData(data);
temp.setPrevious(top);
top = temp;
}
public boolean empty()
{
if(top == null)
return true;
else
return false;
}
public int pop()
{
int temp = top.getData();
top = top.getPrevious();
return temp;
}
public int peek(){
return top.getData();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package ds;
public class Tester {
static public void main(String[] args)
{
Stack s = new Stack(0);
for(int i=1;i<=10;i++)
s.push(i);
while(!s.empty())
System.out.print(s.pop()+" ");
}
}
|
分享到:
相关推荐
JAVA链表实现类(数据结构学习).chm
### 数据结构:链表在多项式加减中的应用 #### 核心概念解析: **链表**是一种常用的数据结构,其特点是每个元素包含一个指向下一个元素的指针,这种结构非常适合处理动态变化的数据集合,例如在多项式加减运算中...
数据结构——循环链表的操作1 数据结构——循环链表的操作1 数据结构——循环链表的操作1 数据结构——循环链表的操作1
在计算机科学中,链表是一种基本的数据结构,它以节点的形式存储数据,每个节点都包含一个指向下一个节点的指针。指针链表是一种特殊的链表,它使用指针来连接各个节点,实现数据的插入、删除和查找等操作。 在本...
数据结构实验——链表 数据结构实验——链表
数据结构——循环链表的操作1 数据结构——循环链表的操作1 数据结构——循环链表的操作1 数据结构——循环链表的操作1
数据结构课程设计中,主题是实现一个基于数组链表的数据结构来统计文本中特定单词的出现次数和位置。这个程序被称为“文学研究助手”,旨在帮助研究人员统计英文小说中指定单词的频率及其在文中的位置。以下是对这个...
### Java链表数据结构详解 #### 一、链表概述 **链表**是一种常见的线性数据结构,它与数组不同之处在于,链表中的元素不是连续存储的,而是通过节点之间的指针(或引用)链接在一起。每个节点通常包含两部分:...
这是一个双向链表,非常的可以。主要有3个头文件,10多个实现文件,还有一个主函数文件,希望大家多多支持!
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在设计和实现学生管理系统这样的应用程序时。MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序,它...
数据结构是计算机科学中至关重要的基础概念,它研究如何组织和管理数据,以便高效地进行存储、检索和处理。863数据结构复习题重点涵盖了数据结构的基本概念、逻辑结构、存储结构、算法分析和评价。 1. **数据结构...
Java链表是编程中一种基础且重要的数据结构,它在许多场景下有着广泛的应用。本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组...
在这个链表演示程序中,我们看到一个用Java语言实现的链表,它是针对数据结构课程设计的一个项目。这个项目的目标是帮助学生理解和实践链表的基本操作,如初始化、插入、删除和搜索。 首先,让我们深入了解链表的...
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
数组和链表是两种常见的线性数据结构,它们都是由具有相同类型的n(n≥0)个数据元素组成的有限序列。下面我们将详细介绍数组和链表的基本组成部分、特点和Java实现。 一、数组 数组是最常用的线性数据结构,数组中...
实现两个链表的合并(数据结构课程设计c语言版)
我们可以利用链表这种数据结构来解决约瑟夫环问题。 首先,让我们详细了解一下链表。链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素(节点)包含两部分:数据域(存储实际信息)和指针域(指向下...
在这个数据结构——链表的实现中,我们将深入探讨如何用C++来创建一个链表类,并实现搜索、删除、插入和查找等基本操作。 首先,链表的基本思想是使用节点(或称为元素)来存储数据,每个节点包含两部分:数据域和...