• 【算法导论】基本数据结构


    栈和队列

    栈和队列都可以利用简单的数组结构实现,操作方法也很简单,但在算法中却有很多的应用。比如“(“、”)”的匹配,波兰表达式的运算中使用到了栈数据结构,也可以利用栈实现二叉树的遍历。

    栈:后进先出

    template <typename T>
    class stack
    {
    public:
        stack(int size=0){
            data=new T(size);
            top=0;
        };
        ~stack(){delete[] data};
    private:
        int size;
        T* data;
        int top;
    public:
        bool stackEmpty();
        void push(T x);
        T pop();
        /* data */
    };
    
    bool stack::stackEmpty(){
        if(this->top==0)
            return true;
        else
            return false;
    }
    void stack::push(T x){
        if(top==size)
            return;
        else{
            this->top=this->top+1;
            data[top+1]=x;
        }
    }
    T stack::pop(){
        if(stack::stackEmpty())
            return ;
        else{
            this->top=this->top-1;
            return data[this->top+1];
        }
    }

    队列:先进先出

    template <typename T>
    class queue
    {
    public:
        queue(int size=0){
            data=new T(size);
            tail=head=0;
        };
        ~queue(){delete []data};
    private:
        int size;
        int head;
        int tail;
        T* data;
    
        /* data */
    public:
        void enQueque(T x);
        T deQueue();
    };
    
    void queue::enQueque(T x){
        if(tail==size-1&&head>0){
            data[0]=x;
            tail=0;
        }else(tail>head||head>tail+1){
            data[tail]=x;
            tail=tail+1;
        }
    }
    T queue::deQueue(){
        if(head==tail)
            return ;
        else{
            if(head=size-1)
                head=0;
            else
                head=head+1;
            return data[head];
        }
    }

    链表

    链表顺序是由各对象的指针决定的。链表有很多种表达方式,如单链接的或双链接的,已排序的或未排序的,循环的或未循环的,有哨兵的或无哨兵的。

    template<typename T>
    class Node
    {
    public:
        Node(T value){
            this->value=value;
            this->next=null;
            this->prev=null;
        };
        ~Node(){
            delete next;
            delete prev;
        };
    
    private:
        Node* next;
        Node* prev;
        T value;
    };
    
    //没有哨兵的形式
    template <typename T>
    class List
    {
    public:
        List(Node* head=null){
            this->head=head;
        };
        ~List(){
            delete head;
        };
    
        /* data */
    private:
        Node* head;
    
    public:
        Node* listSearch(T k);
        void listInsert(Node* k);
        void listDelete(Node* x);
    };
    
    Node* List::listSearch(T k){
        Node* cur=this->head;
        while(cur!=null&&cur->value!=k){
            cur=cur->next;
        }
        return cur;
    }
    void List::listInsert(Node* k){
        k->next=head->next;
    
        if(head!=null){
            head->prev=x;
        }
        this->head=x;
        x->prev=null;
    }
    void List::listDelete(Node* x){
        if(x->prev!=null)
            x->prev->next=x->next;
        else
            this->head=x->next;
        
        if(x->next!=null)
            x->next-prev=x->prev;
    }
  • 相关阅读:
    MAC OS下安装Minizip
    MAC OS下安装pkg_config
    计算机图形学-几何变换
    计算机图形学-图形系统
    Unix&Linux大学教程 读书笔记【1-3章】
    Mixins 混入选项操作
    watch监控,对比新值和旧值做出相应判断
    用.native修饰器来对外部组件进行构造器内部方法的调用以及用原生js获取构造器里的方法
    methods 方法选项
    computed 计算选项
  • 原文地址:https://www.cnblogs.com/sansan/p/3595785.html
Copyright © 2020-2023  润新知