6-1 单链表逆转 (20 分)
List Reverse(List L)
{
PtrToNode p;
PtrToNode q;
PtrToNode r;
if(L==NULL) return L;
p=L;
q=L->Next;
L->Next=NULL;
while(q)
{
r=q->Next;
q->Next=p;
p=q;
q=r;
}
L=p;
return L;
}
6-2 顺序表操作集 (20 分)
List MakeEmpty()
{
List L;
L=(List)malloc(sizeof(struct LNode));
L->Last=-1;
return L;
}
Position Find( List L, ElementType X )
{
int i;
for(i=0;i<MAXSIZE;i++)
{
if(L->Data[i]==X)
return i;
}
return ERROR;
}
bool Insert( List L, ElementType X, Position P )
{
int i;
if(L->Last==MAXSIZE-1)
{
printf("FULL");
return false;
}
else if(P<0||P >L->Last+1)
{
printf("ILLEGAL POSITION");
return false;
}
else
{
for(i=L->Last;i>=P;i--)
{
L->Data[i+1]=L->Data[i];
}
L->Data[P]=X;
L->Last++;
return true;
}
}
bool Delete( List L, Position P )
{
if(P<0||P>L->Last)
{
printf("POSITION %d EMPTY",P);
return false;
}
else
{
for(int i=P;i<=L->Last;i++)
{
L->Data[i]=L->Data[i+1];
}
L->Last--;
return true;
}
}
6-3 求链式表的表长 (10 分)
int Length( List L )
{
int cnt=0;
while(L)
{
L=L->Next;
cnt++;
}
return cnt;
}
6-4 链式表的按序号查找 (10 分)
ElementType FindKth( List L, int K )
{
int i;
if(K<1)return ERROR;
for(i=1;i<K;i++)
{
L=L->Next;
}
if(L==NULL) return ERROR;
return L->Data;
}