编写算法,按用户输入的数据建立一个单链表,实现在带有头结点的单链表中按序号查找的函数。c语言实现,并给出算法流程
时间: 2024-04-30 09:23:04 浏览: 13
算法流程:
1. 定义一个结构体Node,表示单链表的每个节点,包括数据域和指针域。
2. 定义一个头指针Head,指向链表的头结点,初始为NULL。
3. 输入数据,创建新节点并插入链表中。
4. 实现按序号查找的函数search,输入参数为链表头指针和目标节点的序号,返回对应节点的指针。
5. 在search函数中,遍历链表,记录当前节点的序号,直到找到目标节点或者遍历到链表末尾。
6. 如果找到目标节点,返回该节点的指针;否则返回NULL。
C语言实现:
```
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建新节点
Node* create_node(int data) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
// 插入节点到链表末尾
void insert_node(Node **head, Node *new_node) {
if (*head == NULL) {
*head = new_node;
} else {
Node *cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
}
// 按序号查找节点
Node* search(Node *head, int pos) {
Node *cur = head;
int i = 1;
while (cur != NULL && i < pos) {
cur = cur->next;
i++;
}
if (i == pos) {
return cur;
} else {
return NULL;
}
}
int main() {
Node *head = NULL;
int n, data;
printf("请输入节点个数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第%d个节点的值:", i);
scanf("%d", &data);
Node *new_node = create_node(data);
insert_node(&head, new_node);
}
int pos;
printf("请输入要查找的节点序号:");
scanf("%d", &pos);
Node *target = search(head, pos);
if (target != NULL) {
printf("目标节点的值为:%d\n", target->data);
} else {
printf("未找到目标节点\n");
}
return 0;
}
```
示例:
```
请输入节点个数:3
请输入第1个节点的值:1
请输入第2个节点的值:2
请输入第3个节点的值:3
请输入要查找的节点序号:2
目标节点的值为:2
```