求C++高手帮忙变写个数据结构小程序

2025-02-27 14:08:45
推荐回答(1个)
回答1:

#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<<"初始化中........"< L.init();
cout<<"初始化已完成!"< while(sub)//-----------------条件循环,当sub为真时循环成立
{
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,查看顺序表的长度---------"< cout<<"--------2,查看顺序表中的元素-------"< cout<<"--------3,插入元素-----------------"< cout<<"--------4,删除元素-----------------"< cout<<"--------5,查找元素-----------------"< cout<<"--------6,替换元素-----------------"< cout<<"--------7,清空顺序表---------------"< cout<<"--------8,清屏---------------------"< cout<<"--------0,退出---------------------"<}

//---------------类及其成员函数的定义---------------
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;
}
}
}
return;
}

//--------------------输出顺序表中的元素--------------
void List_seq::printData()
{
if (_length == 0)
cout<<"错误了,顺序表是空的,先插入至少一个元素吧!"< else
{
cout<<"当前顺序表的元素为:"< for (int i=0; i<_length; i++)
{
cout<<_p[i]< }
}
}

//--------------------------------------------------------------
void List_seq::Delete()
{
int i;
char get;//----------用于接收用户输入以判断是否退出循环--------
while (true)
{
if (_length == 0)
{
cout<<"错误,顺序表为空,请先插入至少一个元素!"< return ;
}
cout<<"请输入你要删除元素的位置:";
while (true)
{
cin>>i;
if (i>_length||i<=0)
{
cout<<"删除位置错误!请重新输入位置:";
}
else
{
cout<<"删除的元素值为:"<<_p[i-1]< cout< for (int j=i; j<_length; j++)
{
_p[j-1] = _p[j];
}
_length--;
break;
}
}
cout<<"是否继续删除?(y/n?)"< while(true)//----------------无限循环---
{

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,按元素查找位置"< cout<<"2,按位置查找元素"< cin>>choose;
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< cout<<"最大容量为:\t\t"<<_Maxsize< cout<}

void List_seq::replace()
{
int i;//--------用来承装替代的位置
int x;//--------用来承装替代的元素
bool cho = true;//------跳出循环的条件
while (cho)
{
if (_length == 0)
cout<<"错误,顺序表为空,请先插入至少一个元素!"< else
{
_p[i-1] = x;
}
}

}

void List_seq::clear()
{
delete _p;
int *p = new int[_Maxsize];
}

//--------此乃手写,尚有诸多不足之处,但尽量考虑到用户输入习惯,并带有简单错误处理能力
//功能:除基本功能外,支持增加容量,支持错误判断。