线性表的链式存储实现:不要求逻辑上相邻的两个元素物理上也相邻:通过“链”建立起数据元素之间的逻辑关系。
typedef struct LNode *List;
struct LNode{
ElementType Data;
List Next;
};
struct LNode L;
List PtrL;
主要操作的实现:
1.求表长
int Length(List PtrL)
{
List P=PtrL;
int j=0;
while(P){
P=P->Next;
j++;
}
return j;
}
2.查找
(1)按照序号查找
List FindKth(int K,List PtrL)
{
List P=PtrL;
int i=1;
while(P!=NULL&&i<k){
P=P->Next;
i++;
}
if(i==k)
return P;
else
return NULL;
}
(2)按值查找
List Find(ElementType X,List PtrL)
{
List P=PtrL;
while(P!=NULL&&P->Data!=X)
P=P->Next;
return P;
}
3.插入(在第i-1(1≤i≤n+1)个结点后插入一个值为X的新结点)
List Insert(ElementType X,int i,List PtrL)
{
List P,S;
if(i==1){
S=(List)malloc(sizeof (struct LNode));
S->Data=X;
S->next=PtrL;
return S;
}
P=FindKth(i-1,PtrL);
if(P==NULL){
printf("参数错误");
return NULL;
}
else{
S=(List)malloc (sizeof(struct LNode));
S->Data=X;
S-Next=P-Next;
p->Next=S;
return PtrL;
}
}
4.删除(删除链表的第i(1≤i≤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;
}
}