已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)(笔试题)

image

/******************************************************
 *
 *  name      : SeqAdd
 *	function  :  (笔试题)已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元
 *               素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。
 *  argument
 *               @x :需要插入顺序表中的元素
 *               @manager :顺序表的地址
 *
 *  retval    : None
 *  author    : Dazz
 *  date      : 2024/4/22
 *  note      : None
 *
 * *******************************************************/
void SeqAdd(int x, SeqList_t *manager)
{
    // 错误处理
    if (NULL == manager)
    {
        printf("请输入有效地址\n");
        return;
    }

    // temp用来记录插入顺序表中的位置
    int temp = -1;

    // 遍历顺序表,找到插入顺便表中的位置
    // Last为顺序表中有效元素的下标
    for (int i = 0; i <= Last; i++)
    {
        if (x < manager[i])
            temp = i;
        break;
    }

    // 如果temp中的值仍是-1,则x比顺序表中的任一元素都要大,直接插入到顺序表的尾部
    if (-1 == temp)
    {
        manager[Last] = x;
        return;
    }

    // temp中的值不为-1的情况,即x不比顺序表中的最大的元素要大
    // 用循环将顺序表中下标为temp后(包括temp)的元素整体往后挪
    for (int i = Last; i >= temp; i--)
    {
        manager[i + 1] = manager[i];
    }

    manager[temp] = x;
}
posted @ 2024-04-22 19:38  Dazz_24  阅读(57)  评论(0)    收藏  举报