数据结构c语言 创建一个顺序列表。从键盘上输入一个整数x和插入位置i,在顺序表L中查找x的插入位置。若找到则把x插入到L中并输出插入后的顺序表。
时间: 2024-09-14 07:05:34 浏览: 72
数据结构 顺序表的插入与删除算法的C语言实现
4星 · 用户满意度95%
在C语言中创建一个简单的顺序列表(也称为数组),我们可以定义一个结构体作为元素,并提供插入和查找功能。首先,我们需要定义一个结构体,例如存储整数:
```c
#include <stdio.h>
// 定义结构体存放整数
typedef struct Node {
int value;
struct Node* next; // 指向下一个节点的指针
} Node;
// 插入函数
void insert(int x, int position, Node** head) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->value = x;
newNode->next = *head; // 将新节点指向头节点
if (position == 0) { // 如果插入位置为0,即头部
*head = newNode;
return;
}
Node* current = *head;
for (int i = 0; i < position - 1 && current != NULL; i++) {
current = current->next;
}
if (current != NULL) {
newNode->next = current->next; // 在指定位置插入
current->next = newNode;
} else {
printf("Invalid insertion position.\n");
}
}
// 查找函数
int findPosition(int target, Node* head) {
Node* current = head;
int position = 0;
while (current != NULL) {
if (current->value == target)
return position; // 找到目标值,返回当前索引
current = current->next;
position++;
}
return -1; // 如果未找到,返回-1
}
// 主函数
int main() {
Node* head = NULL;
int x, position;
printf("Enter an integer to be inserted and its position: ");
scanf("%d %d", &x, &position);
// 判断插入位置是否有效
if (position <= 0) {
printf("Invalid position, must be a positive number.\n");
return 1;
}
// 插入元素
insert(x, position - 1, &head); // 减1是因为索引是从0开始的
// 输出插入后的顺序表
printf("Inserted list:\n");
printList(head);
// 查找位置
int insertPosition = findPosition(x, head);
if (insertPosition != -1)
printf("Found at position %d.\n", insertPosition + 1); // 加1因为显示位置从1开始
else
printf("Element not found in the list.\n");
return 0;
}
// 辅助函数:打印顺序列表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->value);
node = node->next;
}
printf("NULL\n");
}
```
在这个例子中,`main`函数负责获取用户输入和调用插入和查找函数,`insert`函数完成元素的插入,`findPosition`函数寻找目标值的位置,而`printList`函数用于展示当前的顺序列表。
阅读全文