|
发表于 2024-3-21 23:17:29
|
显示全部楼层
首先,让我们来创建一个顺序表的结构和运算定义的头文件 `seqList.h`,其中包含了顺序表的基本操作和算法实现。
- ++
- #ifndef SEQLIST_H
- #define SEQLIST_H
- #define MAX_SIZE 100 // 定义顺序表的最大长度
- typedef struct {
- int data[MAX_SIZE]; // 顺序表的数据域
- int length; // 顺序表的当前长度
- } SeqList;
- // 初始化顺序表
- void init(SeqList *list);
- // 判断顺序表是否为空
- int isEmpty(SeqList list);
- // 判断顺序表是否已满
- int isFull(SeqList list);
- // 获取顺序表的长度
- int getLength(SeqList list);
- // 在指定位置插入元素
- int insert(SeqList *list, int index, int data);
- // 删除指定位置的元素
- int delete(SeqList *list, int index);
- // 获取指定位置的元素
- int getElem(SeqList list, int index, int *data);
- // 查找指定元素的位置
- int locateElem(SeqList list, int data);
- // 打印顺序表中的所有元素
- void printList(SeqList list);
- #endif
复制代码
接下来在 `seqList.c` 文件中实现顺序表的各种操作。
- ++
- #include <stdio.h>
- #include "seqList.h"
- // 初始化顺序表
- void init(SeqList *list) {
- list->length = 0;
- }
- // 判断顺序表是否为空
- int isEmpty(SeqList list) {
- return (list.length == 0);
- }
- // 判断顺序表是否已满
- int isFull(SeqList list) {
- return (list.length == MAX_SIZE);
- }
- // 获取顺序表的长度
- int getLength(SeqList list) {
- return list.length;
- }
- // 在指定位置插入元素
- int insert(SeqList *list, int index, int data) {
- if (index < 0 || index > list->length)
- return 0; // 插入位置不合法
- if (isFull(*list))
- return 0; // 顺序表已满
- for (int i = list->length - 1; i >= index; i--) {
- list->data[i + 1] = list->data[i]; // 元素后移
- }
- list->data[index] = data;
- list->length++;
-
- return 1;
- }
- // 删除指定位置的元素
- int delete(SeqList *list, int index) {
- if (index < 0 || index >= list->length)
- return 0; // 删除位置不合法
- for (int i = index; i < list->length - 1; i++) {
- list->data[i] = list->data[i + 1]; // 元素前移
- }
- list->length--;
-
- return 1;
- }
- // 获取指定位置的元素
- int getElem(SeqList list, int index, int *data) {
- if (index < 0 || index >= list.length)
- return 0; // 获取位置不合法
- *data = list.data[index];
-
- return 1;
- }
- // 查找指定元素的位置
- int locateElem(SeqList list, int data) {
- for (int i = 0; i < list.length; i++) {
- if (list.data[i] == data) {
- return i; // 找到元素的位置
- }
- }
-
- return -1; // 未找到元素
- }
- // 打印顺序表中的所有元素
- void printList(SeqList list) {
- for (int i = 0; i < list.length; i++) {
- printf("%d ", list.data[i]);
- }
- printf("\n");
- }
复制代码
现在你可以在测试主程序中使用头文件 `seqList.h` 来操作顺序表。
- ++
- #include <stdio.h>
- #include "seqList.h"
- int main() {
- SeqList list;
- init(&list);
- insert(&list, 0, 10);
- insert(&list, 1, 20);
- insert(&list, 2, 30);
- int data;
- getElem(list, 1, &data);
- printf("Element at index 1: %d\n", data); // Output: 20
- int index = locateElem(list, 30);
- printf("Element 30 is at index: %d\n", index); // Output: 2
- delete(&list, 1);
- printList(list); // Output: 10 30
- return 0;
- }
复制代码
这就是一个简单的顺序表实现,你可以根据需要添加更多的操作和算法。请注意,在测试主程序中只使用头文件 `seqList.h`,而将具体实现放在 `seqList.c` 文件中,以便提高代码的可读性和可维护性。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|