####顺序表的所有基本操作
#include<iostream>
using namespace std ;
#define MaxSize 25
typedef int DataType;
class SeqList //类
{
DataType list[MaxSize] ; //int型数组
int length ; //数组长度
public :
SeqList() { length = 0 ; } //返回顺序表长度的gouzao函数
void SLCreat(int n ) ; //在顺序表L中第i个位置插入元素x
void SLDelete(int i) ; //在第i个位置删除元素
void SLInsert(int i,DataType x);
DataType SLSum() ; //求和
void SLPrint() ; //打印
int SLIsEmpty() ; //判断是否为空集
DataType SLGet (int i) ;
} ;
//创建顺序表
void SeqList::SLCreat(int n )//遍历 一个一个往里塞
{
DataType x ;
cout << "请输入数据元素值:" ;
for ( int i = 0 ; i < n ; i++ )
{
cin >> x ;
list[i] = x ;
length++ ;
}
}
//i位置插入数据元素x
void SeqList::SLInsert(int i,DataType x)
{
int k ;
if ( length >= MaxSize )
cout << "表已满,无法插入" << endl ;
else if ( i < 0 || i > length )
cout << "参数i不合理!" << endl ;
else
{//从表末尾的数,遍历到第i个数,依次向后挪一位;到第i个数时 i插入
for (k = length ; k > i ; k--) //<= 下面 i=i-1 去掉
{
list[k] = list[k-1] ;
}
list[i] = list[i-1] ;
list[i] = x ;
length++ ;
}
}
//删除第i个位置的数据元素
void SeqList::SLDelete(int i) //void在最前面
{
int k ;
if ( !SLIsEmpty() )
cout << "表已空,无法删除!" << endl ;
else if ( i < 0 || i > length )
cout << "参数i不合理!" << endl ;
else
{//用第i+1个数,代替第i个数 依次向前挪一位
for ( k = i-1 ; k < length ; k++)
{
list[k] = list[k+1] ; }
length-- ;
}
}
int SeqList::SLIsEmpty()
{
if(length<=0)
return 1 ;
else
return 0 ;
}
void SeqList::SLPrint()
{
if ( !SLIsEmpty() )
{
cout << "空表!" << endl ;
}
else
for ( int i = 0 ; i < length ; i++ )
{
cout << list[i] << ' ' ;
}
cout << endl ;
}
DataType SeqList::SLSum()
{
int m = 0 ;
for ( int i = 0 ; i < length ; i++ )
{
m += list[i] ;
}
return m ;
}
//获取第 i 个位置的元素的数值
DataType SeqList::SLGet (int i) //直接获取
{
if (i<0||i>length)
{
cout<<"参数 i 不合理!"<<endl;
return 0;
}
else
return list[i-1];
}
int main()
{
SeqList mylist;
int i,n,flag=1,select;
DataType x;
cout<<" 1.建立顺序表\n";
cout<<" 2.求第 i 个位置上的数值\n";
cout<<" 3.在第 i 个位置前上插入数值元素 x\n";
cout<<" 4.删除第 i 个位置上的数值\n";
cout<<" 5.该顺序表上各元素之和\n";
cout<<" 6.输出显示\n";
cout<<" 7.退出\n";
cout<<"特别说明:第一次请选择 1,以后就不要选择 1 了!"<<endl;
while(flag)
{
cout<<"请选择: ";
cin>>select;
switch(select)
{
case 1:
cout<<"请输入顺序表长度:";
cin>>n;
mylist.SLCreat(n);
cout<<"顺序表为: ";
mylist.SLPrint();
break;
case 2:
cout<<"请输入位置 i: ";
cin>>i;
cout<<"第"<<i<<"个位置上的数值为: "<<mylist.SLGet (i)<<endl;
break;
case 3:
cout<<"请输入要插入元素的位置 i 和数值 x: ";
cin>>i>>x;
mylist.SLInsert (i,x);
mylist.SLPrint ();
break;
case 4:
cout<<"请输入要删除的数值的位置: ";
cin>>i;
mylist.SLDelete (i);
cout<<"删除后的顺序表为: ";
mylist.SLPrint ();
break;
case 5:
cout<<"求和的值:"<<mylist.SLSum()<<endl;
break;
case 6:
cout<<"顺序表为: ";
mylist.SLPrint ();
break;
case 7:
flag=0;
break;
}
}
return 0;
}