6-7 有序表的增删改查操作 (20分)

6-7 有序表的增删改查操作 (20分)

首先输入一个正整数N(1≤N≤1000)和一个无重复元素的、从小到大排列的、N个元素的有序表,然后在屏幕上显示以下菜单(编号和选项)。

[1] Insert
[2] Delete
[3] Update
[4] Query
[Other option] End
用户可以反复对该有序表进行插入、删除、修改和查找操作,也可以选择结束。当用户输入编号1~4和相关参数时,将分别对该有序表进行插入、删除、修改和查找操作,输入其他编号,则结束操作。

本题要求实现4个函数,分别在有序表(数组)中插入、删除、修改、查找一个值。

函数接口定义:
int insert(int a[ ], int value);
int del(int a[ ], int value);
int modify(int a[ ], int value1, int value2);
int query(int a[ ], int value);
函数insert在有序数组a中插入一个值为value的元素,如果在数组a中已有值为value的元素,则返回-1。

函数del删除有序数组a中等于value的元素,如果在数组a中没有找到值为value的元素,则返回-1。

函数modify将有序数组a中等于value1的元素,替换为value2 ,如果在数组a中没有找到值为value1的元素或者value2已在数组a中存在,则返回-1。

函数query用二分法在有序数组a中查找元素value,如果找到,则返回相应的下标;如果没有找到,则返回-1。
代码如下:

int insert(int a[ ], int value)
{
    int flag = 0,i = 0;
    for(i;i < Count;i++)
    {
        if(value==a[i])
        flag++;
        
    }
    if(flag!=0)return-1;
    else
    {
        for(i = 0;value>a[i];i++);
        for(int j = Count;j!=i;j--)
        a[j]=a[j-1];
        a[i] = value;
        Count++;
        return i;
    }
    

}

int del(int a[ ], int value)
{
    int flag = 0,i = 0;
    for(i;i < Count;i++)
    {
        if(value==a[i])
        flag++;
        
    }
    if(flag==0)return-1;
    else
    {
        for(i = 0;value!=a[i];i++);//cout << "i=" << i << endl;
        for(int j = i;j<Count-1;j++)
        a[j]=a[j+1];
        Count--;
        return i;
    }
    
}

int query(int a[ ], int value)
{
    int i = Count/2;   
    int flag=0;
    if(a[i]>value)
    for(i;i >= 0;i--)
    {
        if(value==a[i])
        {
        flag++;
        break;
        }
      
    }
    else if(a[i]==value)return i;
    else
    {
      
        for(i;i<Count;i++)
        if(value==a[i])
        {
        flag++;
        
        break;
        }

    }
    //cout << "flag=" << flag << endl;
    if(flag==0)return-1;
    else return i;
}
int modify(int a[ ], int value1, int value2)
{
    int flag1 = 0,flag2 = 0,i = 0;
    for(i;i < Count;i++)
    {
        if(value2==a[i])
        flag1++;//value2的个数
        if(value1==a[i])
        flag2++;//value1的个数
    }
    if(flag1!=0||flag2==0)return-1;
    else
    {
        int index = del(a,value1);
        index =insert(a,value2);
        return index;
    }
    
}
  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值