. 简答题 请编写顺序表的InitList、GetElem、ListInsert、ListDelete四个函数,并编写main函数调用以上四个函数实现完整的功能。
时间: 2024-09-17 20:09:44 浏览: 48
当然,我可以帮你介绍如何创建顺序表(如单链表)的`InitList`、`GetElem`、`ListInsert` 和 `ListDelete` 函数,以及如何在`main`函数中使用它们。这里假设我们有一个结构体`ListNode`表示列表节点,包含数据`data`和指向下一个节点的指针`next`。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 初始化顺序表为空
void InitList(ListNode** head) {
*head = NULL;
}
// 获取指定位置的元素(从0开始)
int GetElem(ListNode* head, int index) {
if (index >= 0 && index < ListLength(head)) {
return (*head)->data; // 如果索引有效,返回该位置的数据
} else {
printf("Index out of range.\n");
return -1; // 或者抛出错误
}
}
// 插入元素到指定位置(从0开始)
void ListInsert(ListNode** head, int index, int value) {
if (index < 0 || index > ListLength(head)) {
printf("Invalid insertion position.\n");
return;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode; // 如果列表为空,直接插入
} else {
ListNode* current = *head;
for (int i = 0; i < index; i++) {
current = current->next;
}
newNode->next = current->next; // 将新节点插入到指定位置
current->next = newNode;
}
}
// 删除指定位置的元素(从0开始)
void ListDelete(ListNode** head, int index) {
if (index < 0 || index >= ListLength(head)) {
printf("Invalid deletion position.\n");
return;
}
if (*head == NULL) {
printf("List is empty.\n");
return;
}
if (index == 0) {
ListNode* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
ListNode* current = *head;
for (int i = 0; i < index - 1; i++) {
current = current->next;
}
ListNode* toDelete = current->next;
current->next = toDelete->next;
free(toDelete);
}
// 计算列表长度
int ListLength(ListNode* head) {
int length = 0;
while (head != NULL) {
length++;
head = head->next;
}
return length;
}
// 主函数示例
int main() {
ListNode* head = NULL;
InitList(&head);
// 插入元素并打印
ListInsert(&head, 0, 10);
ListInsert(&head, 1, 20);
ListInsert(&head, 2, 30);
printf("After inserting: \n");
for (int i = 0; i <= ListLength(head); i++) {
printf("%d ", GetElem(head, i));
}
// 删除一个元素并打印
ListDelete(&head, 1);
printf("\nAfter deleting element at index 1: \n");
for (int i = 0; i <= ListLength(head); i++) {
printf("%d ", GetElem(head, i));
}
return 0;
}
```
这个程序实现了顺序表的基本操作,包括初始化、获取元素、插入和删除元素。`main`函数展示了如何使用这些函数。请注意,对于实际项目,可能还需要处理更多边界情况和错误检查。如果你有任何疑问,请随时告诉我。
阅读全文