类型名称:*线性表(list)*
数据集对象:线性表是N(>=0)个元素构成的有序序列(a1,a2,a2……an)
#操作集:
1.List MakeEmpty();初始化一个空线性表L
2.ElementType FindKth(int K,List L);根据位序K,返回相应的元素
3.int Find(ElementType x,List L);在线性表L中查找X的第一次出现的位置
4.void Insert(ElementType x,int i,List L);在位序i前面插入一个新的元素x
5.void Delete(int i,List L);删除指定位序i的元素
6.int length(List L);返回线性表L的长度N
#具体实现:
*线性表的顺序存储实现:利用数组的连续存储空间顺序存放线性表*
typedef struct LNode *List;
struct LNode{
ElementType Data[MAXSIZE];
int Last;//线性表最后一个元素下标
};
struct LNode L;
List PtrL;
访问下标为i的元素:L.Data[i]或者PtrL->Data[i]
#主要操作:
1.初始化(建立空的顺序表)
List MakeEmpty()
{
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode))
PtrL->Last = -1;
return PtrL;
}
2.查找
int Find(ElementType x,List PtrL)
{
int i = 0;
while(i<= PtrL->Last&&PtrL->Data[i]!=x)
i++;
if(i>PtrL->Last) return -1;//如果没有找到,返回-1
else return i;//找到后返回的是存储位置
}
3.插入(第i(1<=i<=n+1)个位置上插入一个值为x的新元素)
void Insert(ElementType x,int i,List PtrL)
{
int j;
if(PtrL->Last == MAXSIZE-1)
{
printf("位置不合法");
return;
}
for(j = PtrL-Last; j >= i-1;j--)
PtrL-Data[j+1] = PtrL->Data[j];
PtrL->Data[i-1] = x;
PtrL->Last++;
return;
}
4.删除
void Delete(int i,List PtrL)
{
int j;
if(i<1||i>PtrL->Last+1)
{
printf("不存在第%d个元素");
return;
}
for(j=i;j<=PtrL->Last;j++)
PtrL->Data[j-1] = PtrL->Data[j];
PtrL->Last--;
return;
}