线性表
二元组表示:
L=(D,R)其中D={ai | 1<=i<=n , n>=0, ai为ElemType类型}
R={r}
r={<ai,ai+1> | i<=i<=n-1}
特性:
1)有穷性:元素个数有限
2)一致性:元素性质相同
3)序列性:元素的相对位置是线性的
抽象数据类型描述
ADT List
{数据对象:
D={ai | 1<=i<=n , n>=0, ai为ElemType类型}
数据关系:
R={<ai,ai+1> | ai,ai+1 属于 D,i=1,...,n-1}
基本运算:
InitList(&L):初始化,构造空线性表L。
DestroyList(&L):销毁线性表,释放L内存空间。
ListEmpty(L):判断是否为空表。
ListLength(L):求线性表长度。
DispList(L):输出线性表。
GetItem(L,i,&e):求第i个数据元素值,用e返回L中第i个元素的值。
LocateElem(L,e):求第一个等于e的元素位置,无则为0。
ListInsert(&L,i,e):插入数据元素,在L中第i个位置插入e,L长度+=1.
ListDelete(&L,i,&e):删除数据元素,输出L中第i个元素,并用返回其值,L长度-=1.
}
顺序表
定义
#define MAXSIZE 50
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int length;
}SqList;
建表
void CreateList(SqList *&L,ElemType a[],int n)
{
int i=0,k=0;
L=(SqList*)malloc(sizeof(SqList));
while(i<n)
{
L->data[i]=a[i];
k++;i++;
}
L->length=k;
}
初始化
void InitList(SqList *&L)
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
销毁
void Destroy(SqList *&L)
{
free(L);
}
判空
bool ListEmpty(SqList *L)
{
return (L->length==0);
}
求长
int ListLength(SqList *L)
{
return (L->length);
}
输出线性表
void DispList(SqList *L)
{
for(int i=0;i<L->length;i++)
{
cout<<L->data[i]<<" ";
}
cout<<endl;
}
求某位置的值
bool GetElem(SqList *L,int i,ElemType &e)
{
if(i<1 || i>L->length)
return false;
e=L->data[i-1];
return true;
}
求值的位置
int LocateElem(SqList *L,int i,ElemType e)
{
int i=0;
while(i<L->length && L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
插入元素
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1 || i>L->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
删除元素
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1 ||i>L->length)
return false;
i--;
e=L->data[i];
for(j=i;j<L->length-1;j--)
L-data[j]=L->data[j+1];
L->length--;
return true;
}