您的位置:首页 > 理论基础 > 数据结构算法

线性表的线性存储及其运算

2013-05-18 13:28 323 查看
1、顺序表的基本特点:
表中各元素存放在连续的存储空间中
表中各元素在存储器中的存放顺序与他们在线性表中的逻辑顺序相同
2、顺序表的顺序存储
在C/C++中,存储空间的分配可以是静态的,也可以是动态的。为了提高存储空间的利用率、增强灵活性和实用性,对表示数组表的数组空间采用动态分配。在初始化顺序表时,申请一个指定大小数组空间,如果在使用过程中出现“表溢出”,则重新申请一个更大的空间;当表中元素很少或顺序表以及撤销时,则要释放多余的存储空间。
线性表的数组上界可以通过定义MaxSize给出,线性表的数据元素类型为ElemType,线性表的长度为len,存放线性表的数组指针为list,则顺序表的表结构定义如下:
typedef int ElemType;//自定义类型

struct SeqList
{
ElemType *list;//存储线性表的数组指针
int len;//当前线性表长度
int MaxSize;//线性表最大长度
};

3、顺序表的基本运算

查找
//在顺序表L中查找第一个关键字值等于value的元素
//若查找成功返回其位置,否则返回0
int FindList(SeqList &L,ElemType value)
{
for(int i=0;i<L.len;i++)
if(L.list[i].key==value)
return i;
return -1;
}

插入
//在指定位置插入元素
int insertList(SeqList &L,int i,const ElemType &item)
{
//表满的情况
if(L.len==MaxSize)
{
cout<<"overflow"<<endl;
exit(1);
}
//处理不合理的插入位置
if(i<0) i=0;
if(i>L.len-1)i=L.len;
//第i个元素至最后一个元素平移
for(int j=L.len-1;j>=i;j--)
L.list[j+1]=L.list[j];
//插入元素,返回表长度
L.list[i]=item;
return L.len++;
}

删除
//删除指定位置的元素
int DeleteList(SeqList &L,int i)
{
//空表,无法删除,退出
if(L.len==0)
{
cout<<"L is empty!"<<endl;
exit(1);
}
//无效的删除位置,退出
if(i<0||i>L.len-1)
{
cout<<"Wrong Location:"<<i<<endl;
exit(1);
}
//从i+1到最后一个位置的元素向前平移
for(int j=i+1;j<L.len;j++)
L.list[i-1]=L.list[i];
return L.len--;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息