线性表的顺序存储结构
记录本人学习数据结构的历程,现将分享总结出来的对线性表顺序存储结构的操作。
直接放代码,希望对大家学习线性表的顺序存储结构有所帮助。
#include<iostream.h>
#define MAXSIZE 100
typedef int TypeElem;
typedef struct
{
TypeElem* elem;
int length;
}SqList;
//顺序表的初始化
void init_SqList( SqList &L)
{
L.elem=new TypeElem[MAXSIZE];
if(L.elem!=NULL)
{
L.length=0;
cout<<"动态分配空间成功!!";
}
else
cout<<"动态分配空间失败!";
}
//为创建的表赋上其长度和内容
void creat_SqList(SqList &L)
{
int i;
cout<<"请输入需要定义的表的长度为:";
cin>>L.length;
cout<<"请输入一组数:";
for(i=0;i<L.length;i++) //为表中添上元素
{
cin>>L.elem[i];
}
}
//输出被添上内容的线性表
void printf_SqList(SqList L)
{ cout<<"输出赋上内容的线性表如下:";
for(int i=0;i<L.length;i++) //输出刚添上元素的线性表
{
cout<<L.elem[i]<<'\t';
}
}
//查找表中的一个元素,第一种按位置查找,并记录下该元素在线性表中的位置
int select_onelem(SqList L,TypeElem &t,int &w )
{
int i;
for(i=0;i<L.length;i++)
{
if(t==L.elem[i])
return w=i+1;
}
}
//第二种方法直接查找表中的第i个位置上的元素,并且利用函数返回这个位置上的元素
TypeElem select_ilocaelem(SqList L,TypeElem &x,int &i )
{
int j;
//检查i的位置是否合法
if(i<1||i>L.length)
{
return 0;
}
else
{
for(j=0;j<L.length;j++)
{
if((j+1)==i)
{
x=L.elem[j];
return x;
}
}
}
}
//在线性表中第i个位置插入一个元素
void insert_melem(SqList &L,TypeElem &m,int a)
{
int j;
//判断插入的位置是否合法
if(a<1||a>L.length+1)
cout<<"插入的位置不合法!!";
else if(L.length==0)//判断表是否是空表
{
cout<<"该表是空表!";
}
else
{
for(j=L.length-1;j>=a-1;j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[a-1]=m;
L.length++;
}
cout<<"输出最终插入元素的这个线性表如下:"<<endl;
printf_SqList(L);
}
//删除一个指定位置b的元素n
void delete_nelem(SqList &L,int b)
{
int j;
//判断插入的位置是否合法
if(b<1||b>L.length+1)
cout<<"删除的位置不合法!!";
else if(L.length==0)//判断表是否是空表
{
cout<<"该表是空表!";
}
else
{
for(j=b;j<L.length;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length--;
}
cout<<"输出最终删除元素后的这个线性表如下:"<<endl;
printf_SqList(L);
}
//主函数
void main()
{
SqList L;
TypeElem t,x,m;
int w=0,i,a,b; //记录查找的元素在线性表中的位置 //查找第i个位置上的元素并且返回这个位置上的这个元素
init_SqList(L);
creat_SqList(L);
printf_SqList(L);
cout<<"请输入要查找的元素是:";
cin>>t;
w=select_onelem(L,t,w);
if(w==0)
cout<<"该表中没有所需查找的这个元素";
else
cout<<"查找的该数在表中的位置是:"<<w<<endl;
cout<<"请输入要查找的位置是:"<<endl;
cin>>i;
x=select_ilocaelem(L,x,i);
if(x==0)
cout<<"该查找的位置不合法!!";
else
cout<<"该位置对应的元素是:"<<x<<endl;
cout<<"请输入要插入的这个元素是:";
cin>>m;
cout<<"请输入要插入元素的位置是多少:";
cin>>a;
insert_melem(L,m,a);
cout<<"请输入要删除的位置是:";
cin>>b;
delete_nelem(L,b);
}
}
直接附上运行的效果图:
PS:该文章所有版权归个人所有,允许转载,目前只总结对线性表顺序存储结构的一些操作,并没有将其与链式存储结构进行比较,后续会继续更新。若有不同想法的小伙伴们欢迎私信,文章不免会有瑕疵,还请大家多多指正,待我确认后会作出相应修改。
更多精彩内容请关注公众号:干货分享录