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;
    }
    
}
### 回答1: 这里的输入是指程序的输入,是为了告诉程序要处理的数据。在这种情况下,您需要输入一个正整数n,有序元素的数量。然后,您需要输入一个从小到大排列的、无重复元素的、n个元素有序。最后,程序将显示一个菜单,其中包含编号和选项。您可以根据需要选择选项,以完成相应的操作。 ### 回答2: 这道题目要求我们输入一个正整数n(1≤n≤1000)和一个重复元素的、从小到大排列的、n个元素有序,然后在屏幕上显示以下菜单(编号和选项)。具体来说,菜单为以下几个选项: 1. 查找某个元素 2. 插入某个元素 3. 删除某个元素 4. 遍历所有元素 5. 退出程序 下面我们逐一解释这些选项。 1. 查找某个元素 这个选项要求输入一个元素值,然后在有序中查找该元素是否存在。如果存在,则输出其位置;如果不存在,则输出“该元素不存在”。 2. 插入某个元素 这个选项要求输入一个元素值及其插入位置,然后在有序的对应位置插入该元素,并使有序仍保持有序状态。如果该位置已有元素,则需要将该位置及其后面的所有元素都依次后移一个位置。 3. 删除某个元素 这个选项要求输入一个元素值,然后在有序中删除该元素。如果不存在该元素,则输出“该元素不存在”;否则将该元素删除并将其后面的所有元素依次前移一个位置。 4. 遍历所有元素 这个选项要求输出有序中的所有元素,每个元素之间用一个空格隔开。 5. 退出程序 这个选项直接退出程序。 为了实现这些选项,我们可以使用不同的函数来完成不同的任务,如查找元素的函数、插入元素的函数、删除元素的函数、遍历元素的函数等等。同时,我们还需要使用一个循环来不断显示菜单、接受用户选择、并调用对应的函数执行任务,直到用户选择退出为止。 ### 回答3: 本题要求实现一个简单的有序操作系统,来对给定的无重复元素从小到大排列有序进行操作。在输入一个正整数n(1≤n≤1000)和一个有序后,屏幕上将会显示以下菜单: 1. 插入元素 2. 删除元素 3. 查找元素 4. 修改元素 5. 遍历有序 6. 退出 用户可以通过输入菜单选项来进行相应的操作: 1. 插入元素:将一个新的元素插入到有序中,使得插入后有序仍保持有序状态。 2. 删除元素:从有序中删除一个指定的元素,若有相同元素则删除最小的一个。 3. 查找元素:在有序中查找指定的元素,若存在则返回该元素有序中的位置。 4. 修改元素:修改有序中指定位置的元素。 5. 遍历有序:遍历整个有序并输出所有元素。 6. 退出:结束程序。 实现过程中需要注意以下几点: 1. 用户输入菜单选项时,若输入的选项不在菜单中或格式错误,则需要重新输入。 2. 若插入元素有序已满,则需要先扩充有序的大小再进行插入。 3. 若删除元素有序为空,则不能进行删除操作。 4. 查找元素时需要先判断有序是否为空。 5. 修改元素时需要先判断有序是否为空,以及给定位置是否合法。 6. 遍历有序时需要先判断有序是否为空。 在实现操作系统时,需要结合具体实现语言的特点,使用合适的数据结构和算法。同时也需要对各种操作的时间复杂度进行析,以提高操作系统的效率。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值