用c语言,建立一个顺序表,用键盘读取元素用来删除和插入
时间: 2024-10-11 09:08:39 浏览: 31
实用算法实验_顺序表的应用
在C语言中,我们可以创建一个动态数组(使用结构体和指针)来模拟顺序表,用于读取、插入和删除元素。下面是一个基本的实现步骤:
首先,定义一个结构体`Node`表示列表中的节点:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后创建顺序表的基本函数:
```c
// 创建一个新的顺序表
Node* createList() {
Node* list = (Node*) malloc(sizeof(Node)); // 初始化链表头
list->data = -1; // 使用特殊值初始化防止越界访问
list->next = NULL;
return list;
}
// 从用户输入读取并插入元素
void insertElement(Node** head, int element) {
Node* newNode = (Node*) malloc(sizeof(Node)); // 新节点
newNode->data = element;
newNode->next = *head; // 将新节点连接到链表头部
*head = newNode; // 更新链表头
}
// 删除元素
void deleteElement(Node** head, int target) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* curr = *head;
Node* prev = NULL;
// 遍历链表寻找目标元素
while (curr != NULL && curr->data != target) {
prev = curr;
curr = curr->next;
}
// 找到目标元素,删除它
if (curr != NULL) {
if (prev == NULL) { // 如果目标元素是头结点
*head = curr->next;
} else {
prev->next = curr->next;
}
free(curr); // 释放已找到的目标节点内存
} else {
printf("Element not found.\n");
}
}
// 显示链表内容
void displayList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
```
`main`函数中可以这样操作顺序表:
```c
int main() {
Node* list = createList();
int choice, value;
do {
printf("\n1. Insert Element\n2. Delete Element\n3. Display List\n4. Exit\n");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("Enter a number to insert: ");
scanf("%d", &value);
insertElement(&list, value);
break;
case 2:
printf("Enter a number to delete: ");
scanf("%d", &value);
deleteElement(&list, value);
break;
case 3:
displayList(list);
break;
case 4:
break;
default:
printf("Invalid option!\n");
break;
}
} while (choice != 4);
return 0;
}
```
在这个示例中,用户可以选择插入、删除或显示顺序表的内容,直到选择退出。
阅读全文