`
JAVA天地
  • 浏览: 657102 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

数据结构学习笔记之一:链表

阅读更多

貼作者BOLG:http://blog.csdn.net/woolceo/

许多人都知道链表(C语言)都是借助指针来实现链接的,同样许多人也知道java语言是没有指针的,所以很多人可能很理所当然的认为"java没有数据结构",我想这种想法是错误的.程序=算法+数据结构,任何语言都离不开数据结构(唉,这么简单一个道理我也是最近才悟出的,惭愧啊...).下面我就谈谈java语言的数据结构.

代码一:链表结构的java实现

CODE:[Copy to clipboard]
/*
* 创建日期 2005-11-26
* @author Woden Wang
*/
package listtest;

public class ListNode {

Object element;
ListNode next;

ListNode(Object o,ListNode n)
{
element=o;
next=n;
}

ListNode(Object o)
{
this(o,null);
}
}

代码二:链表操作器的java实现

CODE:[Copy to clipboard]
/*
* 创建日期 2005-11-26
* @author Woden Wang
*/
package listtest;

public class LinkedList {

private ListNode header;

LinkedList()
{
header=new ListNode(null);
}

LinkedList(ListNode n)
{
header=new ListNode(null,n);
}

/**
* 判断链表是否为空
* @return 链表是否为空的布尔值
*/
boolean isEmpty()
{
return header.next==null;
}

/**
* 清空链表.
* 注:此方法没有真正清除内存,清楚内存的任务交给java垃圾回收器去处理吧.^_^
*/
void makeEmpty()
{
header=null;
System.gc();
}

/**
* 查找目标数据所在节点
* @param o 目标数据
* @return 保存目标数据节点
*/
ListNode find(Object o)
{
if(isEmpty())
return null;

ListNode node = header.next;
while(node!=null)
{
if(node.element.equals(o))
return node;

node=node.next;
}
return null;
}

/**
* 在节点node后面新建一个节点,该节点保存数据o
* @param o 数据
* @param node 插入节点
*/
void insert(Object o,ListNode node)
{
node.next=new ListNode(o,node.next);
}

/**
* 删除目标数据的节点
* @param o 目标数据
*/
void remove(Object o)
{
if(isEmpty())
return;

ListNode node = header.next;
while(node!=null)
{
if(node.next.element.equals(o))
{
node.next=node.next.next;
return;
}
node = node.next;
}
}
}

完成...参考了<数据结构(C语言版)>(hjack借我D书,呵呵,沾点仙气)和<数据结构与算法分析--java语言描述>,不过感觉原作者写得罗嗦了点,所以自己整理了下(原著的java实现用了3个类,我觉得有点不必要).

接下来用链表解一道题.这道题是我去北电笔试的时候遇到的,当时做得乱七八糟(因为要求用C/C++做...晕...当时就投降了...).

题目是这样的:输入一串字符,分别统计各个字符的数目.(maybe大家都觉得很简单,,,但我当时确实不会...用力鄙视我吧...)

这题用了三个文件,其中两个分别是链表结构和链表操作器.

文件一:ListNode.java

CODE:[Copy to clipboard]
package list;


public class ListNode {

char element; //当前字符
int count; //字符个数

ListNode next;

ListNode(char c,ListNode n)
{
element = c;
count=1;
next=n;
}

ListNode(char c)
{
this(c,null);
}
}

文件二:LinkedList.java

CODE:[Copy to clipboard]
package list;


public class LinkedList {

ListNode header;

LinkedList()
{
this(null);
}

LinkedList(ListNode n)
{
header=new ListNode(' ',n);
}

boolean isEmpty()
{
return header.next==null;
}

void makeEmpty()
{
header=null;
}

ListNode find(char c)
{
if(isEmpty())
return null;

ListNode node = header.next;
while(node!=null)
{
if(node.element==c)
return node;

node=node.next;
}
return null;
}

void insert(char c,ListNode node)
{
node.next=new ListNode(c,node.next);
}

void remove(char c)
{
if(isEmpty())
return;

ListNode node = header.next;
while(node!=null)
{
if(node.next.element==c)
{
node.next=node.next.next;
return;
}
node = node.next;
}
}
}

文件三:Test.java

CODE:[Copy to clipboard]
package list;


public class Test {

public static void showCharCount(char s[])
{
System.out.println("原字符串是:"+new String(s));
LinkedList list = new LinkedList();
ListNode node;
for(int i=0;i<s.length;i++)
{
if((node=list.find(s[i]))==null)
list.insert(s[i],list.header);
else
node.count++;
}

/*
* 打印链表
*/
node = list.header.next;
while(node!=null&&!list.isEmpty())
{
System.out.println("字符:'"
+node.element+"' 出现:"
+node.count+"次");
node=node.next;
}
}

public static void showCharCount(String s)
{
showCharCount(s.toCharArray());
}

public static void main(String[] args) {

showCharCount("abcd ssd wool");

}
}

最后修饰下,把main方法写漂亮点:

CODE:[Copy to clipboard]
public static void main(String[] args) throws IOException{

String s;
while(true)
{
System.out.print("请输入待统计字符串:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
s = br.readLine();

if(s.length()>=40)
{
System.out.println("请输入40个字符以内.");
System.out.println("===============================\n");
continue;
}
else
break;
}
showCharCount(s);

}


效果如下:

请输入待统计字符串:Woden!Never give up!!!I'll do my best!!!
请输入40个字符以内.
===============================

请输入待统计字符串:Woden!Never give up!!!
原字符串是:Woden!Never give up!!!
字符:'p' 出现:1次
字符:'u' 出现:1次
字符:'i' 出现:1次
字符:'g' 出现:1次
字符:' ' 出现:2次
字符:'r' 出现:1次
字符:'v' 出现:2次
字符:'N' 出现:1次
字符:'!' 出现:4次
字符:'n' 出现:1次
字符:'e' 出现:4次
字符:'d' 出现:1次
字符:'o' 出现:1次
字符:'W' 出现:1次

分享到:
评论

相关推荐

    数据结构学习笔记.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构学习笔记

    数据结构纯理论知识 链表 哈希表 二叉树 图

    数据结构(C语言描述)学习笔记.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    小码哥《恋上数据结构与算法》学习笔记.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    浙江大学《数据结构》上课笔记 + 数据结构实现 + 课后题题解.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构学习笔记-链表中的双向链表(JAVA)

    NULL 博文链接:https://f059074251.iteye.com/blog/2199876

    【Leetcode刷题笔记03】203.移除链表元素 707.设计链表 206. 反转链表.md

    适合人群:学习算法和数据结构的程序员或学生,尤其是想系统学习链表操作的人。 能学到什么:掌握链表虚拟头节点设置方法;练习链表基本操作函数如增删查改;学习链表反转等经典算法的代码实现。 阅读建议:链表算法需要...

    算法和数据结构学习笔记.zip

    逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树...学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

    算法和数据结构体系学习班.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构与算法分析学习笔记

    数据结构与算法分析 经典笔记学习笔记 1 前言 1.1 所选教材 1.2 写作原因 1.3 一些约定 1.4 历史记录 1.5 联系方式 2 单链表 2.1 代码实现 2.2 效率问题 2.3 应用:一元多项式(加法和乘法) 2.3.1 基础知识 2.3.2 ...

    双向链表API及C语言实现

    双向链表的API和C语言实现,程序说明在我的专栏《数据结构与算法学习笔记》中双向链表相关文章。包含了双向链表的结点结构体、表头结构体、创建双向链表、销毁双向链表、获取链表长度、清空双向链表、插入一个节点...

    数据结构.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    《数据结构与算法分析(Java语言描述版本)》中介绍的算法与数据结构.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    从 0 到 1 学习 JavaScript 数据结构与算法.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    bigsai的数据结构与算法、LeetCode图解、剑指offer图解文章专栏,致力于最好懂的数据结构与算法专栏.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构 浙大MOOC.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构与算法.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构在线模拟器.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    算法和数据结构.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

    数据结构和算法.zip

    数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。...

Global site tag (gtag.js) - Google Analytics