c++实现顺序表

冷暖自知 提交于 2019-12-02 01:50:10

类的声明

一般类的声明在头文件中进行,类中成员函数的实现在源文件中进行

1234567891011121314151617181920212223242526272829
using namespace std;typedef int dataType; //与上同样的道理,如果数据类型有变化,只需要修改此处即可class node{  public:      dataType data;};class sql{   public:       sql();       ~sql();       void (int n); //输入n个数值构造n个节点       void traverseSql();//遍历节点并输出       bool isEmpty();//判断线性表是否为空       bool isFull();//判断线性表是否为满       int getLength();//返回线性表当前长度       bool getElemByIndex(int i,dataType& elem);//按索引返回线性表中元素       bool getElemByElem(dataType data,int& elem);//按数值返回线性表中元素       bool insertSql(int n,dataType data);//按索引位置插入元素       bool insertSqlAtHead(dataType data);//在顺序表头插入元素       bool insertSqlAtEnd(dataType data);//在顺序表尾插入元素       bool delElemByIndex(int i);//按索引删除元素       bool delElemByElem(dataType data);//按元素值删除元素       bool delAllElem();//删除所有   private:    int length;//顺序表当前长度    node *elem;//顺序表首地址,类似于数组中数组名};

类的实现

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
#include <iostream>#include "sqlDef.h"#include <cstdlib>#define maxSize 10 //顺序表中元素最大元素个数using namespace std;sql::sql(){   elem=new elemType[maxSize];//申请连续的地址空间,并将首地址赋给elem   length=0;}sql::~sql(){    delete []elem;}void  sql::creatSql(int n){    if(n<1||n>maxSize){        cout<<"输入的数目不符合规范"<<endl;        exit(0);大专栏  c++实现顺序表ne">    }    for(int i=0;i<n;i++){        cout<<"输入第"<<i+1<<"个数据"<<endl;        cin>>elem[i].data;    }    length=n;};void sql::traverseSql(){    for(int i=0;i<length;i++){        cout<<elem[i].data<<' '<<endl;    }};bool sql::isEmpty(){    if(length==0)        return true;    else        return false;};bool  sql::isFull(){    if(length==maxSize)        return true;    else        return false;};int   sql::getLength(){    return length;};bool sql::getElemByIndex(int i,dataType& temp){//利用引用将值传出    if(i<0||i>length-1){        cout<<"范围越界"<<endl;        return false;    }    temp=elem[i].data;    return true;};bool sql::getElemByElem(dataType data,int&temp){    int i;    for(i=0;i<length;i++){        if(elem[i].data==data){        temp=i;        return true;        }    }        return false;};bool sql::insertSql(int n,dataType data){    if(n<0||n>length){        cout<<"插入范围越界"<<endl;        return false;    }    else if(length==maxSize){        cout<<"线性表已满"<<endl;        return false;    }    for(int i=length-1;i>=n;i--){        elem[i+1]=elem[i];    }//元素依次后移,再将数据插入,要注意i=length-1,再i递减到n,将n位置以后的数全部后移一个位置    elem[n].data=data;    length++;    return true;};bool sql::insertSqlAtHead(dataType data){    if(length==maxSize){        cout<<"线性表已满"<<endl;        return false;    }    for(int i=length-1;i>=0;i--){        elem[i+1]=elem[i];    }    elem[0].data=data;    length++;    return true;};bool sql::insertSqlAtEnd(dataType data){    if(length==maxSize){        cout<<"线性表已满"<<endl;        return false;    }    elem[length].data=data;    length++;    return true;};bool sql::delElemByIndex(int i){    if(i<0||i>=length){        cout<<"范围越界"<<endl;        return false;    }    for(int k=i;k<length;k++){        elem[k]=elem[k+1];    }    length--;    return true;};bool sql::delElemByElem(dataType data){    int i=0;    while(elem[i].data!=data&&i<length)        i++;    if(i==length){        cout<<"线性表中无此元素"<<endl;        return false;    }    for(int k=i;k<length;k++){        elem[k]=elem[k+1];    }    length--;    return true;};bool sql::delAllElem(){    if(length==0){        cout<<"线性表为空"<<endl;        return false;    }    length=0;    return true;};int main(){    sql sql0;    int temp,data=2;    sql0.creatSql(3);    sql0.traverseSql();//  sql0.getElemByElem(data,temp);//  cout<<temp<<endl;//  sql0.insertSql(2,10);//  sql0.insertSqlAtHead(9);//  sql0.insertSqlAtEnd(5);//  sql0.delElemByIndex(1);//  sql0.delElemByElem(5);//  sql0.delAllElem();//  cout<<sql0.getLength();    sql0.traverseSql();    system("pause");    return 0;}

顺序表在插入和删除时需要移动大量元素,时间复杂度为O(n),每次在插入和删除操作时,不要忘记了关键操作length++或者length--

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!