zoukankan      html  css  js  c++  java
  • 9.7顺序表之增、删、改、查

    9.7顺序表之增、删、改、查

    向顺序表中增数据

    • 插入到顺序表头

    • 插入到顺序表中间部分

    • 插入到顺序表尾部,作为最后一个元素


    插入元素的特点

    步骤:

    • 检查传入的索引是否合法

    • 判断顺序表是否有多余的存储空间提供给插入的元素,如果没有,需要申请

    • 将元素整体向后移动一格或者直接在后一位直接插入

    插入元素图示:

    由上诉可知可以写三个方法和一个调用方法来实现:

    检查插入位置是否合法:

    int checkInt(int index)
    {
       //判断插入的位置本身是否由问题
       if(index>t.length+1||index<1)
      {
           printf("插入位置有问题!!!");
           return 0;
      }
       return index;
    }

    判断顺序表空间是否足够插入:

    table checkSize(Table t)
    {
       if(t.length == t.size)
      {
           //扩容
           t.head = (int *)realloc(t.head, (t.size+1)*sizeof(int));
           return t;
      }
       return t;
    }

    实现插入元素的方法:

    table addTable(table t, int element, int index)
    {
       //先判断传入的index
       checkInt(index);
       //如果传入的index>t.length直接扩容然后插入在最后一位
       if(index>t.length)
      {
           t.head = (int *)realloc(t.head, (t.size+1)*sizeof(int));
           index = t.length+1;
           t.head[index] = element;
      }else
      {
           //判断当前的顺序表是否有空间
           checkSize(t);
           //插入操作,需要将从插入位置开始的后续元素,逐个后移
           for(int j=t.length-1; j>=index-1; j++)
          {
               t.head[j+1] = t.head[j];
          }
           
           //后移完成后,直接将所需插入元素,添加到顺序表的相应位置
           t.head[index-1] = element;
           //让长度+1
           t.length++;
           
           //返回顺序表对象
           return t;
      }
    }

    动态数组额外申请更多物理空间使用的是 realloc 函数。并且,在实现后续元素整体后移的过程,目标位置其实是有数据的,还是 3,只是下一步新插入元素时会把旧元素直接覆盖。--->所以是将原来的该位置往后的数据整体的向后复制了一遍

    删除元素的特点

    步骤:

    • 找到目标元素

    • 并将其后续所有元素整体前移 1 个位置

    删除元素图示:

    代码示例:

    table delTable(table t, int index)
    {
       //判断索引是否违法
       checkInt(index);
       //删除操作--->从传入的位置开始,将传入的位置后面的元素复制到传入的位置处
       for(int i=index; i<t.length; i++)
      {
           t.head[i-1] = t.head[i];
      }
       
       //位置缩短
       t.length--;
       return t;
    }

    顺序表改元素

    步骤:

    • 找到目标元素

    • 直接赋值

    示例代码:

    table changeTable(table t, int element, int newElement)
    {
       //判断索引是否合法
       checkInt(index);
       //循环找位置
       for(int i=0; i<t.length; i++)
      {
           if(t.head[i] == element)
          {
               t.head[i] = newElement;
          }else
          {
               printf("元素有误");
               exit(0);
          }
      }
    }

    顺序表查找元素

    步骤:

    • 传入表格和需要查找的元素

    • 循环进行查找

    int selectEle(table t, int element)
    {
       //循环查找
       for(int j=0; j<t.length; j++)
      {
           if(t.head[j] == element)
          {
               printf("值是:");
               printf(element);
          }else
          {
               printf("找不到该值!")
          }
      }
    }

     

  • 相关阅读:
    TensorFlow入门:debug方法
    Firefox 隐藏提示:正在安装组件,以便播放此页面的音频或视频
    CentOS 6.5挂载windows NTFS硬盘
    Linux中执行shell脚本
    CentOS opera 浏览器
    CentOS 更新为网易yum源
    Centos下替换yum源为阿里云源
    CentOS常用基础命令大全
    Linux CentOS删除或重命名文件夹和文件的办法
    给Centos7装上Chromium
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15239784.html
Copyright © 2011-2022 走看看