Skip to content

Exercise 3.21 & 3.22 - Solution #804

@devinryu

Description

@devinryu

Exercise 3.21

function print_queue(q) {
    return head(q);
}

Exercise 3.22

function make_queue() {
    let front_ptr = null;
    let rear_ptr = null;

    function is_empty_queue() {
        return is_null(front_ptr);
    }
    
    function insert_queue(item) {
        let new_pair = pair(item, null);
        if(is_empty_queue()) {
            front_ptr = new_pair;
            rear_ptr = new_pair;
        } else {
            set_tail(rear_ptr, new_pair);
            rear_ptr = new_pair;
        }
    }
    
    function delete_queue() {
       if(is_empty_queue()) {
            error("FRONT called with an empty queue");
        } else {
            display(tail(front_ptr));
            front_ptr = tail(front_ptr);
        }
    }
    
    function print() {
        display(front_ptr);
    }
    
    function dispatch(m) {
        return m === "insert_queue"
        ? insert_queue
        : m === "delete_queue"
        ? delete_queue
        : m === "is_empty_queue"
        ? is_empty_queue
        : m === "print"
        ? print
        : error(m, "Unknow operation -- DISPATCH");
    }

    return dispatch;
}

// Example
const q = make_queue();

q("insert_queue")("a");
q("insert_queue")("b");
q("insert_queue")("c");
q("print")();

q("delete_queue")();

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions