线性表的顺序存储(c++)

#include<iostream>
using namespace std;
const int MAX=100;
template <typename T>
class SeqList
{
private:
    T data[MAX];
    int list;//指向最后一个元素的位置
public:
    SeqList();//初始化
//使用的是数组 T data[MAX],这是一个静态分配的数组,不需要使用 new 进行动态内存分配。
    T FindKth(int key);//返回对应位置元素
    int Find(T elem);//查找对应元素位置
    bool Insert(int key,T elem);//插入
    bool Delete(int key);//删除
    int Length();//返回长度
    void Print();//输出

};
template <typename T>
SeqList<T>::SeqList(){
    list=-1;
}
template <typename T>
int SeqList<T>::Find(T elem){
    int i=0;
    while (i<=list && data[i]!=elem)    i +=1;
    if (i > list)   return -1;
    else return i+1;
}
template <typename T>
T SeqList<T>::FindKth(int key){
    if (key >list+1 || key < 0)
    {
        return 0;
    }
    return data[key];
}

template <typename T>
bool SeqList<T>::Insert(int key,T elem){
    if (key <1 || key > list+2 || list==MAX-1)
    {
        //位置不合法+表满
        return 0;
    }
    for (int i = list; i >= key; i--)
    {
        data[i+1]=data[i];
    }
    data[key]=elem;
    list +=1;
    return -1;
    
    
}

template <typename T>
int SeqList<T>::Length(){
    return list+1;
}

template <typename T>
bool SeqList<T>::Delete(int key){
    //合法性检查:
    if (key > list+1 || key<1)
    {
        return 0;
    }
    for (int i = key; i <= list; i++)
    {
        data[i-1]=data[i];
    }
    list -=1;
    return 1;
    
}

template <typename T>
void SeqList<T>::Print(){
    for (int i = 0; i <= list; i++)
    {
        cout<<data[i]<<" ";
    }
    cout<<endl;
    
}

int main(){
    SeqList<int> ls;
    for (int i = 0; i < 5; i++)
    {
        ls.Insert(i,i);
    }
    cout<<ls.Length()<<endl;
    ls.Print();
    ls.Delete(2);
    ls.Print();
    cout<<ls.Find(4)<<endl;
    cout<<ls.FindKth(1)<<endl;



}

  

posted @ 2023-11-19 15:08  44556677  阅读(8)  评论(0)    收藏  举报