//南有乔木,不可休思
//2018.10.9
//顺序表(创建+查找+删除+插入)
/*预处理*/
#include<iostream>
#include<cstdlib>
#include<cmath>
#define ElemType int
#define LIST_INIT_SIZE 100
#define LIST_INCRE_SIZE 10
#define OK 1
using namespace std;
int compar(ElemType, ElemType);//比较两元素
class SqList//定义顺序表类
{
protected:
ElemType *List;//顺序表头
int List_Size;//顺序表长度
int Length;//顺序表元素个数
public:
void Inite_List();//初始化顺序表
void Input_List();//输入顺序表
void Location_Elem(ElemType element);//查找元素
int Delete_Elem(int location);//删除元素
int Insert_Elem(int location);//插入元素
void display_List();//输出顺序表
int return_len();//获取顺序表长度
};
/*成员函数 */
void SqList::Inite_List()//初始化顺序表
{
List = new ElemType[LIST_INIT_SIZE];
if (!List)
exit(OVERFLOW);
Length = 0;
List_Size = LIST_INIT_SIZE;
}
void SqList::Input_List()//输入顺序表
{
cout << "请输入需要元素个数:";
cin >> Length;
cout << "请依次输入元素:"<<endl;
for (int i=0; i < Length; i++)
{
cin >> List[i];
}
cout<<"输入成功!"<<endl;
}
void SqList::Location_Elem(ElemType element)//查找元素
{
int i = 0;
ElemType *pl;
pl = List;
while(i<Length&&!compar(element,*pl))
{
pl++;
i++;
}
if (*pl != element)
{
cout << "查无此数" << endl;
}else cout << "此数在第" << i + 1 << "位"<<endl;
}
int SqList::Delete_Elem(int location)//删除元素
{
ElemType *pd;
pd = List;
for (int i=1;i<location;i++)
{
pd++;
}
for (int j=location;j<Length;j++)
{
pd = (pd + 1);
}
Length--;
return OK;
}
int SqList::Insert_Elem(int location)//插入元素
{
ElemType *Elem;
ElemType elem;
cout<<"请输入元素:";
cin>>elem;
if (Length == List_Size)
{
Elem = new ElemType[LIST_INIT_SIZE + LIST_INCRE_SIZE];
if(!Elem)
exit(OVERFLOW);
for(int i=0;i<Length;i++)
{
Elem[i] = List[i];
}
List = Elem;
delete Elem;
}
ElemType *p,*q;
q = &List[location-1];
for(p=&List[Length-1];p>=q;p--)
{
*(p+1) = *p;
}
*q = elem;
Length++;
}
void SqList::display_List()//输出顺序表
{
cout << "顺序表元素为:";
for(int i=0;i<Length;i++)
{
cout << List[i]<<" ";
}
cout << endl;
}
int SqList::return_len()//获取顺序表长度
{
return Length;
}
/*外部函数*/
int compar(ElemType m, ElemType n)//比较两元素
{
if(m == n)
{
return 1;
}else return 0;
}
int main()
{
SqList L;//设置表头
int i;
ElemType e;//元素定义
cout<<"创建顺序表ing..."<<endl;
L.Inite_List();
L.Input_List();
cout<<endl<<"创建成功!"<<endl;
L.display_List();
cout<<endl<<endl;
cout<<"进入查找环节"<<endl<<"请输入您要查找的信息:";
cin>>e;
L.Location_Elem(e);
cout<<endl;
L.display_List();
cout<<endl<<endl;
cout<<"进入删除环节"<<endl<<"目前顺序表中元素个数为:";
cout<<L.return_len()<<endl;
cout<<"请输入所要删除元素的位置:";
cin>>i;
L.Delete_Elem(i);
L.display_List();
cout<<endl<<endl;
cout<<"进入插入环节"<<endl<<"目前顺序表中元素个数为:";
cout<<L.return_len()<<endl;
cout<<"请输入所要插入元素的位置:";
cin>>i;
L.Insert_Elem(i);
L.display_List();
cout<<endl<<endl;
return 0;
}