rust 入门笔记:使用rust实现双向链表、二叉树

本文记录了os summer of code 2020项目中的Rust学习过程,包括双向链表和二叉树的数据结构定义、函数实现及测试。参考了Learn C The Hard Way和LeetCode题目,提供了GitHub链接以便查看完整代码。同时指出在实现双向链表时应注意避免循环引用和内存泄漏问题。
摘要由CSDN通过智能技术生成

这是 os summer of code 2020 项目每日记录的一部分:

github地址:https://github.com/yunwei37/os-summer-of-code-daily

其他一些 rust 的小练习:

笨办法系列

参考:Learn C The Hard Way 中文版

  • c32-list: 练习32:双向链表
  • c33-sort: 练习33:链表算法
  • c40-bst: 练习40:二叉搜索树
  • c42-stack-queue: 练习42:栈和队列
  • c38-hashal:练习38:哈希算法

Leecode题目用Rust实现

参考:https://leetcode-cn.com/problemset/all/

文件夹中包含:

  • README.md: 题目的出处和相关描述信息
  • solution.rs: rust语言实现代码
  • solution.c: c语言的实现代码

题目目录:

  • leetcode-best-time-to-buy-and-sell-stock - 121. 买卖股票的最佳时机
  • leetcode-binary-tree-inorder-traversal - 94. 二叉树的中序遍历
  • leetcode-game-of-life - 289. 生命游戏
  • leetcode-maximum-depth-of-binary-tree - 104. 二叉树的最大深度
  • leetcode-maximum-subarray - 53. 最大子序和
  • leetcode-remove-element - 27. 移除元素
  • leetcode-set-matrix-zeroes - 73. 矩阵置零
  • leetcode-valid-parentheses - 20. 有效的括号
  • leetcode-longest-consecutive-sequence - 128. 最长连续序列
  • leetcode-friend-circles - 547. 朋友圈

双向链表

注意,这里是很早的时候写的代码,实际上实现双向链表最好要使用 weak 来避免循环引用和内存泄漏问题。

数据结构定义:

use std::rc::Rc;
use std::cell::RefCell;
use std::clone::Clone;

#[derive(Debug)]
struct ListNode
{
    value :i32,
    next: Option<Rc<RefCell<ListNode>>>,
    prev: Option<Rc<RefCell<ListNode>>>
}

#[derive(Debug)]
pub struct List{
    count: i32,
    first: Option<Rc<RefCell<ListNode>>>,
    last: Option<Rc<RefCell<ListNode>>>
}

函数实现


impl ListNode {
    fn new(value:i32) -> Rc<RefCell<ListNode>>{
        let pointer = Rc::new(RefCell::new(ListNode {
            value,
            next: None,
            prev: None,
        }));
        Rc::clone(&pointer)
    }
}

impl List {

    pub fn new() -> List {
        let first = ListNode::new(0);
        let last = ListNode::new(0);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值