rust 实现线性数据结构

rust 实现线性数据结构

Table of Contents

线性数据结构

数组、栈、队列、双端队列数据项的顺序由添加或者删除的顺序决定

栈 - LIFO

先进后出原则 根据栈的特性可以抽象以下数据操作:

  • new()
  • push(item)
  • pop()
  • peek()
  • is_empty()
  • size()

RUST 实现栈

// stack.rs

#[derive(Debug)]
struct Stack<T> {
    top: usize,
    data: Vec<T>
}

impl <T> Stack <T> {
    fn new() -> Self {
        Stack {
            top: 0,
            data: Vec::new()
        }
    }

    fn push(&mut self, val: T) {

        self.data.push(val);
        self.top += 1;
    }

    fn pop(&mut self) -> Option<T> {

        if self.top == 0 {return None;}
        self.top -= 1;
        // 使用Vec数据结构的pop()
        self.data.pop();
    }

    fn peek(&self) -> Option<T> {
        if self.top == 0 { return None; }
        self.data.get(self.top - 1);
    }

    fn is_empty(&self) -> usize {
        0 == self.top
    }

    fn size(&self) -> usize {
        self.top
    }
}
Tags :

Related Posts

使用 axum 构建微服务(-)

使用 axum 构建微服务(-)

一直想使用 axum 完成工作中的一些服务功能,发现版本已经更新到了 0.8.x 重新梳理并学习一步一实现一个小的功能 开始 axum is a web application framework that focuses on ergonomics and modularity

Read More
工厂方法模式

工厂方法模式

工厂方法模式 是一种创建型设计模式,在父类中提供一个创建对象方法,允许子类 决定实例化对象的类型 动态分派 动态分派和运行时有关,也就是 运行时多态 ,比如java中的 方法重写 具体创建类型由子类在运行时决定 延迟绑定 扩展性强: 秩序添加新的子类工厂 解偶:依赖抽象工厂和抽象产品,与具体实现解偶 运行时决策:通过多态机制,实际调用的工厂方法在运行时确定 静态分派 静态分派则是在编译时确定,比如 方法重载

Read More
Rust:智能指针Box<T>

Rust:智能指针Box<T>

BOX<T> 是一个用于在堆上分配内存的智能指针,提供对堆内存的所有权管理。 核心概念 堆分配 Box<T> 将数据存储在堆 Heap 而非栈 Stack 上,栈上仅存储指向堆数据的指针

Read More