动态顺序表的简单实现

来源:互联网 发布:java开发平台结构图 编辑:程序博客网 时间:2024/06/06 04:22

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的。只要知道了第一个元素的存储地址,就可以知道线性表中任何一个元素的存储地址

#include<iostream>using namespace std;template<class T>class Dsqlist{private:    T* data;    int length;    int capcity;public:    Dsqlist()//构造函数        :data(NULL)        , length(0)        , capcity(0)    {}    Dsqlist(const Dsqlist & list)//拷贝构造函数    : data(new int[list.length])        , length(list.length)        , capcity(list.capcity)    {        memcpy(data,list.data,sizeof(int)*length);    }    ~Dsqlist()//析构函数    {        if (data != NULL)        {            delete[] data;            length = 0;            capcity = 0;        }    }    void checkcap();//测容,扩容    void push_back(int x);//尾插    void print();    void insert(int i, int x);//指定位置插入    void llength();//有效元素的长度    void lcapcity();//总容量    void erase(int i);//指定位置的删除    void pop_back();//尾删    void find(int i);//查找指定位置的元素};template<class T>void Dsqlist<T>::checkcap()//测容,扩容{    if (length == capcity)    {        capcity += 2;        data =(int*) realloc(data, capcity*sizeof(int));    }}template<class T>void Dsqlist<T>::push_back(int x)//尾插{    checkcap();    data[length++] = x;}template<class T>void Dsqlist<T>::insert(int i,int x)//指定位置插入元素{    checkcap();    i--;    if (i<0 || i>length)        cout << "输入错误" << endl;    else    {        int j;        for (j = length; j > i; j--)//1 2 3 4            data[j] = data[j - 1];        length++;        data[i] = x;    }}template<class T>void Dsqlist<T>::erase(int i)//指定位置删除元素{    i--;    if (i<0 || i>length)        cout << "输入错误" << endl;    else    {        int j;        for (j = i; j<length; j++)            data[j] = data[j + 1];        length--;    }}template<class T>void Dsqlist<T>::pop_back()//尾删{    if (length == 0)        cout << "空表" << endl;    else        length--;}template<class T>void Dsqlist<T>::find(int i)//查找指定位置的元素{    i--;    if (i<0 || i>length)        cout << "输入错误" << endl;    else    cout <<"元素为:"<< data[i]<< endl;}template<class T>void Dsqlist<T>::llength()//有效元素的长度{    cout << "长度为:" << length << endl;}template<class T>void Dsqlist<T>::lcapcity()//总容量{    cout << "容量为:" << capcity << endl;}template<class T>void Dsqlist<T>::print()//输出{    if (data == NULL)        cout << "空表" << endl;    else    {        int i;        cout << "data: ";        for (i = 0; i < length; i++)            cout << data[i] << " ";        cout << endl;    }    }int main(){    Dsqlist<int> l1;    cout << "l1.push_back(2)" << endl;    cout << "l1.push_back(3)" << endl;    cout << "l1.push_back(4)" << endl;    l1.push_back(2);    l1.push_back(3);    l1.push_back(4);    l1.print();    cout << "l1.insert(1,9)" << endl;    l1.insert(1,9);    l1.print();    cout << "l1.pop_back();" << endl;    l1.pop_back();    l1.print();    cout << "l1.find(3)" << endl;    l1.find(3);    l1.print();    cout << "l1.erase(2)" << endl;    l1.erase(2);    l1.print();    l1.llength();    l1.lcapcity();    Dsqlist<int> l2(l1);    cout << "Dsqlist<int> l2(l1)后"<<endl;    l2.print();    return 0;}

结果如下
这里写图片描述

0 0
原创粉丝点击