zoukankan      html  css  js  c++  java
  • C++实现顺序表


    #include<iostream>
    using namespace std;

    typedef int DataType;

    class SeqList
    {
    public:
        SeqList()
            :_array(NULL)
            , _size(0)
            , _capacity(0)
        {
            cout << "SeqList()" << endl;
        }

        SeqList(DataType* array, size_t size)
            :_array(new DataType[size])
            , _size(size)
            , _capacity(size)
        {
            cout << "SeqList()" << endl;
            memcpy(_array, array, sizeof(DataType)*size);
        }

        ~SeqList()
        {
            if (_array)
            {
                delete[] _array;
                _array = NULL; //?

                _size = 0;
                _capacity = 0;
            }
            cout << "~SeqList()" << endl;
        }


        SeqList(const SeqList& s)
            :_array(NULL)
            , _size(0)
            , _capacity(0)
        {
            SeqList tmp(s._array, s._size);
            tmp.Swap(*this);
        }


        SeqList& operator=(SeqList s)
        {
            s.Swap(*this);

            return *this;
        }

    public:
        void Print()
        {
            for (int i = 0; i < _size; ++i)
            {
                cout << _array[i] << " ";
            }

            cout << endl;
        }

        void PushBack(const DataType& x)
        {
            _CheckCapacity(_size + 1);

            _array[_size++] = x;
        }

        void PopBack()
        {
            _size--;
        }
        void PushFront(const DataType& x)
        {
            _CheckCapacity(_size + 1);
            _size++;
            for (int i = _size; i >= 0; i--)
            {
                _array[i] = _array[i-1];
            }
            _array[0] = x;
        }
        void PopFront()
        {
            for (int i = 1; i < _size; ++i)
            {
                _array[i - 1] = _array[i];
            }
            _size--;
        }

        void Insert(size_t pos, const DataType& x)
        {
            for (int i = _size; i >= pos; --i)
            {
                _array[i+1] = _array[i];
            }
            _array[pos] = x;
            ++_size;
        }
        int Find(const DataType& x)
        {
            for (int i = 0; i < _size; ++i)
            {
                if (_array[i] == x)
                    return i;
            }
            printf("没有这个数!");
            return 0;
        }
        void Erase(size_t pos)
        {
            for (int i = pos; i < _size; ++i)
            {
                _array[i] = _array[i + 1];
            }
            _size--;
        }

        DataType& operator[](size_t index)
        {
            assert(_array);
            assert(index < _size);

            return _array[index];
        }

        size_t Size()
        {
            return _size;
        }

        size_t Capacity()
        {
            return _capacity;
        }

        void Reserve(size_t size)
        {
            _CheckCapacity(size);
        }

        void Clear()    
        {
            _size = 0;
        }

        void Swap(SeqList& s)
        {
            std::swap(_array, s._array);
            std::swap(_size, s._size);
            std::swap(_capacity, s._capacity);
        }

        // 怎么样是释放空间??

    private:
        void _CheckCapacity(size_t size)
        {
            if (size > _capacity)
            {
                _capacity = size > 2 * _capacity ? size : 2 * _capacity;

                DataType* tmp = new DataType[_capacity];
                memcpy(tmp, _array, sizeof(DataType)*_size);
                delete[] _array;

                _array = tmp;
            }
        }

    private:
        DataType* _array;
        size_t _size;
        size_t _capacity;
    };



    void Test1()
    {
        int array[5] = { 0, 1, 2, 3, 4 };
        SeqList s1(array, 5);
        s1.Print();

        s1.PushBack(5);
        s1.PushBack(6);
        s1.Print();

        s1.Clear();
        s1.Print();
        cout << s1.Capacity() << endl;

        {
            SeqList tmp;
            tmp.Swap(s1);
        }

        cout << s1.Capacity() << endl;

        //SeqList s2(s1);
    }

    void Test2()
    {
        int array[5] = { 0, 1, 2, 3, 4 };
        SeqList s1(array, 5);
        s1.Print();

        SeqList s2(s1);
        s2.Print();

        SeqList s3;

        s3 = s1;
        s3.Print();
    }

    void Test3()
    {
        int array[5] = { 0, 1, 2, 3, 4 };
        SeqList s1(array, 5);
        s1.Print();

        /*s1.PopBack();
        s1.Print();*/

        s1.PushFront(6);
        s1.Print();
        
        s1.PopFront();
        s1.Print();

        s1.Insert(2, 10);
        s1.Print();

        s1.Find(9);

        s1.Erase(2);
        s1.Print();
    }

    void main()
    {
        Test3();
    }

  • 相关阅读:
    【Java 学习笔记】 HashMultimap(guava)
    [论文笔记] Analysis of Integration Models for Service Composition (ACM workshop, 2002)
    浅谈论文笔记管理方法
    [论文阅读] 论文阅读2篇(COMPSAC09, JNW09)
    [论文笔记] Monitoring Dependencies for SLAs: The MoDe4SLA Approach (SCC, 2008)
    [论文收集] CEC (Commerce and Enterprise Computing) 2009相关论文列表
    [论文笔记] Service Provenance in QoSAware Web Service Runtimes (ICWS, 2009)
    [资料整理] Decentralized Services Orchestration, Choreography相关的几篇论文
    [论文收集] Clustering Algorithm在Web Service领域应用相关论文
    [论文笔记] A minimal role mining method for the web service composition (2009)
  • 原文地址:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/5793082.html
Copyright © 2011-2022 走看看