线性表的顺序存储结构用一维数据实现。
优点:
1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间
2.可以快速地存取表中任意位置的元素
缺点:
1.插入和删除操作需要移动大量的元素。
2.当线性表长度变化较大时,难以确定存储空间的容量。
3.造成存储空间的“碎片”
#include<iostream>
using namespace std;
const int MAXSIZE = 20;
typedef int ElemType;
const int OK = 1;
const int ERROR =0;
const int TRUE = 1;
const int Flase =0;
typedef int Status;
typedef struct//线性表顺序存储结构
{
ElemType data[MAXSIZE];
int length;
}SqList;
Status GetElem(SqList L, int i, ElemType *e)//获得元素操作
{
if(0==L.length || i<1 || i>L.length)
return ERROR;
*e = L.data[i-1];
return OK;
}
/*初始条件:顺序线性表L已经存在,1<=i<=ListLength(L)*/
/*操作结果:在L中第i个位置插入新的元素e,L的长度加1*/
Status ListInsert(SqList *L,int i, ElemType e)
{
if(L->length == MAXSIZE)//表满
return ERROR;
if(i<1||i>L->length+1)//不在表长范围
return ERROR;
if(i<=L->length)
{
for(int k=L->length-1;k>=i-1;k--)//后移数据
L->data[k+1]=L->data[k];
}
L->data[i-1]=e;
L->length++;
return OK;
}
Status ListDelete(SqList *L,int i,ElemType* e)
{
if(L->length == 0)//表空
return ERROR;
if(i<1||i>L->length+1)//不在表长范围
return ERROR;
*e = L->data[i-1];
if(i<=L->length)
{
for(int k=i-1;k<L->length-1;k++)//前移数据
L->data[k]=L->data[k+1];
}
L->length--;
return OK;
}
void PrintList(SqList list)
{
for(int i=0;i<list.length;i++)
cout<<list.data[i]<<" ";
cout<<endl;
}
int main()
{
SqList listA,listB;
listA.length = 10;
listB.length =13;
int i=0;
for(i=0;i<20;i++)
{
listA.data[i]=i*i;
listB.data[i]=i*2;
}
PrintList(listA);
PrintList(listB);
ElemType e;
GetElem(listA,6,&e);//获得元素操作
cout<<"GetElem(listA,6,&e): "<<e<<endl;
ListInsert(&listA,6,55);
cout<<"ListInsert(&listA,6,55): ";
PrintList(listA);
ListDelete(&listA,6,&e);
cout<<"ListDelete(&listA,6,&e): ";
PrintList(listA);
getchar();
}
结果: