类的声明
一般类的声明在头文件中进行,类中成员函数的实现在源文件中进行
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--