• 顺序表 有序表


    template <typename T>
    class SeqList
    {
    protected:
        T *data;
        int maxSize;
        int last;
    
        void reSize(int newSize)    //ok
        {
            maxSize = newSize;
            T *temp = new T[maxSize];
    
            for (int i = 0; i <= last; i++)
                temp[i] = data[i];
            delete[] data;
            data = temp;
        }
    
    public:
        SeqList(int sz = defaultSize) : maxSize(sz), last(-1) //ok
        {
            data = new T[maxSize];
        }
    
        SeqList(SeqList<T> &L)    //ok
        {
            maxSize = L.maxSize;
            last = L.last;
            data = new T[maxSize];
            for (int i = 0; i <= last; i++)
                data[i] = L.data[i];
        }
    
        ~SeqList() { delete[] data; }    //ok
    
        int Size() const { return maxSize; } //ok
    
        int Length() const { return last + 1; }    //ok
    
        int Search(T &x, int l = 0, int r = -1) const    //ok
        {
            if(r == -1) r = last;
            
            int p = (l + r) >> 1;
            if(l == r) return data[l] == x ? l + 1 : 0; 
            else if(data[p] >= x) return Search(x, l, p);
            else if(data[p] < x) return Search(x, p + 1, r); 
        }
    
        int Locate(int i) const // ok
        {
            if(i >= 1 && i <= last + 1) return i;
            return -1;
        }
    
        bool getDate(int i, T &x) const    //ok
        {
            if (i > 0 && i <= last + 1)
            {
                x = data[i - 1];
                return true;
            }
            else return false;
        }
    
        void setData(int i, T &x)    //ok
        {
            if (i > 0 && i <= last + 1) data[i - 1] = x;
        }
    
        bool Insert(T &x) //ok
        {
            int p = ++last;
            while(p && data[p - 1] > x) data[p] = data[p-- - 1]; 
            data[p] = x;
            return true;
        }
    
        bool Remove(T &x)    //ok
        {
            int t = Search(x);
            if(t != -1)
                for(int i = t; i < last; i++)
                    data[i] = data[i + 1];
            last--;
        }
    
        bool IsEmpty() { return (last == -1) ? true : false; }    //ok
    
        bool IsFull() { return (last + 1 == maxSize) ? true : false; }    //ok
    
        void input()    //ok
        {
            int n, x;
            cin >> n;
            for (int i = 0; i < n; i++)
            {
                cin >> x;
                Insert(x);
            }
        }
    
        void output()    //ok
        {
            cout << "{";
            for (int i = 0; i < last; i++)
                cout << data[i] << ", ";
            cout << data[last] << "}" << endl;
        }
    
        SeqList<T> operator = (SeqList<T> &L)    //ok
        {
            if (L.last >= maxSize) reSize(L.maxSize);
            last = L.last;
            for (int i = 0; i <= last; i++)
                data[i] = L.data[i];
        }
    };

     自己瞎写的(毕竟没怎么听过课...)改进的话等下次老师讲评时注意一下

  • 相关阅读:
    数据表格
    数据表格
    数据表格
    布局
    表单
    表单
    Java知识点梳理——继承
    Java知识点梳理——抽象类和接口
    面试心得与总结—BAT、网易、蘑菇街
    Java知识点梳理——多态
  • 原文地址:https://www.cnblogs.com/QQ-1615160629/p/5911283.html
Copyright © 2020-2023  润新知