DataStructure
本文最后更新于:2 小时前
链表(链式存储)
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode *List;
struct LNode {
int Data;
List Next;
};
struct LNode L;
List PtrL;
int Length ( List PtrL ) { //求链表长度
int i = 0;
List P = PtrL;
while ( P != NULL ) {
P = P->Next;
i++;
}
return i;
}
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;
}
return NULL;
}
List Find ( int K, List PtrL ) { //按值查找
List P = PtrL;
while ( P != NULL && P->Data != K ) {
P = P->Next;
}
return P;
}
List Insert ( int 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指向第i-1个结点
P = FindKth( i-1, PtrL );
//如果第i-1个结点为空
if ( P == NULL ) {
return NULL;
}
else {
S = (List)malloc( sizeof(struct LNode) );
S->Data = X;
S->Next = P->Next;
P->Next = S;
return PtrL;
}
}
List Delete( int i, List PtrL ) {
List S, P;
//删除头结点
if ( i == 1 ) {
S = PtrL;
//判断头结点是否为空
if ( PtrL != NULL ) { //如果不为空
PtrL = PtrL->Next;
}
else {
return NULL;
}
free(S);
return PtrL;
}
P = FindKth( i - 1, PtrL ); //P是要删除的结点的前一个结点
if ( P == NULL ) { //第i-1个结点不存在
return NULL;
}
else if ( P->Next == NULL ) { ////第i个结点不存在
return NULL;
}
else {
S = P->Next; //S指向的是要删除的那个结点
P->Next = S->Next;
free(S);
return PtrL;
}
}
int main() {
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!