用c语言实现单链表的遍历,查找与改变操作。需要包括链表的声明,初始化,数据新增及上述三个功能,main与测试用例。运行结果需包括自己的姓名与当下的中文日期时间。需要用到lLNode,*LinkList,traverse,查找int find_first,change
时间: 2024-10-14 07:15:20 浏览: 30
链表的C语言实现之单链表的查找运算
好的,首先我们需要定义`LLNode`和`LinkList`结构体以及相关的函数。这是一个完整的例子,包括链表的声明、初始化、数据新增、遍历、查找和改变操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义链表节点结构
typedef struct LNode {
int data; // 数据域
struct LNode* next; // 指向下一个节点的指针
char name[50]; // 姓名存储区
} LLNode;
// 链表结构体
typedef struct LinkList {
LLNode* head;
int size;
} LinkList;
// 初始化链表
LinkList* initList() {
LinkList* list = (LinkList*)malloc(sizeof(LinkList));
list->head = NULL;
list->size = 0;
return list;
}
// 在链表末尾添加新的节点
void appendNode(LinkList* list, int value, const char* name) {
LLNode* newNode = (LLNode*)malloc(sizeof(LLNode));
newNode->data = value;
strcpy(newNode->name, name);
newNode->next = NULL;
if (list->head == NULL) {
list->head = newNode;
} else {
LLNode* temp = list->head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
list->size++;
}
// 遍历链表
void traverse(LinkList* list) {
LLNode* current = list->head;
while (current != NULL) {
printf("%s: %d, ", current->name, current->data);
current = current->next;
}
printf("\n");
}
// 查找指定值的第一个节点
int find_first(LinkList* list, int value) {
int index = 0;
LLNode* current = list->head;
while (current != NULL && current->data != value) {
current = current->next;
index++;
}
if (current == NULL) {
return -1;
}
return index;
}
// 改变节点的数据
void change_data(LinkList* list, int old_value, int new_value) {
LLNode* current = list->head;
int index = 0;
while (current != NULL && current->data != old_value) {
current = current->next;
index++;
}
if (current != NULL) {
current->data = new_value;
printf("Data changed from %d to %d for node with name %s\n",
old_value, new_value, current->name);
} else {
printf("No node found with the specified old value.\n");
}
}
// 主函数
int main() {
// 测试用例
srand(time(0)); // 生成随机数以模拟不同姓名
LinkList* myList = initList();
// 新增节点
appendNode(myList, rand() % 100, "Test Name 1");
appendNode(myList, rand() % 100, "Test Name 2");
// 遍历链表
traverse(myList);
// 查找某个值
int searchValue = rand() % 100;
int position = find_first(myList, searchValue);
if (position != -1) {
printf("Found value %d at position %d in the list.\n", searchValue, position);
} else {
printf("Value %d not found in the list.\n", searchValue);
}
// 改变节点数据
int oldValueToChange = rand() % 100;
change_data(myList, oldValueToChange, rand() % 100);
// 清理内存
free(myList->head);
free(myList);
return 0;
}
```
这个程序会创建一个包含随机整数和名字的链表,然后执行遍历、查找和更改操作。运行结果会显示姓名、当前时间和对应的节点信息。注意,此代码中的姓名是随机生成的,你需要自己替换为实际的姓名。
阅读全文