Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nesteiner/linkedlist.jl
Julia 链表
https://github.com/nesteiner/linkedlist.jl
julia linkedlist
Last synced: about 1 month ago
JSON representation
Julia 链表
- Host: GitHub
- URL: https://github.com/nesteiner/linkedlist.jl
- Owner: nesteiner
- Created: 2021-11-13T13:52:37.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-02-06T12:59:34.000Z (11 months ago)
- Last Synced: 2024-04-09T22:38:47.469Z (9 months ago)
- Topics: julia, linkedlist
- Language: Julia
- Homepage:
- Size: 29.3 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Table of Contents
1. [LinkedList](#org8732e4f)
1. [更新 2022.1.7](#orge3ce40d)
1. [issue](#orgea9ed1b)
2. [更新 好像是12月份](#orgf701c6b)
3. [文档](#orgdf2add3)
4. [Usage](#org7bcea14)
1. [创建链表](#org369474e)
2. [添加数据](#orgea21931)
3. [删除数据](#orgd871c27)
4. [迭代相关](#orgbccf9e5)
5. [查找相关](#org3e5080e)# LinkedList
## 更新 2022.1.7
### issue
1. problem
在函数中为 `list` 标注类型很别扭, `fn(list::List{Int, ConsDouble})`
2. fix
全都改为双链表节点,老子乐意, `fn(list::List{Int})` 的类型标注以解决
另外,如果需要定义单链表,可以参考 `Dispatch.jl` 定义链表结构## 更新 好像是12月份
大幅度删改了以下,文档也是
## 文档
[旧版本文档](./docs/oldversion.md)
[新版本文档](./docs/LinkedList.md)## Usage
### 创建链表
list = List(Int) # 创建一个单链表
queue = Queue(Int) # 创建一个单链表队列
stack = Stack(Int) # 创建一个单链表栈
double_list = List(Int; isdouble = true) # 创建一个双链表,其他链表类似的,可以对 isdouble 赋值### 添加数据
1. 通用的方法
push!(list, 1) # 对 List 类型会默认添加到末尾
push!(queue, 1) # 同上
push!(stack, 1) # 对 Stack 类型默认添加到头2. 建议只用在 `List` 上
iter = findfirst(isequal(1), list)
if !isnothing(iter)
pushnext!(list, iter, -1)
end### 删除数据
1. 通用的方法
pop!(list) # 默认删除末尾的数据
pop!(queue); pop!(stack) # 默认删除头的数据2. 建议只用在 `List` 上
iter = findfirst(isequal(-1), list)
if !isnothing(iter)
popat!(list, iter)
end### 迭代相关
迭代方法已经为定义好了
iterate(linkedlist::ListType) where ListType <: AbstractLinkedList =
iterate(linkedlist.baselist)
iterate(linkedlist::ListType, state::NodeType) where {ListType <: AbstractLinkedList, NodeType <: ListCons} =
iterate(linkedlist.baselist, state)
iterate(::ListType, state::NilNode) where ListType <: AbstractLinkedList = nothing相关高阶函数可以调用,如 `map` , `reduce`
不过 `filter` 需要自己定义,还好我也写了### 查找相关
查找所需要的接口是 `keys` 函数
keys(linkedlist::ListType) where ListType <: AbstractLinkedList = keys(linkedlist.baselist)
这样以后,可以直接调用 `find` 系列函数,返回值是 `链表节点` 或者空值 `nothing`
新添加 `contains` 接口
```julia
contains(list, data)
```