admin 管理员组

文章数量: 887007

Rust 入门 基础单向链表

使用Rust完成单向链表

    最近闲下来了,看到一门语言Rust兴起,工资也可观,linux听说有部分也开始用rust写了,但听说学习有曲线,当时本人是不信邪的,学了之后才知道是真的有曲线。。。光是链表就搞了好几天,主要国内这方面的文章还太少,甚至给我一种rust还不成熟的错觉。不过既然写linux大佬都在用,且号称集各种语言优势的现代化语言,我就不由得想尝试一下。

    先给大家分析一下为什么难,为什么有些人会觉得比C/C++“难”。

  1. 概念多
    因为rust集百家之长,所以吸收了很多先进的思想,多了许多的概念,最直观的体现在对于占用的释放。多了很多在其他语言没有的概念,比如生命周期,所有权等。

  2. 规则多
    对于C++,大家都是自己申请,自己释放或者由栈帮助释放。对于java、python等语言,其占用由语言自己管理,gc(垃圾回收)经常被诟病,说是全局暂停。rust确保安全,将不安全的可能扼杀在编译期,对于程序员来说需要了解更多的规则,比如堆栈、回收机制等,在不使用unsafe的情况下,这些规则新手(我)是难以察觉的。

  3. 国内资料少
    国内rust还在起步阶段,写的不错的教程都是由社区提供的,知乎上的 rust圣经系列 写的就非常不错,但是因为还在更新的原因,感觉不够全面,也不太适合纯新手去学。

    说说我自己的感受吧,本人学过大量的主流编程语言,其中C++用来写acm,主要体现逻辑思维,(当时觉得自己是会C++的),没有对底层有很深刻的了解。python、java写过很多项目,虽然都不大,但是都和rust关注的点不太一样。这样的我去学rust,被群里的rust大佬说是纯没学过编程的新手(哭),可见rust学习梯度是很大的,请后来者一定要做好准备,不懂就多问会的人。下面正式开始:

问题重述

    使用rust实现单向链表,方法为add和show。add用来在尾部增加一个节点,show用来循环展示链表内部的内容。

    群里的前辈说rust实现链表是很烦的,建议我直接用unsafe,但是我认为熟悉一门语言最好的方式就是数据结构的练习,如果数据结构能写得出,那基本上根据自己想法实现别的安全的代码了。所以我仍是写了链表。

数据结构

    主要是两个数据结构,一个是链表节点Node,存储了值和next;一个是链表本身,存储了head和tail。

    结构如下

#[derive(Debug)]
pub struct Node<T>{pub value:T,next:Option<Rc<RefCell<Node<T>>>>,
}
#[derive(Debug)]
pub struct List<T>{head:Option<Rc<RefCell<Node<T>>>>,tail:Option<Rc<RefCell<Node<T>>>>
}

方法

    对于List类需要实现add、show方法。

    add方法


impl<T> List<T>{pub fn new()->Self{List{head:None,tail:None}}pub fn add(&mut<

本文标签: Rust 入门 基础单向链表