java数据结构和算法------线性表(链表结构)

  1 package iYou.neugle.list;
  2
  3 public class MyChainList<T> {
  4     // 向链表尾部添加元素
  5     public Node<T> AddEnd(Node<T> head, T data) {
  6         Node<T> node = new Node<T>();
  7         node.data = data;
  8         if (head == null) {
  9             head = node;
 10             return head;
 11         }
 12         SearchEnd(head).next = node;
 13         return head;
 14     }
 15
 16     private Node<T> SearchEnd(Node<T> head) {
 17         if (head.next == null) {
 18             return head;
 19         }
 20         return SearchEnd(head.next);
 21     }
 22
 23     // 向链表头部添加元素
 24     public Node<T> AddHead(Node<T> head, T data) {
 25         Node<T> node = new Node<T>();
 26         node.data = data;
 27         Node<T> nodeCopy = DeepCopy(head, new Node<T>());
 28         node.next = nodeCopy;
 29
 30         head.data = node.data;
 31         head.next = node.next;
 32         return head;
 33     }
 34
 35     private Node<T> DeepCopy(Node<T> head, Node<T> node) {
 36         if (head != null) {
 37             node.data = head.data;
 38             node.next = head.next;
 39         } else {
 40             return null;
 41         }
 42         DeepCopy(head.next, node.next);
 43         return node;
 44     }
 45
 46     // 向链表中插入数据
 47     public Node<T> Insert(Node<T> head, T key, T data) {
 48         if (head.next == null) {
 49             return null;
 50         }
 51
 52         if (head.data.equals(key)) {
 53             return AddHead(head, data);
 54         }
 55
 56         if (head.next.data.equals(key)) {
 57             Node<T> node = new Node<T>();
 58             node.data = data;
 59             node.next = head.next;
 60             head.next = node;
 61             return head;
 62         }
 63         Insert(head.next, key, data);
 64         return head;
 65     }
 66
 67     // 向链表中删除数据
 68     public Node<T> Delete(Node<T> head, T key) {
 69         if (head.next == null) {
 70             return null;
 71         }
 72
 73         if (head.data.equals(key)) {
 74             head.data = head.next.data;
 75             head.next = head.next.next;
 76             return head;
 77         }
 78
 79         if (head.next.data.equals(key)) {
 80             head.next = head.next.next;
 81             return head;
 82         }
 83         Delete(head.next, key);
 84         return head;
 85     }
 86
 87     // 按关键字查找节点
 88     public void Search(Node<T> head, T key) {
 89         if (head.data.equals(key)) {
 90             System.out.println("查询节点为头结点,节点值为:" + key);
 91             return;
 92         }
 93         while (head.next != null) {
 94             if (head.next.data.equals(key)) {
 95                 System.out.print("查询节点为:" + key + ",");
 96                 System.out.print("查询节点前置节点为:" + head.data + ",");
 97                 if (head.next.next != null) {
 98                     System.out.println("查询节点后置节点为:" + head.next.next.data);
 99                 } else {
100                     System.out.println("查询节点为尾节点!");
101                 }
102                 return;
103             }
104             head = head.next;
105         }
106         System.out.println("没有该节点!");
107     }
108
109     // 获取链表长度
110     public int SizeOf(Node<T> head) {
111         // 如果没有节点,返回-1
112         if (head == null) {
113             return -1;
114         }
115         int n = 1;
116         while (head.next != null) {
117             n++;
118             head = head.next;
119         }
120         return n;
121     }
122
123     public void Print(Node<T> head) {
124         while (head != null) {
125             System.out.println(head.data);
126             head = head.next;
127         }
128     }
129 }
时间: 2024-10-04 01:37:23

java数据结构和算法------线性表(链表结构)的相关文章

数据结构与算法-线性表顺序存储结构删除操作的实现

这一章节我们来看一下线性表顺序存储结构删除操作的简单实现 package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list * * @param num * 元素个数 */ private void iniList(int num) { list = new Object[num]; for (int i =

数据结构与算法——线性表顺序存储结构

今天总结一下数据结构中的线性表中的顺序存储结构,这是一种比较简单的结构. 首先,看一下什么是线性表. 什么是线性表? 线性表是一种简单的数据结构,数据元素之间是一对一的关系,即除了第一个和最后一个元素外其余元素都是首尾相接的.元素的个数称为线性表的长度,长度为零则表示线性表为空. 什么是线性表的循序存储结构? 线性表中的顺序存储结构就是把线性表中的元素按逻辑次序依次存放在一组地址连续的存储空间中,也把这种线性表称为顺序表.根据顺序表的特点,通常是用数组来存储元素的. 下面就看具体的实现(C++)

java数据结构和算法------线性表(顺序表结构)

1 package iYou.neugle.list; 2 3 public class MySeqList<T> { 4 private int initMaxSize = 10; 5 private T[] list; 6 private int listLen = 0; 7 8 public MySeqList() { 9 this.Init(); 10 } 11 12 public MySeqList(int size) { 13 this.initMaxSize = size; 14

java数据结构与算法之双链表设计与实现

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??上一篇文章分析顺序表和单链表,本篇就接着上篇继续聊链表,在单链表

数据结构与算法--线性表系列(循环链表、双向链表)

hello,everybody,今天我们来学习线性表的最后两种形式,循环链表.双向链表.这两种链表,是链式存储结构的不同形式.书归正传,我们先来看看循环链表吧. 大家思考一个问题,我们把线性表各个元素比作下图的路线图上的城市: 我们的线性表各个结点的指针,都是指向唯一的后继结点,线性表的终端结点的指针为空.这样的话,如果我们在南京,我们需要先访问南京右j边的城市,再访问南京左边的城市.根据线性表的结构,我们只能返回上海,从上海依次访问到北京.因为我们的终端结点的指针为空,如果直接访问南京右边的城

数据结构与算法—线性表详解

前言 通过前面数据结构与算法前导我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容.当然,我用自己的理解解分享给大家. 其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现. 顺序表.链表:物理结构,他是实现一个结构实际物理地址上的结构.比如顺序表就是用数组实现.而链表用指针完成主要工作.不同的结构在不同的场景有不同的区别. 对于java来说,大家都知道List接口类型,这就是逻辑结构,

数据结构与算法-线性表

近期在学习数据结构,反反复复已经看过几遍了,也做了一些练习题,但总感觉不记录一下,思路就不是很清晰,所以,从今天开始总结这段时间对数据结构的学习. 无论学习什么,基础知识都是最总要的,数据结构也不例外.线性表就是数据结构的基础,很多常见的数据结构都是基于线性表来实现的. 那么,什么是线性表呢?官方的定义是: 零个或多个数据元素的有限序列 可以从两个方面来理解线性表,首先它是一个序列,也就是其中的元素有先后顺序,其次是有限的,对于无线数列,也只能存在于理论数学中. 说了这么多,小结一下: 1)线性

数据结构与算法 顺序表 链表

内存 计算机的作用 用来存储和运算二进制的数据 衡量计算机内存大小的单位: bit(位): 字节:8bit kb:1024字节 mb:1024kb 问题:计算机如何计算1+2? 必须先在计算机的内存开辟内存空间 才将对应的数值存储到该内存中 变量的概念 a = 10 在计算机中表示的含义(内存图) 内存空间开辟好了之后,每一块内存空间都会有两个默认的属性 内存空间的大小:算机内存大小的单位 内存空间的地址:十六进制的数值 地址作用:用来定位(追踪)指定内存空间,就可以获取该内存空间中存储的数据

数据结构与算法-线性表之双向链表

参考博客: http://www.cnblogs.com/skywang12345/p/3561803.html https://blog.csdn.net/howlaa/article/details/38513235 1.概述 线性表是一种线性结构,由数组.单项链表和双向链表组成,这里讲讨论双向链表的理论知识和实现代码. 双向链表和单项链表类似,双向链表由两个指针作为指针域,分别指向前驱节点和后驱节点.可以从任何节点开始向前或者向后删除.增加.查找节点. 双链表的示意图如下: 在插入节点的时