数据结构-顺序表的实现
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
#define ElemT int
#define Maxs 20
struct SeList
{
ElemT data[Maxs];
int listlen;
};
//初始化
void Initial_list(SeList *S)
{
memset(S->data,0,sizeof(S));
S->listlen=0;
cout<<"初始化完成!"<<endl;
}
//输入一个顺序表
bool cin_list(SeList *S,int n)
{
if(n<0||n>Maxs)
{
return false;
}
for(int i=0;i<n;i++)
{
cin>>S->data[i];
S->listlen++;
}
return true;
}
//插入元素
bool Insert_list(SeList *S,int m,ElemT e)
{
if(m<1||m>Maxs) return false;
for(int j=S->listlen;j>m-1;j--)
{
S->data[j]=S->data[j-1];
}
S->data[m-1]=e;
S->listlen++;
return true;
}
//查找元素
int search_list(SeList S,ElemT x)
{
for(int i=0;i<S.listlen;i++)
{
if(S.data[i]==x)
return i+1;
}
return false;
}
//删除元素
bool dele_list(SeList *S,int n)
{
if(n<1||n>S->listlen) return false;
for(int j=n;j<S->listlen;j++)
{
S->data[j-1]=S->data[j];
}
S->listlen--;
return true;
}
//打印顺序表
void print_list(SeList *S)
{
cout<<"---当前顺序表元素为---"<<endl;
for(int i=0;i<S->listlen;i++)
{
cout<<S->data[i]<<" ";
}
cout<<endl;
cout<<"当前表长度为:"<<S->listlen<<endl;
}
void cin_list_(SeList *S)
{
int n;
bool flag;
cout<<"请输入顺序表长度:"<<endl;
cin>>n;
cout<<"请输入元素:"<<endl;
flag=cin_list(S,n);
if(flag)
{
cout<<"创建成功!"<<endl;
print_list(S);
}
}
void insert_list(SeList *S)
{
int m;
ElemT e;
bool flag;
cout<<"请输入要插入元素的位置及值:"<<endl;
cin>>m>>e;
flag=Insert_list(S,m,e);
if(flag)
{
cout<<"插入元素成功!"<<endl;
print_list(S);
}
}
void Search_list(SeList *S)
{
int x; int flag;
cout<<"请输入你要查找的元素值:"<<endl;
cin>>x;
flag=search_list(*S,x);
if(flag)
{
cout<<"你要查找的元素位置在:"<<flag<<endl;
print_list(S);
}
}
void Dele_list(SeList *S)
{
int n;bool flag;
cout<<"请输入要删除元素的位置:"<<endl;
cin>>n;
flag=dele_list(S,n);
if(flag)
{
cout<<"删除元素成功!"<<endl;
print_list(S);
}
}
int main()
{
SeList S;
Initial_list(&S);
cin_list_(&S);
insert_list(&S);
Search_list(&S);
Dele_list(&S);
}
