C语言:构造一个顺序表将其初始化为1,2,3,4,5。在main函数中实现将元素6插入到元素3和4之间,在main函数中实现删除第二个元素,在main函数中实现查询第2个元素和查询第一个值为4的元素的位置。
时间: 2024-10-14 22:07:29 浏览: 30
在C语言中,我们可以使用结构体和动态内存分配来创建一个顺序表。首先,我们需要定义一个结构体`Node`表示列表节点,并包含一个整数数据和指向下一个节点的指针。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化顺序表
void initialize(int n, Node** head) {
*head = (Node*)malloc(sizeof(Node));
(*head)->data = 1;
(*head)->next = NULL;
for (int i = 2; i <= n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = i;
newNode->next = (*head)->next;
(*head)->next = newNode;
}
}
// 插入元素到指定位置
void insert(int value, int position, Node** head) {
if (position < 0 || !(*head)) {
printf("Invalid position.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = (*head)->next;
if (position == 0) {
newNode->next = *head;
*head = newNode;
} else {
Node* temp = *head;
for (int i = 0; i < position - 1; i++) {
temp = temp->next;
}
newNode->next = temp->next;
temp->next = newNode;
}
}
// 删除指定位置的元素
void delete_element(int position, Node** head) {
if (position < 0 || !(*head)) {
printf("Invalid position.\n");
return;
}
if (position == 0) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
} else {
Node* prev = *head;
for (int i = 0; i < position - 1; i++) {
prev = prev->next;
}
Node* node_to_delete = prev->next;
prev->next = node_to_delete->next;
free(node_to_delete);
}
}
// 查询元素位置
int find_position(int target, Node* head) {
Node* current = head;
int position = 0;
while (current != NULL && current->data != target) {
current = current->next;
position++;
}
if (current == NULL) {
return -1; // 表示元素未找到
}
else {
return position;
}
}
int main() {
Node* head = NULL;
initialize(5, &head); // 初始化顺序表
// 插入元素6
insert(6, 2, &head);
// 删除第二个元素(位置从0开始)
delete_element(1, &head);
// 查询第2个元素的位置
int second_elem_pos = find_position(head->next->data, head);
printf("Position of the second element: %d\n", second_elem_pos);
// 查询第一个值为4的元素的位置
int fourth_elem_pos = find_position(4, head);
printf("Position of the first element with value 4: %d\n", fourth_elem_pos);
return 0;
}
```
请注意,以上代码假设插入位置是在已存在的元素之后。如果需要在任意位置插入,需稍作修改。此外,上述代码仅用于演示目的,实际项目中应考虑错误处理和内存管理。
阅读全文