以下是使用 C 语言定义并实现一个长度为 n 的顺序表 L,并完成您提出的要求:

#include <stdio.h>
#include <stdbool.h>

#define MAX_SIZE 100 // 定义顺序表的最大长度

typedef struct {
    int data[MAX_SIZE]; // 存储数据的数组
    int length; // 当前顺序表的长度
} SeqList;

// 初始化顺序表
void InitList(SeqList* L) {
    L->length = 0;
}

// 删除顺序表中的第一个元素
bool DeleteFirstElement(SeqList* L) {
    if (L->length == 0) {
        printf("顺序表为空,无法删除元素\n");
        return false;
    }
    
    for (int i = 0; i < L->length - 1; i++) {
        L->data[i] = L->data[i + 1];
    }
    
    L->length--;
    return true;
}

// 在顺序表末尾插入元素
bool InsertAtEnd(SeqList* L, int item) {
    if (L->length >= MAX_SIZE) {
        printf("顺序表已满,无法插入新元素\n");
        return false;
    }
    
    L->data[L->length] = item;
    L->length++;
    return true;
}

// 删除顺序表中所有值为item的数据元素
void DeleteAllElements(SeqList* L, int item) {
    int count = 0; // 记录删除的元素个数
    for (int i = 0; i < L->length; i++) {
        if (L->data[i] == item) {
            count++;
        } else {
            L->data[i - count] = L->data[i];
        }
    }
    
    L->length -= count;
}

int main() {
    int n = 10; // 定义顺序表长度为10
    SeqList L;
    InitList(&L); // 初始化顺序表
    
    // 向顺序表中插入一些元素(示例)
    for (int i = 1; i <= n; i++) {
        L.data[L.length] = i * 10;
        L.length++;
    }
    
    // 删除顺序表中的第一个元素
    DeleteFirstElement(&L);
    
    // 在顺序表末尾插入元素
    int item = 100;
    InsertAtEnd(&L, item);
    
    // 输出删除第一个元素并插入新元素后的顺序表
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);
    }
    printf("\n");
    
    // 删除顺序表中所有值为item的数据元素
    DeleteAllElements(&L, item);
    
    // 输出删除元素后的顺序表
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);
    }
    printf("\n");
    
    return 0;
}

上述代码中,首先定义了一个SeqList结构体,其中包含一个整型数组data用于存储数据,以及一个整型变量length表示当前顺序表的长度。通过InitList函数进行初始化,然后使用DeleteFirstElement函数删除顺序表中的第一个元素,使用InsertAtEnd函数在顺序表末尾插入元素。最后,使用DeleteAllElements函数删除顺序表中所有值为item的数据元素。

请注意,删除所有值为item的数据元素的算法是使用了时间复杂度为O(n),空间复杂度为O(1)的算法实现的。该算法通过遍历顺序表并记录需要删除的元素个数,然后在同一次遍历中,将不需要删除的元素向前移动至正确的位置。这样可以在一次遍历中完成删除操作,达到了时间复杂度为O(n),并且使用了常量级的额外空间。

注意,在实际应用中,可能需要根据具体需求进行适当的修改。

C语言顺序表实现:删除首元素、尾部插入、高效删除指定值元素

原文地址: http://www.cveoy.top/t/topic/oyi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录