实现单链表的初始化、在指定位置插入和删除元素的完整c语言程序
时间: 2024-02-22 16:55:53 浏览: 99
以下是实现单链表的初始化、在指定位置插入和删除元素的完整C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data; // 存储元素的值
struct Node *next; // 指向下一个节点的指针
} Node, *LinkedList;
// 初始化单链表
void InitList(LinkedList *L) {
*L = (LinkedList) malloc(sizeof(Node)); // 创建头节点
(*L)->next = NULL; // 头节点的指针域置为NULL
}
// 在指定位置插入元素
int ListInsert(LinkedList L, int i, int e) {
int j;
Node *p, *s;
p = L;
j = 0;
while (p != NULL && j < i - 1) { // 寻找第i-1个节点
p = p->next;
j++;
}
if (p == NULL || j > i - 1) { // 判断i的范围是否合法
return 0;
}
s = (Node *) malloc(sizeof(Node)); // 创建新节点
s->data = e; // 赋值
s->next = p->next; // 新节点的next指向第i个节点
p->next = s; // 第i-1个节点的next指向新节点
return 1;
}
// 在指定位置删除元素
int ListDelete(LinkedList L, int i, int *e) {
int j;
Node *p, *q;
p = L;
j = 0;
while (p->next != NULL && j < i - 1) { // 寻找第i-1个节点
p = p->next;
j++;
}
if (p->next == NULL || j > i - 1) { // 判断i的范围是否合法
return 0;
}
q = p->next; // q指向第i个节点
*e = q->data; // 保存被删除的元素
p->next = q->next; // 第i-1个节点的next指向第i+1个节点
free(q); // 释放第i个节点的空间
return 1;
}
int main() {
LinkedList L;
int i, e;
InitList(&L); // 初始化单链表
// 在指定位置插入元素
for (i = 1; i <= 5; i++) {
ListInsert(L, i, i);
}
// 输出单链表中的元素
printf("单链表中的元素为:");
Node *p = L->next;
while (p != NULL) { // 遍历单链表
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// 在指定位置删除元素
ListDelete(L, 3, &e);
// 输出删除后的单链表中的元素
printf("删除第三个元素后,单链表中的元素为:");
p = L->next;
while (p != NULL) { // 遍历单链表
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
在该程序中,我们定义了一个结构体`Node`来表示单链表中的节点,其中包括一个变量`data`用于存储元素的值,以及一个指针`next`指向下一个节点。我们使用`LinkedList`来表示整个单链表,实际上是一个指向头节点的指针。程序中实现了初始化单链表、在指定位置插入元素、在指定位置删除元素的操作。我们可以通过调用相应的函数来实现这些操作。
阅读全文