C语言实现顺序存储结构线性表

简介

线性表是最基本的数据结构之一,可以使用数组或链表实现。本文将使用 C 语言实现基于顺序存储结构的线性表,并提供详细的代码示例和解释。

代码实现c#include <stdio.h>#include <stdlib.h>

// 定义线性表结构体typedef struct { int* data; // 存储元素的数组 int max_size; // 数组最大容量 int length; // 线性表当前长度} LinearList;

// 初始化线性表void init(LinearList* list, int max_size) { list->data = (int*)malloc(max_size * sizeof(int)); list->max_size = max_size; list->length = 0;}

// 判断线性表是否为空int is_empty(LinearList* list) { return list->length == 0;}

// 判断线性表是否为满int is_full(LinearList* list) { return list->length == list->max_size;}

// 重新分配数组空间大小void resize(LinearList* list, int new_size) { if (new_size < list->length) { printf('New size cannot be smaller than current length. '); return; }

list->data = (int*)realloc(list->data, new_size * sizeof(int));    list->max_size = new_size;}

// 在尾部插入一个元素void append(LinearList* list, int element) { if (is_full(list)) { resize(list, list->max_size * 2); } list->data[list->length] = element; list->length++;}

// 指定位置插入元素void insert(LinearList* list, int position, int element) { if (is_full(list)) { resize(list, list->max_size * 2); } if (position < 0 || position > list->length) { printf('Invalid position. '); return; }

for (int i = list->length; i > position; i--) {        list->data[i] = list->data[i-1];    }    list->data[position] = element;    list->length++;}

// 指定位置删除元素void del(LinearList* list, int position) { if (position < 0 || position >= list->length) { printf('Invalid position. '); return; }

for (int i = position; i < list->length - 1; i++) {        list->data[i] = list->data[i+1];    }    list->length--;}

// 交换两个指定位置的元素void swap(LinearList* list, int position1, int position2) { if (position1 < 0 || position1 >= list->length || position2 < 0 || position2 >= list->length) { printf('Invalid positions. '); return; }

int temp = list->data[position1];    list->data[position1] = list->data[position2];    list->data[position2] = temp;}

// 元素查找,返回其下标位置int find(LinearList* list, int element) { for (int i = 0; i < list->length; i++) { if (list->data[i] == element) { return i; } } return -1;}

// 输出所有元素void display(LinearList* list) { for (int i = 0; i < list->length; i++) { printf('%d ', list->data[i]); } printf(' ');}

int main() { LinearList list; init(&list, 10);

// 初始状态    printf('初始线性表是否为空: %d

', is_empty(&list)); printf('初始线性表是否为满: %d ', is_full(&list));

// 插入元素    for (int i = 1; i <= 10; i++) {        append(&list, i);    }    printf('插入10个元素后,线性表是否为空: %d

', is_empty(&list)); printf('插入10个元素后,线性表是否为满: %d ', is_full(&list)); printf('线性表中所有元素: '); display(&list);

// 插入元素到指定位置    insert(&list, 2, 11);    printf('在位置2插入元素后,线性表中所有元素: ');    display(&list);

// 删除指定位置的元素    del(&list, 5);    printf('删除位置5的元素后,线性表中所有元素: ');    display(&list);

// 交换指定位置的元素    swap(&list, 1, 3);    printf('交换位置1和3的元素后,线性表中所有元素: ');    display(&list);

// 查找元素    int index = find(&list, 5);    printf('元素5的下标位置: %d

', index);

// 逆序输出    printf('逆序线性表中所有元素: ');    for (int i = list.length - 1; i >= 0; i--) {        printf('%d ', list.data[i]);    }    printf('

');

free(list.data);

return 0;}

代码解释

  1. 结构体定义: 使用 typedef struct 定义了线性表的结构体 LinearList,包含三个成员: - data: 指向存储元素的动态数组的指针。 - max_size: 数组的最大容量。 - length: 线性表当前的长度。2. 函数实现: 代码中实现了线性表的初始化、判断空满、重新分配空间、插入、删除、交换、查找和输出等操作函数。3. 主函数: main 函数演示了如何使用上述函数创建、操作和销毁线性表。

总结

本文介绍了如何使用 C 语言实现基于顺序存储结构的线性表,并提供了详细的代码示例和解释。你可以根据自己的需要对代码进行修改和扩展,例如添加更多操作函数或修改数据类型。

C语言实现顺序存储结构线性表:初始化、插入、删除、查找等操作

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

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