#include
#include
#include
typedef int Elemtype;//---------------便于修改数据类型(int可改为其他基本类型)
using namespace std;
//-------------类声明,可单独写在一个文件------------
class List_seq
{
public:
List_seq();
List_seq(int);
~List_seq();
void init();
void insert();
void printData();
void Delete();
void find();
void getLength();
void replace();
void clear();
private:
Elemtype *_p;
int _Maxsize;
int _length;
};
void Menu();
//-----------------主函数---------------
int main()
{
int n, choose = 0;
int i, x;
bool sub =true;
cout<<"请输入你要创建的表的最大长度:";
while(1)
{
cin>>n;
if (n==0)
{
cout<<"错误,请重新输入一个长度:";
}
else
break;
}
List_seq L(n);
cout<<"初始化中........"<
cout<<"初始化已完成!"<
{
Menu();//-------------输出一个菜单
cin>>choose;
//---------分支语句
switch( choose )
{
case 0:
sub = false;break;
case 1:
L.getLength();break;
case 2:
L.printData();break;
case 3:
L.insert();break;
case 4:
L.Delete();break;
case 5:
L.find();break;
case 6:
L.replace();break;
case 7:
L.clear();break;
case 8:
system("cls");break;
default:
break;
}
}
return 0;
}
//----------------------菜单函数--------------输出选择菜单---
void Menu()
{
cout<<"--------1,查看顺序表的长度---------"<
//---------------类及其成员函数的定义---------------
List_seq::List_seq(){}
List_seq::List_seq(int size):_Maxsize(size){}
List_seq::~List_seq(){}
//-------初始化函数------------------
void List_seq::init()
{
_length = 0;
_p = new int[_Maxsize];//---------------------动态分配数组大小------
}
//-----------------------------------------------------
void List_seq::insert()
{
int x;
while(true)
{
cout<<"请输入你要插入的元素(位置默认为尾部):";
cin>>x;
_p[_length] = x;
_length++;
char get;
cout<<"是否继续插入?(y/n?)"<
while(true)
{
cin>>get;
if(get=='n'||get=='N')
{
return;
}
else if(get!='y'&&get!='Y')
{
cout<<"没有这个选项!请重新输入(y/n?):";
}
else
break;
}
if (_length == _Maxsize)
{
char choose;
int add;
cout<<"不好啦,顺序表已满!是否要扩大容量呢?(y/n)";
cin>>choose;
if (choose == 'y'|| choose == 'Y')
{
int n;
cout<<"\n请问需要再增大多少容量:";
cin>>add;
n = _Maxsize;
_Maxsize = _Maxsize + add;
int *p = new int[_Maxsize];
for (int k=0; k
p[k] = _p[k];
}
}
else
{
cout<<"插入失败!"<
}
}
}
return;
}
//--------------------输出顺序表中的元素--------------
void List_seq::printData()
{
if (_length == 0)
cout<<"错误了,顺序表是空的,先插入至少一个元素吧!"<
{
cout<<"当前顺序表的元素为:"<
{
cout<<_p[i]<
}
}
//--------------------------------------------------------------
void List_seq::Delete()
{
int i;
char get;//----------用于接收用户输入以判断是否退出循环--------
while (true)
{
if (_length == 0)
{
cout<<"错误,顺序表为空,请先插入至少一个元素!"<
}
cout<<"请输入你要删除元素的位置:";
while (true)
{
cin>>i;
if (i>_length||i<=0)
{
cout<<"删除位置错误!请重新输入位置:";
}
else
{
cout<<"删除的元素值为:"<<_p[i-1]<
{
_p[j-1] = _p[j];
}
_length--;
break;
}
}
cout<<"是否继续删除?(y/n?)"<
{
cin>>get;
if(get=='n'||get=='N')
{
return;
}
else if(get!='y'&&get!='Y')
{
cout<<"没有这个选项!请重新输入(y/n?):";
}
else
break;
}
}
}
void List_seq::find()
{
int data;
int choose;
int wz =0;
cout<<"1,按元素查找位置"<
assert(choose==1||choose==2);
if (choose==1)
{
cout<<"请输入元素:";
cin>>data;
cout<<"这个元素的位置为:";
for (int i=0; i<_length; i++)
{
if (_p[i] == data)
{
wz = i;
cout< }
}
}
else
{
cout<<"\n请输入元素所在位置:";
cin>>data;
cout<<"\n这个元素为:"<<_p[data-1]<
}
}
void List_seq::getLength()
{
cout<<"当前顺序表的实际长度为\t"<<_length<
void List_seq::replace()
{
int i;//--------用来承装替代的位置
int x;//--------用来承装替代的元素
bool cho = true;//------跳出循环的条件
while (cho)
{
if (_length == 0)
cout<<"错误,顺序表为空,请先插入至少一个元素!"<
{
_p[i-1] = x;
}
}
}
void List_seq::clear()
{
delete _p;
int *p = new int[_Maxsize];
}
//--------此乃手写,尚有诸多不足之处,但尽量考虑到用户输入习惯,并带有简单错误处理能力
//功能:除基本功能外,支持增加容量,支持错误判断。