admin 管理员组文章数量: 887007
Rust 入门 基础单向链表
使用Rust完成单向链表
最近闲下来了,看到一门语言Rust兴起,工资也可观,linux听说有部分也开始用rust写了,但听说学习有曲线,当时本人是不信邪的,学了之后才知道是真的有曲线。。。光是链表就搞了好几天,主要国内这方面的文章还太少,甚至给我一种rust还不成熟的错觉。不过既然写linux大佬都在用,且号称集各种语言优势的现代化语言,我就不由得想尝试一下。
先给大家分析一下为什么难,为什么有些人会觉得比C/C++“难”。
-
概念多
因为rust集百家之长,所以吸收了很多先进的思想,多了许多的概念,最直观的体现在对于占用的释放。多了很多在其他语言没有的概念,比如生命周期,所有权等。 -
规则多
对于C++,大家都是自己申请,自己释放或者由栈帮助释放。对于java、python等语言,其占用由语言自己管理,gc(垃圾回收)经常被诟病,说是全局暂停。rust确保安全,将不安全的可能扼杀在编译期,对于程序员来说需要了解更多的规则,比如堆栈、回收机制等,在不使用unsafe的情况下,这些规则新手(我)是难以察觉的。 -
国内资料少
国内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 入门 基础单向链表
版权声明:本文标题:Rust 入门 基础单向链表 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732361941h1535465.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论