顺序表输入、遍历、插入、删除
编制C/C++程序,利用顺序存储方式实现下列功能:从键盘输入数据建立一个线性表(整数),并输出该线性表;然后根据屏幕提示,进行数据的插入或删除等操作,并在插入或删除数据后输出线性表。如图所示:
【程序代码】
#include <iostream>
using namespace std;
const int MaxSize=100;
template <typename DataType>
//定义模板类
class SeqList
{
public:
SeqList(); //定义空表
SeqList(DataType a[],int n);//建立长度为n的顺序表
// ~SeqList();//析构函数
int Length(); //求线性表的长度
// int Get(int i );//按位查找 查找第i个元素的值
// int Locate(int x);//按值查找查找值为X的元素
void Insert(int i ,DataType x);//插入操作 在第i个元素的值
int Delete(int i ); //删除操作 删除第i个元素
// int Empty();//判断线性表是否为空
void PrintList();//遍历操作 按序号依次输出各元素
private:
DataType data [MaxSize];
int length;
};
// 初始化
template<typename DataType>SeqList<DataType>::SeqList() {
length=0;
}
//建立顺序表
template<typename DataType>
SeqList<DataType>::SeqList(DataType a[],int n)
{
if(n>MaxSize)throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
//遍历操作
template<typename DataType>
void SeqList <DataType>::PrintList(){
for(int i =0;i<length;i++)
cout<<data[i]<<" ";
cout<<endl;
}
// //按位查找
// template<typename DataType>
// int SeqList<DataType>::Get(int i)
// {
// if (i<1||i>length) throw"查找位置非法";
// else return data[i-1];
// }
// //按值查找
// template<typename DataType>
// int SeqList<DataType>::Locate(int x)
// {
// for(int i=0;i<length;i++)
// if(data[i]==x)return i+1;
// return 0;
// }
//插入操作
template<typename DataType>
void SeqList<DataType>::Insert(int i ,DataType x)
{
if(length==MaxSize) throw"上溢";
if(i<1 || i>length+1)throw"插入位置错误";
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
//删除操作
template<typename DataType>
int SeqList<DataType>::Delete(int i)
{
int x;
if(length==0) throw "下溢";
if(i<1||i>length)throw"删除位置有误!";
x=data[i-1];
for(int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
//主函数
int main(){
int r[MaxSize],a,x,b; //r[]为数组 a为输入的个数 X插入的元素 b插入的位置
cout<<"请输入线性表的整数个数n:"<<endl;
cin>>a;
cout<<"顺序表初始化完成"<<endl;
cout<<"请输入线性表的各个元素:"<<endl;
for(int i=0;i<a;i++)
cin>>r[i];
//建立顺序表
SeqList<int >L(r,a);
cout<<"原线性表如下:"<<endl;;
//调用遍历函数操作
L.PrintList();
try{
cout<<"请输入要插入的元素及其插的位置:"<<endl;
cin>>x>>b;
L.Insert(b,x);
cout<<"插入之后的数组:";
L.PrintList();
} catch( char const *str){cout<<str<<endl; }
// cout<<"当前线性表的长度为:"<<L.Length()<<endl;
// cout<<"请输入查找的元素值:";
// cin>>x;
// i=L.Locate(x);
// if(0==i) cout<<"查找失败"<<endl;
// else cout<<"元素"<<x<<"的位置为:"<<i<endl;
// try
// {
// cout<<"请输入查找第几个元素值:";
// cin>>i;
// cout<<"第"<<i<<"个元素值是"<<L.Get(i)<<endl;
// }
// catch(char *str){cout<<str<<endl;}
// try{
// cout<<"请输入查找第几个元素值: ";
// cin>>i;
// cout<<"第"<<i<<"元素值是"<<L.Get(i)<<endl;
// }catch(char *str){cout<<str<<endl;}
try{
cout<<"请输入要删除的元素的位置:";
cin>>x;
L.Delete(x);
cout<<"删除之后的数组:"<<endl;
L.PrintList();
}catch(char const *str){cout<<str<<endl;}
cout<<"名字"<<endl;
system("pause");
return 0;
}