IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 暑期的数据结构学习(Java)4.0(链表) -> 正文阅读

[数据结构与算法]暑期的数据结构学习(Java)4.0(链表)

4.0链表

真正的动态数据结构,也是最简单的动态数据结构
引入了引用和指针。链表是递归机制
主句存储在节点中
class Node{
E e;
Node next;
}

优点:真正的动态,不需要处理固定容量的问题;
?
缺点:丧失了随机访问的能力
?
数组最好索引有语义的情况,有点支持快速查询
?
链表不适合用于索引有语义的情况,优点动态

public interface Stack<E>{
? ? int getSize();
? ? boolean isEmpty();
? ? void push(E e);
? ? E pop();
? ? E peek();
}
public class LinkedList<E>{
? ? private class Node{
? ?? ???public E e;
? ?? ???public Node next;
? ?? ???
? ?? ???public Node(E e,Node next){
? ?? ?? ?? ?this.e =e;
? ?? ?? ?? ?this.next =next;
? ?? ???}
? ?? ?? ?public Node(E e){
? ?? ?? ?? ?this(e,null);
? ?? ?? ?? ? public Node(){
? ?? ?? ?? ?? ???this(null,null);
? ?? ?? ?? ? }
? ?? ?? ?? ?
? ?? ?? ?? ? public String toString(){
? ?? ?? ?? ?? ???return e.toreSting();
? ?? ?? ?? ? }
? ?? ?? ?? ?
? ?? ?? ?? ?
? ?? ?? ?? ?
? ?? ???}
? ? }
}

4.1添加元素

private Node head;
int size;
public LinkedList(){
? ? head=null;
? ? size = 0;
? ?
}
//获取个数
public int getSize(){
? ? return size;
? ?
}
public boolean isEmpty(){
? ? return size==0;
}

4.1.2表头添加元素

public void addFirst(E e){
Node node = new Node(e);
node.next=head;
head =node;
//head = new Node(e,head);
size==;
}

4.1.2中间添加元素??//在链表中不是一个常用的操作

public void add(int index,E e){
? ? if (index <0||index>size)
? ? {throw new illegalArgumentException("error");
? ? }if (index === 0){
? ?? ???addFirst(e);
? ?? ???else{Node temp =head;
? ?? ?? ?? ?for (int i =0;i<index-1;i++)
? ?? ?? ?? ?temp = temp.next;
? ?? ?? ?? ?
? ?? ?? ?? ? Node node = new Node(e);
? ?? ?? ?? ? node.next=temp.next;
? ?? ?? ?? ? temp.next =node;
? ?? ?? ?? ?
? ?? ?? ?? ? size++;
? ?? ?? ?? ?}
? ? }
}
//同理末尾添加
public void adLast(E e){
add(size,e);
}


4.3优化使用虚拟头节点

public LinkedList(){
? ? dummyHead = new Node(null,null);
? ? size = 0
}public void add(int index,E e){
? ? if (index == 0)
? ?? ???addFirst(e);
? ?? ???else{Node temp =dummyHead;
? ? }
? ? //这里只截取了修改的片段
}

4.4链表的遍历,查询,修改(只作为练习用

public E get(int index){
? ? //一个合法性的判断,之前写到了,这里不再重复
? ?
? ? //开始遍历
? ? Node cur= dummyHead.next;
? ? for(int i=0;i<index;i++){//这里从第一个元素开始遍历,而上面是从第一个的前一个开始遍历
? ?? ???cue = cur.next;
? ?? ???return cur.e;
? ? }
}
?
?
public E grtFirst(){
? ? return get(0);
}
public E grtLast(){
? ? return get(size-1);
}//修改元素
public void set(int index,E e)
{ //一个合法性的判断,之前写到了,这里不再重复
? ? Node cur = dummyHead.next;
? ? for (int i=0;i<index;i++)
? ? {
? ?? ???cur = cur.next;
? ?? ???cur.e=e;
? ? }
}//查找元素
public boolean contains(E e){
? ? Node cur = dummyHead.next;
? ? while(cur !=null){
? ?? ???if (cur.e.equals(e))
? ?? ?? ?? ?return ture;
? ?? ???cur = cur.next;
? ? }
? ? return false;
}
//打印
public String toString(){
? ? StringBuilder res = new StringBuilder();
? ? Node cur = dummyHead.next;
? ? while(cur != null){
? ?? ???res.append(cur +"->");
? ?? ???cur = cur.next;
? ? }
? ? res.append("null");
? ? return res.toString();
? ?
}

4.5删除元素

public E remove(int index){
? ???//一个合法性的判断,之前写到了,这里不再重复
? ? Node prev = demmyHead;
? ???for (int i=0;i<index;i++)
? ?? ? prev = prev.next;
? ? Node retNode = prev.next;
? ? prev.next = retNode.next;
? ? retNode.next = null;
? ? size--;
? ? return retNode.e;
}
? ? public E removeFirst(){
? ?? ???return remove(0);
? ? }??
public E removeLast(){
? ?? ???return remove(size-1);
? ? }


?

4.6使用链表实现栈

public class LinkedListStack<E> implements Stack<E>{
? ? private LinkedListStack(){
? ?? ?list = new LinkedList<>();
? ? }
? ? public int getSize(){
? ?? ???return list.getSize();
? ?? ???
? ? }
? ? public boolean isEmpty(){
? ?? ???return list.isEmpty();
? ? }
? ? public void push(E e){
? ?? ???list.addFirst(e);
? ? }
? ? public E pop(){
? ?? ???return list.removeFirst();
? ? }
? ? public E peek(){
? ?? ???returnlist.getFirst();
? ?? ???
? ? }
}

4.7实现队列

从head端删除元素,同tail端插入元素
采用尾指针优化
public class LinkedListQueue<E> implements Queue<E>{? ?
private class Node{
? ?? ???public E e;
? ?? ???public Node next;
? ?? ???
? ?? ???public Node(E e,Node next){
? ?? ?? ?? ?this.e =e;
? ?? ?? ?? ?this.next =next;
? ?? ???}
? ?? ?? ?public Node(E e)
? ?? ?? ?? ?this(e,null);
? ?? ?? ?? ? public Node(){
? ?? ?? ?? ?? ???this(null,null);
? ?? ?? ?? ? }
? ?? ?? ?? ?
? ?? ?? ?? ? public String toString(){
? ?? ?? ?? ?? ???return e.toreSting();
? ?? ?? ?? ? }
? ?? ???}
? ? private Node head,tail;
? ? private int size;
? ? public LinkListQueue(){
? ?? ???head = null;
? ?? ???tail = null;
? ?? ???size = 0;
? ? }
? ?
? ? public int getSize(){
? ?? ???return size;
? ? }
? ? public boolean isEmpty()
? ? {
? ?? ???return size==0;
? ?? ???
? ? }
? ? public void enqueue(E e){
? ?? ???if (tail ==null){
? ?? ?? ?? ?tail=new Node(e);
? ?? ?? ?? ?head =tail;
? ?? ???}
? ?? ???else{tail.next = new Node(e);
? ?? ?? ?? ?tail = tail.next;}
? ? size++;
? ? }
? ?
? ? }
public E dequeue(){
? ? if(isEmpty()){ //一个合法性的判断
? ?? ???Node retNode = head;
? ?? ???head = head.next;
? ?? ???retNode.next = null;
? ?? ???if(head ==null)
? ?? ?? ?? ?tail=null;
? ?? ???size--;
? ?? ???return retNode.e;
}
}

PS:我是不会说我上周忘了发了,直到刚刚才发现,所以这周懂得都懂。

还有就是目测暑假还有2—3次的样子,之后的话只能说尽量更快一点。

顺带提一嘴,开学之后我可能会开始Java的学习,有兴趣可以看看这个博主,量大高产的那种。

https://blog.csdn.net/qq_53388087

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:36:08  更:2021-08-05 17:36:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:51:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码