最近在复习数据结构的时候,重新学习了线性表中的顺序表(数组)。作为练手,把它的一些基本操作实现了,以后可能用得到,现记录如下。
//顺序表描述
#define Maxsize 50
typedef struct
{
int data[Maxsize]; //直接分配
int length; //当前的长度
}Sqlist;
typedef struct
{
int *data; //动态分配
int maxsize;
int length;
}Seqlist;
//在L的第pos个位置(pos从1开始)插入e
bool ListInsert(Sqlist &L,int pos,int e)
{
if(pos>L.length+1 || pos<1 )
return false;
if(L.length >= Maxsize)
return false;
for(int i = L.length;i>=pos;--i)
{
L.data[i] = L.data[i-1];
}
L.data[pos-1] = e;
++L.length;
return true;
}
//删除L中第pos的位置,并返回删除的值
bool ListDelete(Sqlist &L,int pos,int &e)
{
if(pos>L.length || pos<1)
return false;
e = L.data[pos-1] ; //e为返回的删除元素的值
for(int i = pos;i<L.length;++i)
{
L.data[i-1] = L.data[i]; //元素前移
}
--L.length; //元素数量减1
return true;
}
//查找L中第一个为e的位置,如果不存在则返回-1
int LocateElem(Sqlist L,int e)
{
for(int i = 0;i<L.length;++i)
{
if(L.data[i] == e)
return i+1; //返回元素下标加1,即第i+1个位置
}
return -1;
}
//打印输出
void PrintList(Sqlist L)
{
for(int i = 0;i<L.length;++i)
{
if(0 == i)
cout<<L.data[i];
else
cout<<" "<<L.data[i];
}
cout<<endl;
}
//初始化表
void InitList(Sqlist &L)
{
L.length = 0;
}