写一个带头结点的单链表,要求定义节点中包含数据元素data和一个指向下一个结点的指针next,并以该单链表实现一个链式存储的顺序表,实现增删改查功能,且有菜单
时间: 2024-09-15 16:10:17 浏览: 43
首先,我们来定义一个结构体`Node`表示链表中的节点,包括数据域`data`和指向下一个节点的指针`next`:
```c
typedef struct Node {
int data; // 数据元素
struct Node* next; // 指向下一个节点的指针
} Node;
```
接下来,我们将创建一个单链表的头结点`head`以及对应的链表操作函数(插入、删除、查找和打印):
1. 插入函数(`insert`):用于在链表尾部添加新节点
2. 删除函数(`delete`):根据值查找并移除节点
3. 修改函数(`update`):更新指定位置的节点数据
4. 查找函数(`search`):找到特定值的节点
5. 打印链表(`print_list`):遍历链表并显示所有节点
这是一个简单的链表管理器的示例代码:
```c
// 初始化空链表
Node* head = NULL;
// 插入节点
void insert(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = head;
if (head != NULL) {
head->next = newNode;
} else {
head = newNode;
}
}
// 删除节点
void delete(int value) {
Node* current = head, *previous = NULL;
while (current != NULL && current->data != value) {
previous = current;
current = current->next;
}
if (current == NULL) return; // 如果没找到,则返回
if (previous == NULL) { // 如果要删除的是头节点
head = current->next;
} else {
previous->next = current->next;
}
free(current);
}
// 更新节点
void update(int oldValue, int newValue) {
Node* current = head;
while (current != NULL) {
if (current->data == oldValue) {
current->data = newValue;
break;
}
current = current->next;
}
}
// 查找节点
Node* search(int value) {
Node* current = head;
while (current != NULL) {
if (current->data == value) {
return current;
}
current = current->next;
}
return NULL; // 如果没有找到,返回NULL
}
// 打印链表
void print_list() {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
```
对于菜单功能,你可以编写一个控制循环,让用户选择操作(如插入、删除、修改、查询或退出)。具体菜单代码可以根据需求来设计,这里简单举例:
```c
while (1) {
int choice;
printf("\n1. Insert\n2. Delete\n3. Update\n4. Search\n5. Print List\n6. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1: insert(getIntFromUser()); break;
case 2: delete(getIntFromUser()); break;
case 3: update(getIntFromUser(), getIntFromUser()); break;
case 4: if ((current = search(getIntFromUser())) != NULL)
printf("Found: %d\n", current->data);
else printf("Not Found\n");
break;
case 5: print_list(); break;
case 6: exit(0); // 退出程序
default: printf("Invalid choice.\n");
}
}
```
其中`getIntFromUser()`是一个辅助函数,用来从用户那里获取整数输入。
阅读全文