1 . 数组实现
typedef struct list{
ElementType Data[Maxsize];
int Last;
}List;
List *MakeEmpty() //初始化
{
List *PtrL;
PtrL = (List*)malloc(sizeof(List));
PtrL->Last = -1;
return PtrL;
}
//平均比较次数(n+1)/2,平均时间O(n)
int Find(ElementType X,List *PtrL) //查找并返回下标
{
int i=0;
while(i<=PtrL->Last && PtrL->Data[i] != X)
{
i++;
}
if(i>Ptrl->Last)
return -1;
else
return i;
}
//平均移动次数(n+1)/2,平均时间O(n)
void Insert( ElementType X, int i, List *PtrL) //将X插入下标i
{ int j;
if ( PtrL->Last == MAXSIZE-1 ){
printf("表满");
return;
}
if ( i < 1 || i > PtrL->Last+2) {
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;
}
}
//平均移动次数(n-1)/2,平均时间O(n)
void Delete( int i, List *PtrL ) //将下标i删除并i后所有前移
{ int j;
if( i < 1 || i > PtrL->Last+1 ) {
printf (“不存在第%d个元素”, i );
return ;
}
for ( j = i; j <= PtrL->Last; j++ )
PtrL->Data[j-1] =PtrL->Data[j];
PtrL->Last--;
return;
}
2 . 链表实现
typedef struct Node{
ElementType Data;
struct Node *next;
}List;
// 时间O(n)
int Length(List *PtrL) //链表长度
{
List *p = Ptrl;
int j = 0;
while(p)
{
p = p->next;
j++;
}
return j;
}
// 平均时间O(n)
List *FindKth( int K, List *PtrL ) //查找第K个
{
List *p = PtrL;
int i = 1;
while (p !=NULL && i < K )
{
p = p->Next;
i++;
}
if ( i == K )
return p;
else
return NULL;
}
// 平均时间O(n)
List *Find( ElementType X, List *PtrL ) //按值查找
{
List *p = PtrL;
while ( p!=NULL && p->Data != X )
p = p->Next;
return p;
}
//平均查找次数n/2,平均时间O(n)
List *Insert( ElementType X, int i, List *PtrL )
{
List *p, *s;
if(i==1)
{
s = (List *)malloc(sizeof(List));
s->Data = X;
s->Next = PtrL;
return s;
}
p = FindKth( i-1, PtrL);
if ( p == NULL )
{
printf("参数i错");
return NULL;
else{
s = (List *)malloc(sizeof(List));
s->Data = X;
s->Next = p->Next;
p->Next = s;
return PtrL;
}
}
//平均查找次数n/2,平均时间O(n)
List *Delete(int i, List *PtrL)
{
List *p, *s;
if(i == 1)
{
s = PtrL;
if (PtrL!=NULL) PtrL = PtrL->Next;
else
return NULL;
free(s);
return PtrL;
}
p = FindKth( i-1, PtrL );
if ( p == NULL )
{
printf(“第%d个结点不存在”, i-1);
return NULL;
}
else if ( p->Next == NULL )
{
printf(“第%d个结点不存在”, i);
return NULL;
}
else
{
s = p->Next;
p->Next = s->Next;
free(s);
return PtrL;
}
}