C语言从键盘输入顺序表,实现顺序表的增删改查
时间: 2024-09-26 09:03:13 浏览: 33
在C语言中,为了从键盘输入顺序表并实现其基本操作(增删改查),你需要首先定义结构体表示顺序表的元素,然后创建函数分别处理插入、删除、修改和查找。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构
typedef struct Node {
int data;
struct Node* next;
} ListNode;
// 创建新的节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 插入节点到列表末尾
void insertNode(ListNode** head, int value) {
ListNode* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
ListNode* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 删除指定值的节点
void deleteNode(ListNode** head, int value) {
ListNode* temp = *head, *prev = NULL;
if (temp != NULL && temp->data == value) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != value) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return; // 没找到该值
prev->next = temp->next;
free(temp);
}
// 修改指定位置的数据
void updateNode(ListNode** head, int index, int newValue) {
if (index >= 0 && index < indexOfLastElement(*head)) {
ListNode* temp = *head;
for (int i = 0; i < index; ++i) {
temp = temp->next;
}
temp->data = newValue;
} else {
printf("Invalid index.\n");
}
}
// 查找指定值并返回其索引(找不到则返回 -1)
int searchNode(ListNode* head, int value) {
ListNode* temp = head;
for (int i = 0; temp != NULL && temp->data != value; ++i, temp = temp->next) {
;
}
return temp == NULL ? -1 : i;
}
// 主函数获取用户输入并操作顺序表
int main() {
ListNode* head = NULL;
printf("Enter values to build a list or type 'quit' to exit:\n");
while (true) {
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: // 插入
int value;
scanf("%d", &value);
insertNode(&head, value);
break;
case 2: // 删除
int delValue;
scanf("%d", &delValue);
deleteNode(&head, delValue);
break;
case 3: // 更新
int index, newVal;
scanf("%d %d", &index, &newVal);
updateNode(&head, index, newVal);
break;
case 4: // 查找
int searchFor;
scanf("%d", &searchFor);
int foundIndex = searchNode(head, searchFor);
if (foundIndex != -1)
printf("Found at index: %d\n", foundIndex);
else
printf("Not found.\n");
break;
case 5: // 退出
return 0;
default:
printf("Invalid choice.\n");
}
}
return 0;
}
```
在这个示例中,用户可以交互地通过命令行输入选择插入、删除、更新或查找操作,以及相应的数据。注意这只是一个基础版本,实际应用可能需要处理更多边界情况和错误。
阅读全文