数据结构与算法-C语言实现单链表,以及单链表的常用方法
C语言知识点提要:
Struct:Struct 内可放置各种类型的数据
格式为:
Struct TagName {
.............(元素类型 元素名称)
}
不同Struct内的成员名称可以相同
也可使用以下方法来定义Struct
struct {......} x,y,z;
上面定义的TagName可用于之后再定义,例如:
struct TagName tg;
可使用struct-mame.member来打印值。
若定义了一个struct类型的指针变量,则可使用“->"符号来访问变量
例如:
struct TagName *p;
p->member-of-structure
具体代码如下:
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
int IsEmpty(List L);
int IsLast(Position P , List L);
Position Find(int X,List L);
List MakeEmpty(List L);
void Delete(int X,List L);
Position FindPrevious(int X,List L);
void Insert(int X,List L,Position P);
void DeleteList(List L);
struct Node
{
int Element;
Position Next;
};
VOid DeleteList(List L){
/*
删除现有链表
并释放列表元素占用空间
*/
Position P,TmpCell;
P=L->Next;
L->Next=NULL;
while(P!=NULL){
TmpCell=P->Next;
free(P);
P=TmpCell;
}
}
/*
插入元素到链表的指定位置
*/
void Insert(int X,List L,Position P){
TmpCell=malloc(sizeof(struct Node))
TmpCell->Element=X;
TmpCell->Next=P->Next;
free(P->Next)
P->Next=TmpCell;
return P;
}
/*
定位到当前元素的前一个元素
*/
void FindPrevious(int X,List L){
Position P;
P=L->Next;
while(P->Next!=NULL && P->Next->Element!=X){
P=P->Next;
}
return P;
}
void Delete(int X,List L){
/*
删除当前链表中的某个元素
*/
Position P;
P=L->Next;
while(P->Next!=NULL && P->Element!=X)
P=P->Next;
TmpCell=P->Next;
P->Next=TmpCell->Next;
free(TmpCell);
}
List MakeEmpty(List L){
/*
清空当前的链表
*/
Position P;
P=malloc(sizeof(struct Node))
if(P==NULL){
printf("%s","error")
}
P->Element=NULL;
P->Next=NULL;
return P;
}
/*
定位到单链表中的某个值的位置
*/
Position Find(int X,List L){
Position P;
P=L->Next;
while(P->Next != NULL && P->Element!=X){
P=P->Next;
}
return P;
}
/*
判断单链表是否为空
*/
int IsEmpty(List L){
return L->Next==NULL;
}
/*
判断当前位置是否最后一个元素
*/
int IsLast(Position P,List L){
return P->Next==NULL;
}