给我一个用c语言实现利用链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果的算法的思想
时间: 2023-12-13 07:04:44 浏览: 69
用C语言实现链表的各种操作
5星 · 资源好评率100%
好的,以下是利用链表实现插入运算建立线性链表,以及链表的查找、删除、计数、输出等运算的算法思想:
1. 定义一个结构体来存储链表节点的数据信息,以及指向下一个节点的指针:
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
```
2. 定义一个指向链表头节点的指针,初始化为 NULL:
```c
Node *head = NULL;
```
3. 编写插入节点的函数,该函数将一个新节点插入到链表的末尾:
```c
void insertNode(int value) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
```
4. 编写查找节点的函数,该函数接收一个值作为参数,返回值为该值在链表中第一次出现的位置(从 0 开始计数),如果不存在则返回 -1:
```c
int findNode(int value) {
int index = 0;
Node *temp = head;
while (temp != NULL) {
if (temp->data == value) {
return index;
}
temp = temp->next;
index++;
}
return -1;
}
```
5. 编写删除节点的函数,该函数接收一个值作为参数,将链表中所有值等于该值的节点全部删除:
```c
void deleteNode(int value) {
Node *prev = NULL;
Node *curr = head;
while (curr != NULL) {
if (curr->data == value) {
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
curr = prev == NULL ? head : prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
}
```
6. 编写计数节点的函数,该函数返回链表中节点的总数:
```c
int countNode() {
int count = 0;
Node *temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
```
7. 编写输出节点的函数,该函数将链表中所有节点的值依次输出到屏幕上:
```c
void printNode() {
Node *temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
```
8. 在主函数中,调用上述函数来实现链表的建立、查找、删除、计数、输出等操作:
```c
int main() {
insertNode(1);
insertNode(2);
insertNode(3);
insertNode(4);
insertNode(5);
printNode(); // 输出:1 2 3 4 5
printf("Index of 3: %d\n", findNode(3)); // 输出:Index of 3: 2
deleteNode(3);
printNode(); // 输出:1 2 4 5
printf("Total nodes: %d\n", countNode()); // 输出:Total nodes: 4
return 0;
}
```
阅读全文