顺序表实现顺序表合并且升序排列

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/**************************************************************************
Ex1_01 SeqList.cpp
//顺序表类的定义
**************************************************************************/

#include //输入输出流头文件声明
using namespace std; //声明要使用std名空间
const int defaultSize=20; //顺序表默认最大可容纳表项数
class SeqList //顺序表类的声明
{
private:
int *data; //存放数组
int maxSize; //顺序表最大可容纳表项数
int last; //当前已存表项的最后位置(从0开始)
public:
SeqList(int sz=defaultSize); //构造函数
SeqList(SeqList &L); //复制构造函数
~SeqList(); //析构函数
void input(); //键盘输入,构建顺序表
void output(); //输出函数
int Size(){return maxSize;} //计算表最大可容纳表项个数
int Length(){return last+1;} //计算表长
int Search(int &x); //搜素函数,返回表项序号
int Locate(int i); //定位第i个表项,返回表项序号
void setData(int i,int &x); //用x修改第i个表项的值
bool getData(int i,int &x); //去第i个表项的值
bool Insert(int i,int x); //在第i个表项后插入
bool Remove(int i,int &x); //删除第i个表项
bool IsEmpty(); //判断空否;若为空返回true,若不为空返回false
bool IsFull(); //判断满否;慢则返回true,否则返回false
void Merge(SeqList &la,SeqList &lb);//顺序表合并,且升序排列
void bubSort(SeqList &lc); //冒泡排序
SeqList operator =(SeqList &L); //表整体复值

};
SeqList::SeqList(int sz) //***构造函数的定义,“::”为作用域析释符***
{
maxSize=sz; //默认顺序表最大容量(maxsize)为sz(即defaultSize)。
last=-1; //置表的实际长度为空
data=new int[maxSize]; //创建顺序表存储数组
if(data==NULL)
cout<<"内存分配错误!"<}

SeqList::~SeqList() //***析构函数定义***
{
delete[] data; //释放内存空间
}

void SeqList::input() //***输入函数定义***
{
int m=-1;
cout<<<"开始建立顺序表,请输入数据元素的个数:";
while(m<0 || m>maxSize-1) //判断输入元素个数是否在合法范围内
{
if(m!=-1)
cout<<"表元素个数输入有误,范围不能超过"<cin>>m;
}
last=m-1;
for(int i=0;i<=last;i++) //依次输入数据元素

{
cout<<"请输入第

"<cin>>data[i];
}

}

void SeqList::output() //***输出函数定义***
{
cout<<"顺序表中的元素为:";
for(int i=0;i<=last;i++) //依次显示数据
cout<cout<}

bool SeqList::Insert(int i,int x) //***插入函数定义***
{
if(last==maxSize-1)return false; //表满时插入失败
if(i<0||i>last+1) return false; //插入位置不合法
for(int j=last;j>=i;j--) //插入位置后的元素依次向后移一位
{
data[j+1]=data[j];
}
data[i]=x; //在插入位置后面插入数据‘x’
last++; //最后位置加一
return true; //插入成功

}

bool SeqList::Remove(int i,int &x) //***删除函数定义***
{
if(last==-1) return false; //表空
if(i<1||i>last+1) return false; //删除位置不合法
x=data[i-1]; //取出删除数据
for(int j=i;j<=last;j++) //依次前移,填补
{
data[j-1]=data[j];
}
last--; //最后位置减一
return true; //删除失败
}

bool SeqList::getData(int i,int &x) //***取值函数***
{
if(i<1||i>last+1) return false;
else
x=data[i-1];
return true;
}

void SeqList::setData(int i,int &x) //***修值函数***
{
if(i<1||i>last+1)
cout<<"位置不合法!"<if(i>0&&i<=last+1)
data[i-1]=x;

}

bool SeqList::IsEmpty()
{
if(last==-1) return true;
return false;
}

bool SeqList::IsFull()
{
if(last==maxSize-1) return true;
return false;
}

void SeqList::Merge(SeqList &la,SeqList &lb)//顺序表合并
{
int m,n,x;
n=la.Length();
m=lb.Length();
if(m+n<=maxSize)
for(int i=1;i<=m;i++)
{
lb.getData(i,x);
la.Insert(n,x);
}
else cout<<"顺序表溢出!";
la.bubSort(la);
}

void SeqList::bubSort(SeqList &lc) //冒泡排序函数
{
int k=lc.Length(),m;
for(int i=0;i{
for(int j=0;j{
if(data[i]<=data[j])
{
m=data[i];
data[i]=data[j];
data[j]=m;
}
}
}
}

int SeqList::Search(int &x) //搜素函数
{
for(int i=0;i<=last;i++)
if(data[i]==x) return i+1;
return 0;

}

int SeqList::Locate(int i) //定位函数
{
if(i>=1&&i<=last+1) return i;
return 0;
}

SeqList::SeqList(SeqList &lb)
{
maxSize=lb.Size();
last=lb.Length()-1;
data=new int[maxSize];
if(data==NULL)
cout<<"存储分配错误!"<int x;
for(int i=0;i<=last;i++)
{
lb.getData(i+1,x);
data[i]=x;
}
}

SeqList SeqList::operator =(SeqList &lb)
{
delete [] data;
maxSize=lb.Size();
last=lb.Length()-1;
data=new int[maxSize];
if(data==NULL)
cout<<"存储分配错误!"<int x;
for(int i=0;i<=last;i++)
{
lb.getData(i+1,x);
data[i]=x;
}
return lb;
}


相关文档
最新文档