数据结构初阶 顺序表补充

简介: 数据结构初阶 顺序表补充

一. 题目的要求


写出三种链表的接口函数


它们的功能分别是


1 查找数的位置


2 在pos位置插入值


3 在pos位置删除值


二. 实现pos


这个其实很简单 找到一步步遍历 找到这个数字就返回 找不到就提示用户下 这

个数字不存在


int SeqListFind(SL* ps,int x)
{
  int i;
  for ( i = 0; i < ps->size; i++)
  {
    if (ps->a[i]==x)
    {
      return i;
    }
  }
  if (i==ps->size)
  {
    printf("不存在这个数");
  }
  return -1;
}


三. 实现在pos位置处插入数字


这个其实和我们的头插表示差不多


只要找到pos的位置


首先判断需不需要扩容


然后再将需要插入的数字依次向后面的排一位


之后再将这个数字插入就好


代码表示如下


void SeqListPushPos(SL* ps, int x, int y)
{
  if ((ps->size) == (ps->capacity))
  {
    int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
    ps->capacity = newcapacity;
    SLDateType* tmp = (SLDateType*)realloc(ps->a, newcapacity * sizeof(SLDateType));
    if (tmp == NULL)
    {
      perror("pushback realloc");
    }
    ps->a = tmp;
  }
  // 其实效果和头插差不多 
  // 只不过头插的起始位置有点变化了
  int i;
  for (i = ps->size - 1; i >= x; i--)
  {
    (ps->a[i + 1]) = (ps->a[i]);
  }
  ps->a[x] = y;
  ps->size++;
}


四. 在pos处删除数字


这个和头删也差不多


只需要也只不过是前面0的界限变成pos的界限


代码表示如下


void SeqListPopPos(SL* ps, int x)
{
  assert(ps->size != 0);
  int i;
  for ( i =x; i <ps->size-1 ; i++)
  {
    ps->a[i] = ps->a[i + 1];
  }
  ps->size--;
}


演示代码如下


int main()
{
  SL a1;
  SeqListInit(&a1);
  SeqListPushFront(&a1, 1);
  SeqListPushFront(&a1, 2);
  SeqListPushFront(&a1, 3);
  SeqListPushFront(&a1, 4);
  SeqListPushFront(&a1, 5);
  SeqListPrint(&a1);
  int pos=SeqListFind(&a1, 4);
  SeqListPushPos(&a1, pos, 6);
  SeqListPrint(&a1);
  pos = SeqListFind(&a1, 3);
  SeqListPopPos(&a1, pos);
  SeqListPrint(&a1);
  return 0;
}


演示效果如下


37837c5ed93243e39c615aa37fcaba0d.png


五 使用pos函数来模拟头增 头删 尾增 尾删


// 演示
SeqListPushPos(&a1, 0, 6);
SeqListPushPos(&a1, size-1, 6);
SeqListPopPos(&a1, 0, 6);
SeqListPopPos(&a1, size-1, 6);


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏


希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
存储 编译器 C语言
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
145 2
|
9月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
205 5
|
10月前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
11月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
11月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
306 3
|
11月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
137 6
|
12月前
|
存储
数据结构(顺序表)
数据结构(顺序表)
84 0
|
12月前
|
存储 算法
【数据结构】新篇章 -- 顺序表
【数据结构】新篇章 -- 顺序表
94 0
|
存储 测试技术
探索数据结构:顺序表的实现与应用
探索数据结构:顺序表的实现与应用
123 0

热门文章

最新文章