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 协议 ,转载请注明出处!