数据结构c语言版:顺序表

这篇具有很好参考价值的文章主要介绍了数据结构c语言版:顺序表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

顺序表的定义

   顺序表是一种线性数据结构,它由一组连续的存储单元组成,用来存储具有相同数据类型的元素。顺序表中的元素按照逻辑顺序依次存放,并且可以通过索引来访问和修改元素。


顺序表的实现方式

       两种:静态顺序表和动态顺序表。

  • 静态顺序表:
    静态顺序表使用
    静态数组来实现,需要在创建顺序表时提前确定顺序表的大小。静态顺序表的大小是固定的,一旦分配了固定大小的存储空间,就不能动态地改变大小。因此,静态顺序表的容量是有限的,如果插入的元素超过了容量,就会导致溢出。
  •        优点:可以直接通过下标直接访问元素,访问元素速度快,时间复杂度是O(1)。
  •        缺点:插入与删除元素的操作比较耗时,需要移动其他元素,时间复杂度位O(n)。
  • 动态顺序表:
  • 动态顺序表使用动态数组来实现,可以根据需要动态调整顺序表的大小。动态顺序表的大小是可变的,当插入的元素超过当前容量时,会自动扩容,当删除元素后,如果剩余容量过多,可以缩小容量,以节省内存空间。
  •        优点:可以根据动态调整大小,灵活性较高。
  •        缺点:在插入和删除元素时,可能需要重新分配存储空间,导致一定的时间开销。

    静态顺序表的例子

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

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

// 定义结构体,表示静态顺序表
struct SeqList 
{
    int data[MAX_SIZE];  // 数据数组
    int length;          // 当前表长
};

// 初始化顺序表
void initSeqList(struct SeqList* list) 
{
    list->length = 0;  // 初始化表长为0
}

// 插入元素到顺序表
int insertElement(struct SeqList* list, int position, int value) 
{
    // 检查插入位置的有效性
    if (position < 1 || position > list->length + 1 || list->length >= MAX_SIZE) 
    {
        printf("插入位置无效或表满,插入失败\n");
        return 0;  // 插入失败
    }

    // 将插入位置及之后的元素后移
    for (int i = list->length; i >= position; i--) 
    {
        list->data[i] = list->data[i - 1];
    }

    // 在插入位置处插入新元素
    list->data[position - 1] = value;

    // 表长加1
    list->length++;

    printf("插入成功\n");
    return 1;  // 插入成功
}

// 删除顺序表中指定位置的元素
int deleteElement(struct SeqList* list, int position) 
{
    // 检查删除位置的有效性
    if (position < 1 || position > list->length) 
    {
        printf("删除位置无效,删除失败\n");
        return 0;  // 删除失败
    }

    // 将删除位置之后的元素前移
    for (int i = position; i < list->length; i++) 
    {
        list->data[i - 1] = list->data[i];
    }

    // 表长减1
    list->length--;

    printf("删除成功\n");
    return 1;  // 删除成功
}

// 打印顺序表中的元素
void printSeqList(struct SeqList* list) 
{
    printf("顺序表元素:");
    for (int i = 0; i < list->length; i++) 
    {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

int main() 
{
    // 声明并初始化顺序表
    struct SeqList myList;
    initSeqList(&myList);

    // 在顺序表中插入元素
    insertElement(&myList, 1, 10);
    insertElement(&myList, 1, 20);
    insertElement(&myList, 1, 5);
    insertElement(&myList, 1, 6);
    // 打印顺序表
    printSeqList(&myList);

    // 删除顺序表中的元素
    deleteElement(&myList, 1);

    // 打印删除后的顺序表
    printSeqList(&myList);

    return 0;
}

上述程序实现了一个简单的静态顺序表,包括初始化、插入、删除和打印操作。大家可以自己修改插入,删除数据,体会其中的奥秘。

效果

数据结构c语言版:顺序表,数据结构,数据结构,c语言,开发语言


动态顺序表的例子

#include <stdio.h>
#include <stdlib.h>

// 定义动态顺序表的初始容量和增量
#define INIT_CAPACITY 10
#define INCREMENT 5

// 定义结构体,表示动态顺序表
struct SeqList 
{
    int* data;          // 数据指针
    int length;         // 当前表长
    int capacity;       // 当前容量
};

// 初始化顺序表
void initSeqList(struct SeqList* list) 
{
    list->data = (int*)malloc(INIT_CAPACITY * sizeof(int));  // 分配初始容量的内存
    list->length = 0;  // 初始化表长为0
    list->capacity = INIT_CAPACITY;  // 初始化容量为初始容量
}

// 销毁顺序表
void destroySeqList(struct SeqList* list) 
{
    free(list->data);  // 释放动态分配的内存
    list->data = NULL;  // 将指针置为空
    list->length = 0;  // 表长置为0
    list->capacity = 0;  // 容量置为0
}

// 打印顺序表中的元素
void printSeqList(struct SeqList* list) 
{
    printf("顺序表元素:");
    for (int i = 0; i < list->length; i++) 
    {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

// 自动增容
void increaseCapacity(struct SeqList* list) 
{
    int* newData = (int*)realloc(list->data, (list->capacity + INCREMENT) * sizeof(int));  // 重新分配内存
    if (newData != NULL) 
    {  // 分配成功
        list->data = newData;  // 将指针指向新的内存
        list->capacity += INCREMENT;  // 容量增加
        printf("自动增容成功,容量增加到%d\n", list->capacity);
    }
    else 
    {  // 分配失败
        printf("自动增容失败\n");
    }
}

// 插入元素到顺序表
int insertElement(struct SeqList* list, int position, int value) 
{
    // 检查插入位置的有效性
    if (position < 1 || position > list->length + 1) 
    {
        printf("插入位置无效,插入失败\n");
        return 0;  // 插入失败
    }

    // 如果表满,自动增容
    if (list->length >= list->capacity) 
    {
        increaseCapacity(list);
    }

    // 将插入位置及之后的元素后移
    for (int i = list->length; i >= position; i--) 
    {
        list->data[i] = list->data[i - 1];
    }

    // 在插入位置处插入新元素
    list->data[position - 1] = value;

    // 表长加1
    list->length++;

    printf("插入成功\n");
    return 1;  // 插入成功
}

// 删除顺序表中指定位置的元素
int deleteElement(struct SeqList* list, int position) 
{
    // 检查删除位置的有效性
    if (position < 1 || position > list->length) 
    {
        printf("删除位置无效,删除失败\n");
        return 0;  // 删除失败
    }

    // 将删除位置之后的元素前移
    for (int i = position; i < list->length; i++) 
    {
        list->data[i - 1] = list->data[i];
    }

    // 表长减1
    list->length--;

    printf("删除成功\n");
    return 1;  // 删除成功
}

// 查找元素在顺序表中的位置
int searchElement(struct SeqList* list, int value) 
{
    for (int i = 0; i < list->length; i++) 
    {
        if (list->data[i] == value) 
        {
            printf("元素%d在顺序表中的位置是%d\n", value, i + 1);
            return i + 1;  // 返回位置
        }
    }

    printf("元素%d不在顺序表中\n", value);
    return 0;  // 查找失败
}

int main() 
{
    // 声明并初始化顺序表
    struct SeqList myList;
    initSeqList(&myList);

    // 在顺序表中插入元素
    insertElement(&myList, 1, 10);
    insertElement(&myList, 2, 20);
    insertElement(&myList, 1, 5);

    // 打印顺序表
    printSeqList(&myList);

    // 删除顺序表中的元素
    deleteElement(&myList, 2);

    // 打印删除后的顺序表
    printSeqList(&myList);

    // 查找元素在顺序表中的位置
    searchElement(&myList, 20);
    searchElement(&myList, 30);

    // 销毁顺序表
    destroySeqList(&myList);

    return 0;
}

效果

数据结构c语言版:顺序表,数据结构,数据结构,c语言,开发语言文章来源地址https://www.toymoban.com/news/detail-780789.html

到了这里,关于数据结构c语言版:顺序表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构|C语言版】顺序表

    各位小伙伴大家好!小编来给大家讲解一下数据结构中顺序表的相关知识。 【概念】数据结构是计算机存储、组织数据的⽅式。 数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合 数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数

    2024年04月16日
    浏览(24)
  • 【数据结构】顺序表---C语言版

    顺序表是一种常见的数据结构,今天就让我来带领大家一起学习一下吧! 不会再休息,一分一毫了,OK,let’s go! 线性表(linear list)是n个具有 相同特性的数据元素 的有限序列。 线性表是一种在实际中广泛使 用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符

    2024年02月04日
    浏览(24)
  • 【数据结构】C语言实现顺序表

    顺序表是用顺序存储方式存放的线性表(可以理解为数组的存储方式),表中的元素在内存中彼此相邻。 静态存储:在定义时就确定了顺序表的大小,并且之后顺序表的大小不会改变(即使之后空间不够用了,也无法增加) 动态存储:线性表的大小可以根据需要更改(顺序

    2024年02月08日
    浏览(30)
  • 数据结构——顺序表(C语言版)

    顺序表是数据结构中最基本的一种线性表,它以一段连续的存储空间来存储数据元素,元素之间的顺序由它们在内存中的位置来决定。在C语言中,我们通常使用数组来实现顺序表。 目录 顺序表的结构定义 顺序表的基本操作 应用实例 顺序表的结构定义 首先,我们需要定义一

    2024年04月10日
    浏览(29)
  • 顺序表—C语言实现数据结构

    本期带大家一起来用C语言代码实现顺序表🌈🌈🌈 顺序表是一段物理地址连续的存储单元,依次存储数据元素的线性结构。分为静态顺序表与动态顺序表。 🍊 🍋 🍒 静态顺序表 :使用定长数组用来存储数据 优点 :操作简单,代码实现容易 缺点 :定长数组很受限制,数

    2023年04月24日
    浏览(29)
  • 数据结构c语言版:顺序表

        顺序表是一种 线性数据结构 ,它由一组连续的存储单元组成,用来存储具有相同数据类型的元素。顺序表中的元素按照逻辑顺序依次存放,并且可以通过索引来访问和修改元素。         两种:静态顺序表和动态顺序表。 静态顺序表: 静态顺序表使用 静态数组 来实现

    2024年02月02日
    浏览(30)
  • 数据结构(c语言版) 顺序表

    2024年02月05日
    浏览(22)
  • 【数据结构】C语言实现顺序栈

    大家好,很高兴又和大家见面啦!!! 在上一个篇章中,我们介绍了栈的基本概念,以及栈中的重要术语。通过介绍我们知道了栈的本质也是一种线性表,只不过它是一种操作受限的线性表。因此栈的实现方式与线性表的实现实际上是大同小异的。下面我们就来介绍一下如何

    2024年01月19日
    浏览(31)
  • 【数据结构|C语言版】顺序表应用

    上期回顾: 【数据结构|C语言版】顺序表 个人主页: C_GUIQU 各位小伙伴大家好!上期小编给大家讲解了数据结构中的顺序表,接下来讲讲顺序表该如何应用。 (1)能够保存联系人的姓名、年龄、性别、电话、住址 (2)添加联系人信息 (3)删除联系人信息 (4)修改联系人信

    2024年04月16日
    浏览(19)
  • 【数据结构】C语言实现顺序表(超级详细)

    目录 概念及结构 接口函数实现 顺序表的初始化 容量判断  顺序表尾插  顺序表尾删 顺序表头插 顺序表头删 顺序表查找 顺序表指定位置插入 顺序表指定位置删除 打印顺序表 销毁顺序表 顺序表完整代码 顺序表作为线性表的一种,它是用一段 物理地址连续的存储单元依次

    2024年04月10日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包