[记录] 数据结构----顺序表的实现

#include <iostream>
#include<windows.h>//exit 头文件
using namespace std;
#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量

class SqList{
private:
    int *elem;//存储空间基址 (可以不一定是int
    int length;//顺序表长度
    int listsize;//顺序表最大长度
public:
    SqList();
    ~SqList();
    void CreatList(int a[],int);//由a数组中的元素建造顺序表
    void DispList();
    int getLength();
    bool searchLocal(int i,int &e);//查找第i个位置的元素值
    int searchElem(int e);
    bool ListInsert(int i,int e);
    bool ListDelete(int i,int&e);// 用e返回元素值
    void ReverseList(SqList &L);//翻转顺序表
    void emptyList();//置空表
};

SqList::SqList(){
    elem = new int[LIST_INIT_SIZE];
    if(!elem) exit(-1);//在一些编译器中new分配空间失败会直接报错,无返回值,此判断无意义
    listsize = LIST_INIT_SIZE;
    length = 0;
}
SqList::~SqList(){
}
//由a数组中的元素建造顺序表(时间复杂度O(n))
void SqList::CreatList(int a[],int n){
    length = n;
    for(int i=0; i<n; i++)
        elem[i] = a[i];
}
//输出顺序表L中所有元素(时间复杂度O(n))
void SqList::DispList(){
    for(int i=0; i<length; i++)
        cout << elem[i] << " ";
    cout << endl;
}
int SqList::getLength(){
    return length;
}
//查找第i个位置的元素值(时间复杂度O(1)) 用e来存放元素值 而返回值用来判断查找是否合理
bool SqList::searchLocal(int i,int &e){ //!引用
    if(i<1 || i>length) return false;
    e = elem[i-1];
    return true;
}
//查找元素所在位置(时间复杂度O(n))
int SqList::searchElem(int e){
    int i;
    for(i=0;i<length;i++)
        if(elem[i]==e){
            return i+1;
            break;//找到第一个位置就行
        }
    return 0;//表示没找到
}
//顺序表的插入(移动元素数n-i+1)(时间复杂度O(n))
bool SqList::ListInsert(int i,int e){
    int k;
    if(i<1 || i>length+1)
        return false;//插入位置不正确
    for(k=length-1;k>=i;k--)
        elem[k+1] = elem[k];
    elem[i-1]=e;
    length++;
    return true;
}
//顺序表的删除(时间复杂度O(n))
bool SqList::ListDelete(int i,int&e){
    if(i<1 || i>length)
        return false;
    int k;
    e = elem[i-1];//保存删除元素
    for(k=i-1;k<length-1;k++)
        elem[k]=elem[k+1];
    length--;
    return true;
}
//翻转顺序表
void SqList::ReverseList(SqList &L){
    int temp;
    for(int i=0;i<length/2;i++){
        int temp = elem[i];
        elem[i] = elem[length-i-1];
        elem[length-i-1] = temp;
    }
}
void SqList::emptyList(){
    length=0;
}
int main(){
    SqList list1;
    int arr[3] = {3,4,5};
    list1.CreatList(arr,3);//建表
    list1.DispList();//输出表
    cout << "list1 length is " << list1.getLength() << endl;
    // 求第二个位置的元素
    int e;
    list1.searchLocal(2, e);
    cout <<"The 2 local is elem " << e << endl;
    // 查找元素5的位置
    cout << "The elem 5 local is " << list1.searchElem(5) << endl;
    // 在位置4插入元素6
    list1.ListInsert(4, 6);
    list1.DispList();
    // 在位置1删除数据元素
    int a;
    list1.ListDelete(1,a);
    list1.DispList();
    list1.ReverseList(list1);
    list1.DispList();
    return 0;
}



猜你喜欢

转载自blog.csdn.net/uttues_l/article/details/80067058