数据结构学习之顺序表(各种操作合集)

顺序表(各种操作合集)

顺序表的两种创建方式:

方式1:根据函数的返回值创建

  • 通过返回值返回所申请的内存空间的首地址
  • 示例代码:
list_t *create_seq_list_1(){
   

    list_t *p = (list_t *)malloc(sizeof(list_t));
    if(NULL == p){
   

        printf("内存分配失败\n");

        exit(-1);

    }

    memset(p,0,sizeof(list_t));
    return p;

}
  • 注意事项:
  • 1.分配完内存地址空间后,一定要检查内存分配是否成功
  • 2.若内存分配失败,需要使用shell命令exit(-1)退出

方式2:根据地址传参创建

  • 使用地址传参创建顺序表;
  • 示例代码:
int create_seq_list_2(list_t **p){
   

    if(NULL == p){
   

        printf("入参为NULL\n");

        return -1;

    }

    *p = (list_t *)malloc(sizeof(list_t));

    if(NULL == *p){
   

        printf("内存分配失败\n");

        return -1;

    }

    memset(*p,0,sizeof(list_t));

    return 0;
    
}
  • 注意事项:
  • 1.所传入的形参必须是二级指针变量,因为二级指针用来存储一级指针变量的地址,即所申请的顺序表内存空间的地址
  • 2.形参传入到创建顺序表的功能函数后,一定要做入参合理性检查
  • 3.同方式1一样,分配完内存地址空间后,一定要检查内存分配是否成功

顺序表的两种插入方式:

方式1:尾插法

  • 在顺序表末端插入数据元素,代码如下:
  • 示例代码:
int insert_seq_list_1(list_t *seq_list,int data){
   

    if(NULL == seq_list){
   

        printf("入参为NULL\n");

        return -1;

    }

    if(N == seq_list->count){
   

        printf("顺序表已满,插入失败\n");

        return -1;

    }

    seq_list->a[seq_list->count].num = data;
    seq_list->count++;

    return 0;

}
  • 注意事项:
  • 1.形参传入到具有插入数据元素功能的函数后,需要做入参合理性检查
  • 2.还需要判断此时顺序表所存储的数据元素是否已满
  • 3.本示例代码中的count是计数的变量每次插入一个数据元素后,需要加1,此处易忽略

方式2:任意位置插入新数据

  • 在顺序表的任意位置插入数据元素,代码如下:
  • 43
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构中的顺序表是一种线性结构,它使用物理地址连续的存储单元按顺序存储数据元素,通常使用数组来实现。在顺序表上进行前插法操作时,需要将要插入的数据元素放在表的前面,并调整其他元素的位置。 顺序表的前插法操作可以分为以下几个步骤: 1. 首先,确定要插入的位置,即在顺序表中的哪个位置进行插入。 2. 然后,将插入位置后的所有元素向后移动一位,为新元素腾出空间。 3. 最后,将要插入的元素放入插入位置。 顺序表的前插法操作的时间复杂度是O(n),其中n是顺序表的长度,因为需要移动其他元素的位置。这意味着随着顺序表长度的增加,前插法操作的时间也会增加。 总之,顺序表的前插法操作是在顺序表中的指定位置插入一个元素,并调整其他元素的位置,这样可以实现动态的插入操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据结构顺序表](https://blog.csdn.net/bit_zyx/article/details/123391165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [数据结构与算法学习笔记-线性表(2)](https://blog.csdn.net/Cris_0525/article/details/88086049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值