数据结构3


//根据元素删除

int delete_element(sqlist *p, data_type element)
{
    if (NULL == p || len_empty(p))
    {
        printf("Null Or Error");
        return -1;
    }
    int index = search_element(p, element); //根据元素查找下表
    if (index == -1)
    {
        printf("Null Or Error");
        return -1;
    }

    int result = delete_index(p, index);
    if (result)
    {
        printf("delete success \n");
        return 0;
    }
    else
    {
        return -1;
    }
}

//根据元素修改

int edit_element(sqlist *p, data_type element, data_type element_edit)
{
    if (NULL == p || len_empty(p))
    {
        printf("Null Or Error");
        return -1;
    }
    // p->data[index] = element;
    int index = search_element(p, element); //根据元素查找下表
    if (index == -1)
    {
        return -1;
    }
    int result = edit_index(p, index, element_edit);
    if (result)
    {
        printf("edit success \n");
        return 0;
    }
    else
        return -1;

    // for (int i = 0; i < p->len; i++)
    // {
    //     /* code */
    //     if (p->data[i] == element)
    //     {
    //         p->data[i] = element_edit;
    //     }
    // }
    // printf("edit success \n");
    // return 0;
}

//顺序表去重

void list_ws(sqlist *p)
{
    for (int i = 0; i < p->len - 1; i++)
    {
        for (int j = i + 1; j < p->len; j++)
        {
            if (p->data[i] == p->data[j])
            {
                delete_index(p, j);
                j--; //防止漏删
            }
        }
    }
}

//顺序表排序

void list_bubble(sqlist *p)
{
    for (int i = 1; i < p->len; i++)
    {
        /* code */
        for (int j = 0; j < p->len - i; j++)
        {
            /* code */
            if (p->data[j] > p->data[j + 1])
            {
                /* code */
                data_type t = p->data[j];
                p->data[j] = p->data[j + 1];
                p->data[j + 1] = t;
            }
        }
    }
}

//顺序表合并

sqlist * list_double(sqlist *a, sqlist *b, sqlist *c)
{  
    int index_a=0;
    int index_b=0;
    //比较ab两个数组同下表的值,把最大的给c
    //两个数组的下表都小于c的下表证明都有数据给c有一个下表>=c的下表结束 ,然后单独把剩余的值给c
    //比较
    while (index_a < c->len && index_b < c->len)
    {
        if (a->data[index_a] > b->data[index_b])
        {
            c->data[c->len] = a->data[index_a];
            c->len++;
            index_a++;
        }
        else
        {
            c->data[c->len] = b->data[index_b];
            c->len++;
            index_b++;
        }
    }
        // //ab的下表必须大于顺序标的下表才证明数据完全便利完
    // //把a剩余元素给c
    while (index_a < c->len)
    {
        c->data[c->len] = a->data[index_a];
        c->len++;
        index_a++;
    }
    while (index_b < c->len)
    {
        c->data[c->len] = b->data[index_b];
        c->len++;
        index_b++;
    }
    // output_element(c);
    printf("double success\n");
   return c;
    // while (index_a < a->len && index_b < b->len)
    // {
    //     /* code */
    //     if (a->data[index_a] > b->data[index_b])
    //     {
    //         c->data[c->len] = a->data[index_a];
    //         c->len++;
    //         index_a++;
    //     }
    //     else
    //     {
    //         c->data[c->len] = b->data[index_b];
    //         c->len++;
    //         index_b++;
    //     }
    // }
    // //ab的下表必须大于顺序标的下表才证明数据完全便利完
    // //把a剩余元素给c
    // while (index_alen)
    // {
    //         c->data[c->len] = a->data[index_a];
    //         c->len++;
    //         index_a++;
    // }
    //     //把b剩余元素给c
    // while (index_blen)
    // {
    //         c->data[c->len] = b->data[index_b];
    //         c->len++;
    //         index_b++;
    // }
}

//顺序表空间释放

sqlist *free_space(sqlist *p)
{
    if (NULL == p)
    {
        return NULL;
    }
    free(p);
    p = NULL;
    printf("end free\n");
    return p;
}

你可能感兴趣的:(数据结构,windows)