基本要求: (1)实现单链表的创建;(2)实现单链表的插入;(3)实现单链表的删除 (4)实现单链表的查找;(5)实现单链表的显示;用c语言实现
时间: 2023-09-15 18:04:46 浏览: 86
C语言实现链表,创建、插入、查找、删除、遍历等基本操作
4星 · 用户满意度95%
### 回答1:
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} ListNode;
// 创建链表
ListNode *createList() {
ListNode *head = NULL;
ListNode *tail = NULL;
int input = 0;
printf("请输入链表的数据元素,以-1结束:\n");
while (1) {
scanf("%d", &input);
if (input == -1)
break;
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->data = input;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
// 插入节点
void insertNode(ListNode *head, int index, int value) {
ListNode *p = head;
int i = 0;
while (p != NULL && i < index - 1) {
p = p->next;
++i;
}
if (p == NULL || i > index - 1) {
printf("插入位置无效!\n");
return;
}
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->data = value;
node->next = p->next;
p->next = node;
printf("插入节点成功!\n");
}
// 删除节点
void deleteNode(ListNode *head, int index) {
ListNode *p = head;
int i = 0;
while (p != NULL && i < index - 1) {
p = p->next;
++i;
}
if (p == NULL || p->next == NULL || i > index - 1) {
printf("删除位置无效!\n");
return;
}
ListNode *q = p->next;
p->next = q->next;
free(q);
printf("删除节点成功!\n");
}
// 查找节点
int findNode(ListNode *head, int value) {
ListNode *p = head;
int index = 0;
while (p != NULL) {
++index;
if (p->data == value)
return index;
p = p->next;
}
return -1;
}
// 显示链表
void displayList(ListNode *head) {
ListNode *p = head;
printf("当前链表为:\n");
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
ListNode *head = createList();
displayList(head);
insertNode(head, 3, 100);
displayList(head);
deleteNode(head, 5);
displayList(head);
int index = findNode(head, 50);
if (index == -1)
printf("链表中不存在该节点!\n");
else
printf("该节点在链表中的位置为:%d\n", index);
return 0;
}
### 回答2:
以下是用C语言实现单链表的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建单链表
Node* createList(int* data, int length) {
Node* head = NULL;
Node* tail = NULL;
for (int i = 0; i < length; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 插入节点
void insertNode(Node** head, int data, int position) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
if (position == 0) {
newNode->next = *head;
*head = newNode;
return;
}
Node* current = *head;
int count = 0;
while (count < position - 1 && current->next != NULL) {
current = current->next;
count++;
}
newNode->next = current->next;
current->next = newNode;
}
// 删除节点
void deleteNode(Node** head, int position) {
if (*head == NULL) {
return;
}
Node* temp = *head;
if (position == 0) {
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
int count = 0;
while (count < position - 1 && current->next != NULL) {
current = current->next;
count++;
}
if (current->next == NULL) {
return;
}
temp = current->next;
current->next = current->next->next;
free(temp);
}
// 查找节点
int searchNode(Node* head, int data) {
Node* current = head;
int position = 0;
while (current != NULL) {
if (current->data == data) {
return position;
}
current = current->next;
position++;
}
return -1;
}
// 显示单链表
void displayList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
int data[] = {1, 2, 3, 4, 5};
int length = sizeof(data) / sizeof(data[0]);
Node* head = createList(data, length);
printf("单链表:");
displayList(head);
insertNode(&head, 6, 0);
insertNode(&head, 7, 3);
printf("插入后的单链表:");
displayList(head);
deleteNode(&head, 4);
deleteNode(&head, 1);
printf("删除后的单链表:");
displayList(head);
int position = searchNode(head, 6);
if (position != -1) {
printf("元素6在单链表的位置:%d\n", position);
} else {
printf("元素6不在单链表中\n");
}
return 0;
}
```
这段代码实现了创建单链表、插入节点、删除节点、查找节点以及显示单链表的功能。在`main`函数中,我们创建了一个初始值为1、2、3、4、5的单链表,并且依次执行了插入节点、删除节点、查找节点等操作,然后通过`displayList`函数显示出所有节点的值。
### 回答3:
单链表是一种线性数据结构,由多个节点组成,每个节点都有一个数据域和一个指针域,指针域指向下一个节点。下面是使用C语言实现单链表的基本要求。
1. 创建单链表:
首先定义一个节点结构,包含一个数据域和一个指针域,用来存储数据和指向下一个节点的指针。
然后,定义一个头指针,初始化为NULL表示空链表。
通过动态分配内存创建一个新节点,将数据存入数据域,将头指针指向新节点。
2. 插入节点:
先创建一个新节点,将数据存入数据域。
找到待插入位置的前一个节点(可以使用循环遍历链表找到),将新节点的指针域指向前一个节点的下一个节点。
将前一个节点的指针域指向新节点,完成节点的插入。
3. 删除节点:
找到待删除节点的前一个节点。
将前一个节点的指针域指向待删除节点的下一个节点。
释放待删除节点的内存空间,完成节点的删除。
4. 查找节点:
使用循环遍历链表,依次比较每个节点的数据域与目标数据是否相等。
如果找到相等的节点,返回该节点的指针;否则,返回NULL表示未找到。
5. 显示链表:
使用循环遍历链表,依次打印每个节点的数据域的值。
以上是使用C语言实现单链表的基本要求。
阅读全文