C语言编程实现单链表的创建、插入和删除。然后输出顺序表的内容。元素由用户从键盘输入
时间: 2024-01-22 21:20:26 浏览: 67
用C语言实现单链表的创建和基本操作
5星 · 资源好评率100%
以下是C语言实现单链表的创建、插入和删除,并输出顺序表内容的代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表
Node* createList() {
Node* head = NULL; // 定义头结点
Node* tail = NULL; // 定义尾结点
int x;
printf("请输入链表中的元素,输入-1表示结束:");
scanf("%d", &x);
while (x != -1) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 分配新结点内存空间
newNode->data = x;
newNode->next = NULL;
if (head == NULL) { // 如果头结点为空,说明链表为空
head = newNode;
tail = newNode;
} else {
tail->next = newNode; // 尾结点指向新结点
tail = newNode; // 尾结点更新为新结点
}
scanf("%d", &x);
}
return head; // 返回头结点
}
// 插入结点
Node* insertNode(Node* head, int pos, int data) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 分配新结点内存空间
newNode->data = data;
newNode->next = NULL;
if (pos == 1) { // 在链表头插入新结点
newNode->next = head;
head = newNode;
} else { // 在链表中间或尾部插入新结点
Node* p = head;
int i;
for (i = 1; i < pos - 1 && p != NULL; i++) {
p = p->next;
}
if (p == NULL) { // 如果插入位置超出链表长度,不插入
printf("插入位置超出链表长度,不插入!\n");
} else {
newNode->next = p->next;
p->next = newNode;
}
}
return head; // 返回头结点
}
// 删除结点
Node* deleteNode(Node* head, int pos) {
if (pos == 1) { // 删除链表头结点
Node* p = head;
head = head->next;
free(p);
} else { // 删除链表中间或尾部结点
Node* p = head;
int i;
for (i = 1; i < pos - 1 && p != NULL; i++) {
p = p->next;
}
if (p == NULL || p->next == NULL) { // 如果删除位置超出链表长度,不删除
printf("删除位置超出链表长度,不删除!\n");
} else {
Node* q = p->next;
p->next = q->next;
free(q);
}
}
return head; // 返回头结点
}
// 输出链表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = createList(); // 创建链表
printf("创建链表成功!\n");
printList(head); // 输出链表
int pos, data;
printf("请输入要插入的位置和元素:");
scanf("%d %d", &pos, &data);
head = insertNode(head, pos, data); // 插入结点
printf("插入结点成功!\n");
printList(head); // 输出链表
printf("请输入要删除的位置:");
scanf("%d", &pos);
head = deleteNode(head, pos); // 删除结点
printf("删除结点成功!\n");
printList(head); // 输出链表
return 0;
}
```
运行程序后,用户可以输入链表中的元素,并进行插入和删除操作。最终输出顺序表内容。
阅读全文