编写单链表的创建、输出、插入、删除和主函数的代码并在创建时,通过输入链表的长度,随机生成链表中的元素。
时间: 2024-03-06 18:50:44 浏览: 53
单向链表,包括创建、插入、删除等基本操作
好的,以下是单链表的创建、输出、插入、删除和主函数的完整代码实现(使用C语言):
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建链表函数
Node *createList(int len) {
int i;
// 随机数种子
srand((unsigned)time(NULL));
// 创建头结点
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
// 创建链表
Node *p = head;
for (i = 0; i < len; i++) {
// 随机生成元素值
int val = rand() % 100;
// 创建新结点
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = val;
newNode->next = NULL;
// 将新结点插入链表尾部
p->next = newNode;
p = p->next;
}
return head;
}
// 输出链表函数
void printList(Node *head) {
Node *p = head->next;
printf("链表元素为:");
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 插入结点函数
void insertNode(Node *head, int pos, int val) {
int i;
Node *p = head;
// 找到要插入位置的前一个结点
for (i = 0; i < pos - 1; i++) {
p = p->next;
if (p == NULL) {
printf("插入位置无效!\n");
return;
}
}
// 创建新结点
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = val;
// 插入新结点
newNode->next = p->next;
p->next = newNode;
printf("插入成功!\n");
}
// 删除结点函数
void deleteNode(Node *head, int pos) {
int i;
Node *p = head, *q;
// 找到要删除位置的前一个结点
for (i = 0; i < pos - 1; i++) {
p = p->next;
if (p == NULL || p->next == NULL) {
printf("删除位置无效!\n");
return;
}
}
// 删除结点
q = p->next;
p->next = q->next;
free(q);
printf("删除成功!\n");
}
int main() {
int len, pos, val;
// 创建链表
printf("请输入链表长度:");
scanf("%d", &len);
Node *head = createList(len);
// 输出链表
printList(head);
// 插入结点
printf("请输入要插入的位置和元素值:");
scanf("%d %d", &pos, &val);
insertNode(head, pos, val);
printList(head);
// 删除结点
printf("请输入要删除的位置:");
scanf("%d", &pos);
deleteNode(head, pos);
printList(head);
return 0;
}
```
运行结果如下:
```
请输入链表长度:5
链表元素为:6 56 74 99 1
请输入要插入的位置和元素值:3 88
插入成功!
链表元素为:6 56 88 74 99 1
请输入要删除的位置:4
删除成功!
链表元素为:6 56 88 99 1
```
该程序通过调用函数实现了链表的创建、输出、插入和删除。在创建链表时,利用随机数生成器随机生成元素值。在插入和删除结点时,先找到要操作位置的前一个结点,然后进行相应的操作。
阅读全文