顺序表的实现
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OVERFLOW -2
typedef struct{
int *elem;
int length;
}SqList;
bool InitList(SqList &L )
{
L.elem= new int[MAXSIZE];
if(!L.elem)
return false;
L.length = 0;
return true;
}
bool GetElem(SqList L ,int i, int &e)
{
if(i<1||i>L.length)
return false;
e=L.elem[i-1];
return true;
}
int LocateElem(SqList L,int e)
{
for(int i = 0;i < L.length;i++)
if(L.elem[i] == e)
return i+1;
return 0;
}
bool ListInsert(SqList &L,int i,int e)
{
if((i<1)||(i>L.length+1))
return false;
if(L.length==MAXSIZE)
return OVERFLOW;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i)
{
if((i<1)||(i>L.length))
return false;
for(int j = i;j <= L.length;j++)
L.elem[j-1]=L.elem[j];
L.length--;
return true;
}
void ClearList(SqList &L)
{
L.length = 0;
}
int main()
{
int n;
SqList L;
cout<<"简单顺序表的基本操作:\n"
<<"1、建立顺序表并存储若干个数\n"
<<"2、插入\n"
<<"3、删除\n"
<<"4、查找\n"
<<"5、取值\n"
<<"6、清空\n"
<<"0、退出系统\n";
while(1)
{
int k,l,m,t;
cout<<"输入上述序号,进行相关操作:";
cin>>n;
switch(n)
{
case 1:
if(InitList(L))
{
cout<<"顺序表创建成功\n";
cout<<"请输入储存元素的个数:";
cin>>t;
for(int i = 1;i <= t;i++)
ListInsert(L,i,i);
}
else
{
cout<<"顺序表创建失败,退出程序\n";
break;
}
break;
case 2:
cout<<"请输入插入位置与插入值:";
cin>>k>>l;
m=ListInsert(L,k,l);
if(!m)
{
cout<<"插入失败!\n";
if(m==OVERFLOW)
cout<<"初始分配空间已满!\n";
else
cout<<"插入位置不合法!\n";
}
break;
case 3:
cout<<"请输入要删除元素的位置:";
cin>>k;
m=ListDelete(L,k);
if(!m)
cout<<"删除位置不合法!\n";
break;
case 4:
cout<<"请输入要查找的值:";
cin>>l;
m=LocateElem(L,l);
if(!m)
cout<<"顺序表中没有这个值!\n";
else
cout<<m<<endl;
break;
case 5:
cout<<"请输入要取第几个值:";
cin>>k;
GetElem(L,k,m);
if(m==true)
cout<<m<<endl;
break;
case 6:
ClearList(L);
break;
case 0:
exit(0);
}
cout<<"当前顺序表:\n";
for(int i = 1;i <= L.length;i++)
{
int m;
GetElem(L,i,m);
cout<<m<<" ";
}
cout<<"\n";
}
return 0;
}
实现结果:
看完顺序表这章,脑子里很乱,就借鉴了学长的总结,学长代码可读性真好。
内容借鉴:
1、链接:https://blog.csdn.net/lesileqin/article/details/88078923
2、《数据结构》 严蔚敏