在C语言中,如何从零开始编写代码实现单链表的创建、插入、查找、删除和输出功能?
时间: 2024-12-04 16:37:06 浏览: 33
要实现单链表的基本操作,首先需要定义链表节点的结构体,然后通过一系列函数实现链表的创建、插入、查找、删除和输出。具体步骤如下:
参考资源链接:[C语言单链表创建、插入与操作详解](https://wenku.csdn.net/doc/4qx36o6mxh?spm=1055.2569.3001.10343)
1. **定义链表节点结构体**:
```c
typedef struct Node {
ElemType data; // 数据域
struct Node *next; // 指针域,指向下一个节点
} Node, *LinkList;
```
2. **创建单链表**:
创建链表通常包括初始化链表,即创建头节点,并设置其`next`指针为`NULL`。随后根据需求动态地创建新节点并插入到链表中。
```c
void InitList(LinkList *L) {
*L = (Node *)malloc(sizeof(Node));
if (!(*L)) {
exit(OVERFLOW); // 存储分配失败
}
(*L)->next = NULL;
}
```
3. **插入节点**:
插入节点操作依赖于链表是否为空以及插入位置的指定。
```c
void Insert(LinkList *L, int i, ElemType e) {
Node *p = *L;
int j = 0;
while (p && j < i - 1) { // 寻找第i-1个节点
p = p->next;
++j;
}
if (!p || j > i - 1) return; // 插入位置不合理
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = e;
newNode->next = p->next;
p->next = newNode;
}
```
4. **查找节点**:
查找节点通常需要遍历链表直到找到目标值。
```c
Node *Search(LinkList L, ElemType e) {
Node *p = L->next;
while (p && p->data != e) {
p = p->next;
}
if (p) {
return p;
} else {
return NULL;
}
}
```
5. **删除节点**:
删除节点需调整前一个节点的`next`指针指向当前节点的下一个节点。
```c
void Delete(LinkList *L, int i) {
Node *p = *L;
int j = 0;
while (p->next && j < i - 1) { // 寻找第i-1个节点
p = p->next;
++j;
}
if (!(p->next) || j > i - 1) return; // 删除位置不合理
Node *q = p->next;
p->next = q->next;
free(q);
}
```
6. **输出链表**:
遍历链表并输出每个节点的数据域即可。
```c
void PrintList(LinkList L) {
Node *p = L->next;
while (p) {
printf(
参考资源链接:[C语言单链表创建、插入与操作详解](https://wenku.csdn.net/doc/4qx36o6mxh?spm=1055.2569.3001.10343)
阅读全文