zoukankan      html  css  js  c++  java
  • Stack and Queue

    Stack

    typedef struct{
        int *elem;
        int length;
        int alloc_length;
    }stack;
    void stack_init(stack &s){
        s.length = 0;
        s.alloc_length = 4;
        s.elem = new int[s.alloc_length]; 
        assert(s.elem != nullptr);
    }
    void stack_dispose(stack &s){
        delete[] s.elem;
    }
    void stack_push(stack &s,int key){
        if(s.length == s.alloc_length){
            s.alloc_length *= 2;
            int *temp = s.elem;
            s.elem =  new int[s.alloc_length];
            assert(s.elem != nullptr);
            for(int i=0;i<s.length;i++){
                s.elem[i] = temp[i];
            }
            delete[] temp;
        }
        s.elem[s.length++] = key;
    }
    int stack_pop(stack &s){
        assert(s.length > 0);
        s.length--;
        return s.elem[s.length];
    }

    Queue

    typedef struct{
        int *elem;
        int size;
        int alloc_length;
    }Queue;
    void queue_init(Queue &s){
        s.size = 0;
        s.alloc_length = 4;
        s.elem = new int[s.alloc_length];
    }
    void queue_dispose(Queue &s){
        delete[] s.elem;
    }
    void queue_push(Queue &s, int key){
        if(s.size == s.alloc_length){
            s.alloc_length *= 2;
            int *t = s.elem;
            s.elem = new int[s.alloc_length];
            for(int i=0; i<s.size; i++){
                s.elem[i] = t[i];
            }
            delete[] t;
        }
        s.elem[s.size++] = key;
    }
    int queue_pop(Queue &s){
        assert(s.size > 0);
        int key = s.elem[0];
        //s.elem = s.elem + 1; 
        //can't do this way,if so,original s.elem will be lost,then we can't use delete[] s.elem in queue_dispose
        for(int i=0; i<s.size; i++){
            s.elem[i] = s.elem[i+1];//when i=s.size-1,the last element will be ereased
        }
        s.size--;
        return key;
    }

    重复项和索引项

    禁止重复项:

    • 旧项遗忘
    • 新项忽略

    特例:栈的元素为整数。

    typedef struct{
        int *elem;//store elements
        int *index;//tell if a certain element in stack
        int size;
        int alloc_size;
    }Stack;
    //新项忽略,easy
    void stack_push(Stack &s, int key){
        if(s.elem[key] == 1){
            return;
        }
        s.elem[s.size++] = key;
        s.index[key] = 1;
    }
    //旧项遗忘
    void stack_push(Stack &s, int key){
        if(s.elem[key] == 1){
            look_delete(s,key);
            s.elem[s.size] = key;
        }
        s.elem[s.size++] = key;
        s.index[key] = 1;
    }
  • 相关阅读:
    【kd-tree】bzoj2648 SJY摆棋子
    【kd-tree】bzoj3053 The Closest M Points
    【堆】【kd-tree】bzoj2626 JZPFAR
    【kd-tree】bzoj1941 [Sdoi2010]Hide and Seek
    【kd-tree】bzoj2850 巧克力王国
    【kd-tree】bzoj3489 A simple rmq problem
    【kd-tree】bzoj4066 简单题
    【二维莫队】【二维分块】bzoj2639 矩形计算
    【kd-tree】bzoj1176 [Balkan2007]Mokia
    【kd-tree】bzoj3290 Theresa与数据结构
  • 原文地址:https://www.cnblogs.com/bukekangli/p/4493395.html
Copyright © 2011-2022 走看看