C语言构造一个顺序表并将其初始化。将顺序表初始化为1,2,3,4,5 并实现顺序表的插入、删除、查询运算算法。(程序完整可运行)
时间: 2024-10-13 13:07:37 浏览: 60
在C语言中,我们可以使用结构体(struct)来创建一个简单的顺序表,并使用数组来存储元素。首先,我们定义一个结构体`Node`表示链表节点,包含数据和指向下一个节点的指针。接着,我们会创建一个全局变量`head`作为头结点,用于整个列表。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构
typedef struct Node {
int data;
struct Node* next; // 指向下一个节点
} Node;
// 初始化顺序表
void initializeList(Node** head, int arr[], int size) {
*head = (Node*)malloc(sizeof(Node)); // 分配头节点内存
(*head)->data = arr[0]; // 设置头节点的数据
for (int i = 1; i < size; i++) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 分配新节点内存
newNode->data = arr[i];
newNode->next = *head; // 新节点指向当前头节点
*head = newNode; // 更新头节点
}
}
// 插入元素到顺序表
void insertElement(Node** head, int data, int index) {
if (index < 0 || index > size()) { // 避免越界
printf("Invalid index.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (index == 0) {
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
for (int i = 0; i < index - 1; i++) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 删除指定位置的元素
void deleteElement(Node** head, int index) {
if (index < 0 || index >= size()) {
printf("Invalid index.\n");
return;
}
if (index == 0) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
} else {
Node* current = *head;
for (int i = 0; i < index - 1; i++) {
current = current->next;
}
Node* temp = current->next;
current->next = temp->next;
free(temp);
}
}
// 查询指定索引的元素
int searchElement(Node* head, int index) {
if (index < 0 || index >= size()) {
printf("Invalid index.\n");
return -1; // 如果索引无效,则返回-1
}
Node* current = head;
for (int i = 0; i <= index; i++) {
if (current->data == arr[index]) {
return current->data;
}
current = current->next;
}
return -1; // 如果未找到,则返回-1
}
// 计算顺序表长度
int size(Node* head) {
int count = 0;
while (head != NULL) {
count++;
head = head->next;
}
return count;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int listSize = sizeof(arr) / sizeof(arr[0]);
Node* head = NULL;
initializeList(&head, arr, listSize);
printf("Initial list: ");
printList(head);
insertElement(&head, 6, 2); // 在第2位插入6
printf("\nList after insertion: ");
printList(head);
deleteElement(&head, 1); // 删除第一个元素
printf("\nList after deletion: ");
printList(head);
int target = searchElement(head, 3); // 查找第三个元素
if (target != -1)
printf("\nElement at position 3: %d\n", target);
else
printf("\nElement not found.\n");
return 0;
}
// 打印顺序表函数
void printList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
```
这个示例包含了顺序表的初始化、插入、删除和查询操作。注意,这个例子假设你有一个名为`arr`的数组提供初始值。你可以根据需要修改`main`函数来测试其他情况。
阅读全文