首页 > 其他分享 >属性表的三道删除习题

属性表的三道删除习题

时间:2022-09-24 13:22:39浏览次数:57  
标签:return 删除 int 三道 元素 length 习题 data

顺序表的三道习题

1.在顺序表中删除第i个元素,既删除data[i-1]

1.1算法思想

  1. 判断表是否为空,如果为空则不能进行删除操作

  2. 判断删除的位置i是否合法,如果i<1或者i大于表长则不能进行删除操作

  3. 将位置i后的元素逐个前移

  4. 表长-1

1.2算法设计

int  DelList1(Sqlist &L, int i)
/*1.在顺序表L中删除ai-1。i的合法取值为1≤i≤L.length */
{
    int k;
    
    if(L.length==0)
    {
        printf("表为空,无法进行删除操作");
        return false;
    }
    
    if ((i < 1) || (i > L.length))
    {
        printf("删除位置不合法!\n");   
        return false;
    }
    
    for (k = i; k<=L.length-1; k++)
        L.data[k - 1] = L.data[k];  /*将后面的元素依次前移*/
    
    L.length--;
    return true;
}

2.在顺序表中删除第i个位置开始的k个元素,即删除data[i+k-1]

2.1算法思想

  1. 判断表是否为空,如果为空则不能进行删除操作

  2. 判断第一个位置i是否合法,如果i<1或者i大于表长则不能进行删除操作

  3. 判断第二个位置i+k是否合法,如果i+k<1或者i+k大于表长则不能进行删除操作

  4. 将位置i+k后的元素逐个前移

  5. 表长-1

2.2算法设计

int  DelList2(Sqlist &L, int i, int k)
{
    /*i的合法取值为1≤i≤L.length k的合法取值范围为 1≤i+k<=L.length  */
    int f;
    
    if(L.length==0)
    {
        printf("表为空,无法进行删除操作");
        return false;
    }
    
    if ((i < 1) || (i > L.length) )
    {
        printf("第一个位置i不合法!\n"); 
        return false;
    }
    
    if((i+k<1) || (i + k > L.length))
    {
        printf("删除位置i+k不合法!\n");    
        return false;
    }
    
    for (f = i + k; f < L.length; f++)
        L.data[f - 1] = L.data[f];  /*将后面的元素依次前移*/
    
    L.length--;
    return true;
}

3.删除表中若干个不连续的元素

如果表中相邻的两个元素之差不为1,则删除后面一位元素

3.1算法思想

  1. 判断表是否为空,如果为空则不能进行删除操作

  2. 判断表中是否只含一个元素,如果只含一个元素则不能进行删除操作

  3. 利用指示器i 比较相邻的两个元素L.data[i]和L.data[i+1]

  4. 利用循环,如果L.data[i+1]-L.data[i]!=1,则删除L.data[i+1]

  5. 表长减少删除元素的个数

3.2算法设计

int DelList3(Sqlist &L)
{
    /*在顺序表中 比较两个相邻的data是否相差只为1 如果相差值不为1 则删除后面一个元素*/
    if (L.length == 0) 
    {
        printf("表为空,无法删除\n");
        return false;
    }
    if (L.length == 1)
    {
        printf("表内元素仅为1,无法比较\n");
        return false;
    }
    
    for (int i = 0; i < L.length - 1; i++) 
    {
        if (L.data[i + 1] - L.data[i] != 1) //如果后一项和前一项之差不为1
        {
            for (int k = i+2; k < L.length; k++) //因为要删去的是后一项也就是L.data[i+1] 所以给k赋值为i+2
            {
                L.data[k - 1] = L.data[k];  /*将后面的元素依次前移*/
            }
            L.length--;
            i--;/*因为删除了后一项 所以i的值不能改变的同时还要比较a[i]与新的a[i + 1]  
                所以让这里的i减一   再加上for循环里的i++ 正好抵消*/
        }
    }
    return true;
}
 

标签:return,删除,int,三道,元素,length,习题,data
From: https://www.cnblogs.com/wlb429/p/16725471.html

相关文章

  • vector大小、数据存取、插入删除操作
    #include<iostream>#include<vector>usingnamespacestd;/*size();//返回容器中元素的个数empty();//判断容器是否为空resize(intnum);//重新指定容器的长度为......
  • windows 软链接的建立及删除
    1.mklink用法  2.创建软链接##建立d:develop链接目录,指向远程的目标服务器上的e盘的对应目录。mklink/Dd:\develop\\138.20.1.141\e$\develop##建立d:devel......
  • python之操作数据库删除创建
    importMySQLdb#创建一个数据库连接对象conn=MySQLdb.connect(host='localhost',port=3306,user='root',password='123456')#获取连接的游标......
  • 我做过的Python30道练习题
    练习题1成绩等级要求输出成绩等级A、B、C、D、E,其中90-100分为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求:-用If语句实现;-输入百分制成绩后要判断该成绩......
  • Centos中批量删除空文件及空文件夹
    linux下批量删除空文件(大小等于0的文件)的方find.-name"*"-typef-size0c|xargs-n1rm-f用这个还可以删除指定大小的文件,只要修改对应的-size参数就行,例......
  • centos系统使用rmdir命令删除空目录
    rmdir命令作用是删除空的目录,英文全称:“removedirectory”。注意:rmdir命令只能删除空目录。当要删除非空目录时,就要使用带有“-R”选项的rm命令。rmdir命令的“-p”参数......
  • Linux删除指定时间之前的文件
    要求:归删除/var/svn/svnbackup目录下创建时间为7天之前,并且文件以new开头的的所有文件或文件夹;示例:find/var/svn/svnbackup-name"new_*"-mtime-7-execrm-rf......
  • 我 在 理论物理吧 发的 多个 楼层 和 回复 被 接连 删除
    我 在 理论物理吧 发的 多个楼层和回复被接连删除  。 @ddx7171  @dons222  @物空必能  @happyird  @求实2468      还好有......
  • Oracle DBCA 静默删除以及建库的脚本
    No.1背景公司最近有一个测试环境需要重新备份恢复但是里面有6个数据库实例400多G的数据文件.一般情况下需要dropuserxxxcascade;然后执行droptablespacexxx......
  • gitlab删除远程分支后,本地还显示已删除的分支
    gitlab删除分支后,本地查看远程分支仍显示已删除的分支,解决办法1、查看远程分支gitbranch-r使用gitbranch-r命令查看远程分支,发现远程分支已经删除,但本地还显示2、......