数据结构--用C++实现顺序表

**

数据结构–用C++实现顺序表

**

Sequence List(Array):
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
顺序表为静态存储分配,需要事先确定容量

老师课上提供了一个class模板,如下:
顺序表模板

那么,我们现在可以根据这个模板开始造轮子了。代码实现思路很简单,按照上面提供的函数用自己的方法一步步完善就可以了。

为了使这个顺序表适用于不同类型的变量,避免重复造同一个轮子,我采用了template方法进行构建整个class类。

代码如下:
头文件TemplateSeqList.h

#ifndef SeqList_byNim
#define SeqList_byNim

#include<iostream>
using namespace std;

template<class T>
class SeqList
{
    public:
        //表头aLsit[0],表尾aList[length-1] 
        SeqList(const int size){    //创造一个新的顺序表,参数为表实例的最大长度 
            maxSize=size;
            aList=new T[maxSize];
            length=position=0;
        }   
        ~SeqList(){    //析构函数,用于消除该表实例
            delete [] aList;
        }
        void clear(){   //将顺序表存储的内容清除,成为空表
            delete [] aList;
            length=position=0;
            aList=new T[maxSize];
        }
        int len(){  //返回此顺序表的当前实际长度 
            return length;
        }
        bool append(const T value)  //在表尾添加一个元素value,表的长度加1
        {
            length++;
            aList[length-1]=value;
        }
        bool insert(const int pos,const T value)    //在位置pos上插入一个元素value,表的长度加1 
        {
            //pre-condition: 1<=pos<=length+1
            //post-condition:   Insert element value at location pos and add 1 to length of aList
            int j;
            if(length>=maxSize)
            {
                cout<<"OVERFLOW"<<endl;
                return false;
            }
            if(pos<1||pos>length+1)
            {
                cout<<"ERROR"<<endl;
                return false;
            }
            else
            {
                for(j=length-1;j>=pos-1;j--)
                {
                    aList[j+1]=aList[j];
                }
                aList[pos-1]=value;
                length++;
            }
            return true;
        }
        bool del(const int pos) //删除位置pos上的元素,表的长度减1
        {
            int j;
            if(pos<1||pos>length)
            {
                cout<<"ERROR\n";
                return false;
            }
            else
            {
                for(j=pos-1;j<length-1;j++)
                {
                    aList[j]=aList[j+1];
                }
                length--;
            }
        }
        bool setValue(const int pos,const T value)  //用value修改位置pos的元素值
        {
            aList[pos-1]=value;
        } 
        T getValue(const int pos)   //将位置pos的元素值返回到变量value中
        {
            return aList[pos-1];
        } 
        int getPos(const T value)   //查找值为value的元素,并返回第一次出现的位置
        {
            position=0;
            while(position<length)
            {
                if(aList[position]!=value)
                {
                    position++;
                }
                else
                {
                    return position+1;
                }
            }
            return -1;
        }
        void print()    //打印整个顺序表
        {
            cout<<"length="<<length<<endl;
            for(int i=0;i<length;i++)
            {
                if(i==0) cout<<aList[0];
                else{
                    cout<<','<<aList[i];
                }
            }
            cout<<endl;
        } 
    private:
        T *aList;   //私有变量,存储线性表的实例
        int length; //顺序表实例的当前长度 
        int maxSize;    //顺序表实例的最大长度 
        int position;   //当前处理位置 
};

#endif

具体的main函数调用方法就不贴出来了,自己对着函数接口试试吧~

使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值