用C语言实现线性表的以下功能: 1.初始化顺序表2.插入数据到顺序表3.查询指定元素在顺序表中的位置4.通过指定位置删除顺序表的节点5.修改指定位置的元素
时间: 2024-09-29 12:07:00 浏览: 46
在C语言中,我们可以使用数组或链表来实现顺序表。这里我们以动态数组(即单向链表)为例来实现上述功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指针指向下一个节点
} ListNode;
// 初始化顺序表函数
ListNode* initList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode)); // 创建头节点
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->next = NULL; // 设置初始为空
return head;
}
// 插入数据到顺序表函数
void insert(ListNode** head, int data) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
// 查询指定元素在顺序表中的位置函数
int search(ListNode* head, int target) {
ListNode* current = head;
int index = 0;
while (current != NULL && current->data != target) {
current = current->next;
index++;
}
if (current == NULL) {
return -1; // 如果未找到,返回-1
} else {
return index; // 返回元素的位置
}
}
// 删除顺序表中指定位置的节点函数
void delete(ListNode** head, int position) {
if (*head == NULL || position <= 0) {
return; // 空表或非法位置处理
}
ListNode* temp = *head;
for (int i = 0; i < position - 1; i++) {
temp = temp->next;
}
if (temp == NULL) {
printf("Invalid position.\n");
return;
}
ListNode* toDelete = temp->next;
temp->next = toDelete->next;
free(toDelete); // 释放内存
}
// 修改指定位置的元素函数
void modify(ListNode** head, int position, int newData) {
if (*head == NULL || position <= 0) {
return;
}
ListNode* current = *head;
for (int i = 0; i < position - 1; i++) {
current = current->next;
}
if (current == NULL) {
printf("Invalid position.\n");
return;
}
current->data = newData;
}
int main() {
// 示例用法
ListNode* list = initList();
insert(&list, 1);
insert(&list, 2);
insert(&list, 3);
printf("Element at position 1: %d\n", search(list, 2)); // 输出2
delete(&list, 1); // 删除第一个元素
modify(&list, 0, 0); // 修改第一个元素
return 0;
}
```
阅读全文