顺序表的所有基本操作

####顺序表的所有基本操作

#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; 
}
发布了27 篇原创文章 · 获赞 16 · 访问量 1984

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/98117588