零、说明
- 优势:编写方便、得到某位置元素方便
- 劣势:可能造成浪费空间、插入删除可能要移动大量元素
一、数据类型
int olist[MAXSIZE];
二、初始化
用数组第0位存储顺序表中元素数量
void Initial(int olist[MAXSIZE])
{
olist[0]=0;
}
三、插入与删除
- 插入:代码中有如下操作:判断满、(后移)、插入、元素个数++,
有两种插入
①将data插入到表中position的位置
void Insertelem(int olist[MAXSIZE],int data,int position)
{
if(olist[0]==MAXSIZE)//如果表中元素数量已达到最大
{
cout<<"FULL"<<endl;
return;
}
int i;
for(i=olist[0];i>=position;i--)//将元素从后往前依次后移
{
olist[i+1]=olist[i];
}
olist[position]=data;//把data放进去
olist[0]++;
}
[n+1]<-[n],[n]<-[n-1]…[pos+1]<-[pos]
因此上述循环中的i从slist[0](即n)到position(即pos)
②输入表中元素,直接插入到尾部
void Insertelem(int olist[MAXSIZE],int data)
{
if(olist[0]==MAXSIZE)
{
cout<<"FULL"<<endl;
return;
}
olist[olist[0]+1]=data;
olist[0]++;
}
- 删除:代码中有如下操作:存储那个位置的元素、(前移)、元素个数–
删除位于position位置的元素的同时返回这个元素
int deleteelem(int olist[MAXSIZE],int position)
{
int i,ret;
ret=olist[position];
for(i=position+1;i<=olist[0];i++)//将元素从前往后依次前移
{
olist[i-1]=olist[i];
}
olist[0]--;
return ret;
}
[pos]<-[pos+1],[pos+1]<-[pos+2]…[n-1]<-[n]
因此上述前移循环中的i从position+1(即pos+1)到slist[0](即n)
四、搜索
挨个比较,返回位置
int Search(int olist[MAXSIZE],int data)
{
int i,pos;
pos=-1;//如果没有搜索到,就直接返回-1,说明没找到
for(i=1;i<=olist[0];i++)//注意,slist[0]是表中元素个数
{
if(olist[i]==data)
{
pos=i;
break;
}
}
return pos;
}
五、其他操作
- 清空表:直接
void Clear(int olist[MAXSIZE])
{
olist[0]=0;
}
- 遍历
void Traverse(int olist[MAXSIZE])
{
if(olist[0]==0)
{
cout<<"EMPTY"<<endl;
return;
}
int i;
for(i=1;i<=olist[0];i++)
{
cout<<olist[i]<<' ';
}
cout<<endl;
}
- 得到某个位置的元素
直接读取数组对应位置 - 求表长
表长即为slist[0]
六、使用
int main()
{
int a[MAXSIZE];
Initial(a);
...
}
Initial之后即可使用