顺序表是以数组为储存方式,将n(n>=0)个属性相同的数据元素组成的一个有限序列
顺序表存储结构的实现
①需要一个数组来存放数据
②需要一个整形变量来表示顺序表的长度
一、定义顺序表类型
#define LISTSIZE 100 //顺序表的长度
typedef int DataType; //顺序表的数据类型
typedef struct
{
DataType items[LISTSIZE];
int length;
}SqList;
二、初始化顺序表
int InitList(SqList &L)
{
L.length=0;
return 0;
}
三、求顺序表当前元素的个数
int ListLength(SqList L)
{
return L.length;
}
四、判断顺序表是否为空
int ListEmpty(SqList L)
{
if(L.length<=0)
{
return 1;
}
else
{
return 0;
}
}
五、顺序表的插入操作步骤
- 判断顺序表是否已满
- 检查插入位置是否合法,即1<=pos<=length+1
- 将最后一个元素到第pos个元素之间的元素向后移动一个位置
- 将新元素插入空出的位置上
- 顺序表的长度加一
int ListInsert(SqList &L,int pos,DataType item)
{
if(L.length>=LISTSIZE)
{
cout<<"顺序表以满,无法插入"<<endl;
return 0;
}
if(pos<=0||pos>L.length+1)
{
cout<<"插入位置无效!"<<endl;
return 0;
}
for(int i=L.length-1;i>=pos-1;i--)
{
L.items[i+1]=L.items[i];
}
L.items[pos-1]=item;
L.length++;
return 1;
}
六、顺序表的删除操作步骤
- 判表空
- 检查删除的位置,即1<=pos<=L.length
- 将pos+1到length的元素向前移动一个位置
- 顺序表的长度减一
int ListDelete(SqList &L,int pos,DataType *item)
{
if(ListEmpty(L))
{
cout<<"顺序表空,无法删除"<<endl;
return 0;
}
if(pos<=0||pos>L.length)
{
cout<<"删除位置无效!"<<endl;
return 0;
}
*item=L.items[pos-1];
for(int i=pos;i<L.length;i++)
{
L.items[i-1]=L.items[i];
}
L.length--;
return 1;
}
七,获取顺序表上的指定元素
int GetElem(SqList L,int pos,DataType *item)
{
if(ListEmpty(L))
{
cout<<"顺序表空,无法查找"<<endl;
return 0;
}
if(pos<=0||pos>L.length)
{
cout<<"查找位置无效!"<<endl;
return 0;
}
*item=L.items[pos-1];
return 1;
}
八、查找指定元素在顺序表中的位置
int Find(SqList L,DataType item)
{
if(ListEmpty(L))
{
cout<<"顺序表空,无法查找"<<endl;
return 0;
}
int pos=0;
while(pos<L.length&&item!=L.items[pos])
{
pos++;
}
if(pos<L.length)
{
return pos++;
}
else
{
return 0;
}
}
九、遍历顺序表
int TraverseList(SqList L)
{
for(int i=0;I<L.length;i++)
{
cout<<L.items[i]<<" ";
}
cout<<endl;
return 1;
}