6-2 单链表基本运算算法的实现
时间: 2024-02-20 13:00:10 浏览: 115
实现单链表的各种基本运算.doc
单链表是一种常用的数据结构,它由若干个结点组成,每个结点包含一个数据域和一个指向下一个结点的指针。单链表的基本操作包括:初始化、插入结点、删除结点、查找结点等。下面是单链表基本运算算法的实现。
首先,定义单链表的结点结构体:
```c
typedef struct LNode {
DataType data;
struct LNode *next;
} LNode, *LinkList;
```
其中,`DataType`为数据类型,可以根据实际需求进行定义。
初始化单链表:
```c
void InitList(LinkList *L) {
*L = (LinkList) malloc(sizeof(LNode));
(*L)->next = NULL;
}
```
插入结点:
```c
void InsertList(LinkList L, int pos, DataType x) {
int index = 0;
LinkList p = L, q;
while (p && index < pos - 1) {
p = p->next;
index++;
}
if (!p || index > pos - 1) {
printf("Invalid position.\n");
return;
}
q = (LinkList) malloc(sizeof(LNode));
q->data = x;
q->next = p->next;
p->next = q;
}
```
删除结点:
```c
void DeleteList(LinkList L, int pos) {
int index = 0;
LinkList p = L, q;
while (p->next && index < pos - 1) {
p = p->next;
index++;
}
if (!p->next || index > pos - 1) {
printf("Invalid position.\n");
return;
}
q = p->next;
p->next = q->next;
free(q);
}
```
查找结点:
```c
LinkList FindList(LinkList L, DataType x) {
LinkList p = L->next;
while (p != NULL && p->data != x) {
p = p->next;
}
return p;
}
```
需要注意的是,在插入和删除结点时,需要保证传入的位置参数`pos`合法,即在链表的范围之内。此外,当查找结点时,如果找到了指定的元素,则返回它所在的结点的指针;如果没有找到,则返回`NULL`。
完整代码如下:
阅读全文