[상용 데이터 구조 및 응용] 알고리즘 노트 - 링크

체인 테이블
use List::*;

enum List {
    // Cons:      ,                  
    Cons(u32, Box<List>),
    // Nil:    ,      
    Nil,
}

//       enum   
impl List {
    //        
    fn new() -> List {
        // `Nil`   `List`   
        Nil
    }

    //       ,                          
    fn prepend(self, elem: u32) -> List {
        // `Cons`     List   
        Cons(elem, Box::new(self))
    }

    //        
    fn len(&self) -> u32 {
        // `self`     ,             `self`      
        // `self`   `&List`   ,`*self`   `List`   ,      `T`      
        //       `&T`    
        match *self {
            //      tail     ,   `self`     ;
            //        tail   
            Cons(_, ref tail) => 1 + tail.len(),
            //     :        0
            Nil => 0
        }
    }

    //        (    )     
    fn stringify(&self) -> String {
        match *self {
            Cons(head, ref tail) => {
                // `format!`   `print!`   ,              ,   
                //          
                format!("{}, {}", head, tail.stringify())
            },
            Nil => {
                format!("Nil")
            },
        }
    }
}

fn main() {
    //        
    let mut list = List::new();

    //       
    list = list.prepend(1);
    list = list.prepend(2);
    list = list.prepend(3);

    //          
    println!("linked list has length: {}", list.len());
    println!("{}", list.stringify());
}

좋은 웹페이지 즐겨찾기