定义main函数,调用给出的建立、输出、插入、删除等函数,验证单链表用c语言实现
时间: 2024-01-25 17:02:29 浏览: 62
实现单链表的建立、插入与删除
3星 · 编辑精心推荐
好的,以下是一个简单的单链表的实现,包含建立、输出、插入、删除等函数的代码。您可以参考这个代码进行验证。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node, *LinkedList;
// 建立单链表
LinkedList createLinkedList() {
LinkedList head = NULL; // 定义链表头指针,初始值为NULL
LinkedList p = NULL, q = NULL; // 定义两个辅助指针
int data;
printf("请输入链表中的元素,输入-1表示结束:\n");
scanf("%d", &data);
while (data != -1) {
p = (LinkedList) malloc(sizeof(Node)); // 申请一个节点的内存空间
p->data = data; // 将输入的数据存入节点的数据域中
p->next = NULL; // 将节点的指针域初始化为NULL
if (head == NULL) { // 如果链表为空,则将头指针指向新节点
head = p;
} else {
q->next = p; // 否则将上一个节点的指针域指向新节点
}
q = p; // 将辅助指针q指向新节点
scanf("%d", &data); // 继续读取下一个元素
}
return head; // 返回链表头指针
}
// 遍历并输出链表
void printLinkedList(LinkedList head) {
LinkedList p = head; // 定义一个指针p指向链表头
printf("链表中的元素为:");
while (p != NULL) { // 当p不为NULL时,说明还有节点未输出
printf("%d ", p->data); // 输出当前节点的数据
p = p->next; // 将指针p指向下一个节点
}
printf("\n");
}
// 在链表的第pos个位置插入元素value
LinkedList insertLinkedList(LinkedList head, int pos, int value) {
LinkedList p = head, q = NULL; // 定义两个辅助指针
int i = 1;
while (p != NULL && i < pos) { // 找到要插入位置的前一个节点
q = p;
p = p->next;
i++;
}
if (i != pos) { // 如果未找到要插入位置的节点,则返回原链表
printf("插入位置无效!\n");
return head;
}
LinkedList new_node = (LinkedList) malloc(sizeof(Node)); // 申请一个新节点的内存空间
new_node->data = value; // 将要插入的数据存入新节点的数据域中
if (q == NULL) { // 如果要插入的位置是链表头,则将新节点作为新的头节点
new_node->next = head;
head = new_node;
} else { // 否则将新节点插入到链表中
new_node->next = q->next;
q->next = new_node;
}
printf("成功插入元素 %d 到链表中的第 %d 个位置!\n", value, pos);
return head; // 返回新的链表头指针
}
// 删除链表中第pos个位置的元素
LinkedList deleteLinkedList(LinkedList head, int pos) {
LinkedList p = head, q = NULL; // 定义两个辅助指针
int i = 1;
while (p != NULL && i < pos) { // 找到要删除的节点
q = p;
p = p->next;
i++;
}
if (i != pos || p == NULL) { // 如果未找到要删除的节点,则返回原链表
printf("删除位置无效!\n");
return head;
}
if (q == NULL) { // 如果要删除的节点是头节点,则将头指针指向下一个节点
head = p->next;
} else { // 否则将要删除的节点从链表中删除
q->next = p->next;
}
printf("成功删除链表中的第 %d 个元素!\n", pos);
free(p); // 释放被删除节点的内存空间
return head; // 返回新的链表头指针
}
int main() {
LinkedList head = NULL; // 定义链表头指针,初始值为NULL
head = createLinkedList(); // 建立单链表
printLinkedList(head); // 输出链表
head = insertLinkedList(head, 3, 100); // 在第3个位置插入元素100
printLinkedList(head); // 输出链表
head = deleteLinkedList(head, 2); // 删除第2个元素
printLinkedList(head); // 输出链表
return 0;
}
```
在运行程序时,可以根据提示输入要操作的元素和位置,然后程序会执行相应的操作并输出结果。
阅读全文