数据结构-线性表

来源:互联网 发布:吸入麻醉药mac值 编辑:程序博客网 时间:2024/06/06 03:31

顺序表最主要的特点是可以进行 随机访问,即可以通过表头元素的地址和元素的编号(下标),在 O(1)的时间复杂度内找到指定的元素。

顺序表的不足之处是插入和删除操作需要移动大量的元素,从而保持逻辑上和物理上的连续性。


在代码里面:

~Vector() {    delete[] data;}

叫做析构函数。
析构函数是提供一个在对象删除前可以释放这个对象所占有的资源的机会


#include <iostream>#include <cstring>using namespace std;class Vector {private:    int size, length;    int *data;public:    Vector(int input_size) {        size = input_size;        length = 0;        data = new int[size];    }    ~Vector() {        delete[] data;    }    bool insert(int loc, int value) {        if (loc < 0 || loc > length) {            return false;        }        if (length >= size) {            return false;        }        for (int i = length; i > loc; --i) {            data[i] = data[i - 1];        }        data[loc] = value;        length++;        return true;    }    int search(int value) {        for (int i = 0; i < length; ++i) {            if (data[i] == value) {                return i;            }        }        return -1;    }    bool remove(int index) {        if (index < 0 || index >= length) {            return false;        }        for (int i = index + 1; i < length; ++i) {            data[i - 1] = data[i];        }        length = length - 1;        return true;    }    void print() {        for(int i=0;i<length;i++){            if(i>0){                cout<<" ";            }            cout<<data[i];        }        cout<<endl;    }};int main() {    Vector a(2);    cout << a.insert(0, 1) << endl;    cout << a.insert(0, 2) << endl;    a.print();    cout << a.remove(1) << endl;    a.print();    cout << a.search(0) << endl;    cout << a.search(1) << endl;    return 0;}

计蒜客练习答案:

顺序表的循环左移:
这里就是输出时左移而已

#include <iostream>#include <cstring>using namespace std;class Vector {private:    int size, length;    int *data;public:    Vector(int input_size) {        size = input_size;        length = 0;        data = new int[size];    }    ~Vector() {        delete[] data;    }    bool insert(int loc, int value) {        if (loc >= size) {            loc-=size;        }        for (int i = length; i > loc; --i) {            data[i] = data[i - 1];        }        data[loc] = value;        length++;        return true;    }    void print(int k) {        for(int i=k;i<length;i++){            if(i>k){                cout<<" ";            }            cout<<data[i];        }        for(int i=0;i<k;i++){            cout<<" "<<data[i];        }        cout<<endl;    }};int main() {    int n,k;    cin>>n>>k;    Vector a(n);    for(int i=0;i<n;i++){        int t;        cin>>t;        a.insert(i,t);    }    a.print(k);    return 0;}
0 0
原创粉丝点击