• C++顺序表实现


    #include<iostream>
    using namespace std;
    
    template <class T>
    class LinearList
    {
    private:
        T* element;//存储顺序表的数组
        int MaxSize;//顺序表的最大长度
        int length;//顺序表的实际长度
    public:
        //构造函数,若申明顺序表实例时未给出表的最大长度,则最大长度为10
        LinearList(int);
        //析构函数
        ~LinearList(void)
        {
            delete[] element;
        }
        //判空
        bool ListEmpty(void) const
        {
            return length==0;
        }
        //判满
        bool ListFull(void) const
        {
            return length==MaxSize;
        }
        //返回表的长度
        int ListLength(void) const
        {
            return length;
        }
        //存取,将下标为k的节点字段赋值给item
        bool Find(int,T&) const;
        //查找,在表中查找字段值为item的结点并返回下标
        int Search(const T&) const;
        //删除,删除小标为k的节点后并将其字段值赋值给item
        bool Delete(int,T&);
        //插入,在下标为k的节点后插入字段为item的结点
        bool Insert(int,const T&);
        //打印,将顺序表内容按顺序打印到屏幕
        void Print(void);
    };
    //顺序表的构造函数
    template <class T>
    LinearList<T>::LinearList(int MaxListSize=10)
    {
        MaxSize=MaxListSize;
        element=new T[MaxSize];
        length=0;
    };
    //存取:将下表为k的结点的字段值赋值给item并返回true,若不存在返回false
    template <class T>
    bool LinearList<T>::Find(int k,T& item) const
    {
        if(k<0||k>length-1||length==0)
        {
            cout<<"unreasonable position or empty list!"<<endl;
            return false;
        }
        else
        {
            item=element[k];
            return true;
        }
    }
    //查找:在表中查找字段为item的结点并返回其下标;若表中没有item,则返回-1
    template <class T>
    int LinearList<T>::Search(const T& item) const
    {
        for(int i=0; i<length; ++i)
        {
            if(element[i]==item)
                return i;
        }
        return -1;
    }
    //删除:删除表中下标为k的结点,并将其值赋给item
    template <class T>
    bool LinearList<T>::Delete(int k,T& item)
    {
        if(Find(k,item))//若找到下标为k的结点,则将其后面所有结点均向前移动一个位置
        {
            for(int i=k+1; i<length; ++i)
                element[i-1]=element[i];
            length--;//表长度相应减一
            return true;
        }
        else
            return false;
    }
    //插入,在下标为k的结点后插入item
    template <class T>
    bool LinearList<T>::Insert(int k,const T& item)
    {
        if(ListFull())
        {
            cout<<"The List is Full!"<<endl;
            return false;
        }
        else if(k<0||k>length)
        {
            cout<<"The node does not exist!"<<endl;
            return false;
        }
        else
        {
            for(int i=length; i>k; --i)
            {
                element[i]=element[i-1];
            }
            element[k]=item;
            length++;
            return true;
        }
    }
    //打印
    template <class T>
    void LinearList<T>::Print()
    {
        for(int i=0; i<length; ++i)
        {
            cout<<element[i]<<"->";
        }
        cout<<endl;
    }
    //实例演示
    
    int main()
    {
        LinearList<char> list(16);
        char ch='a';
        for(int i=0; i<10; ++i)
        {
            list.Insert(i,ch);
            ch++;
        }
        list.Print();
        list.Delete(0,ch);
        list.Print();
        list.Insert(list.ListLength(),ch);
        list.Print();
        return 0;
    }
    

      

  • 相关阅读:
    Rocket core mem阶段异常的处理
    Rocket core pipeline int pc
    Rocket core pipeline int
    Rocket core take_pc
    Rocket core id阶段异常的处理
    Rocket core take_pc对流水线的影响
    Rocket core wb阶段异常的处理
    Rocket core 中断和异常的优先级
    Rocket core mem_reg_valid vs. mem_pc_valid
    Rocket core ctrl_killd的作用
  • 原文地址:https://www.cnblogs.com/liujw2114/p/10400512.html
Copyright © 2020-2023  润新知