数据结构线性表,没啥思路

img


数据结构线性表,没啥思路,来个提醒或给个答案呗。abcsde

基于Monster 组和GPT的调写:
1

int deleteMin(List* list) {
    if (list == NULL || list->size == 0) {
        printf("Error: Empty List\n");
        exit(1);
    }
    int minIndex = 0;
    int minValue = list->data[0];
    for (int i = 1; i < list->size; i++) {
        if (list->data[i] < minValue) {
            minIndex = i;
            minValue = list->data[i];
        }
    }
    int lastValue = list->data[list->size - 1];
    list->data[minIndex] = lastValue;
    list->size--;
    return minValue;
}


2.

void deleteRange(List* list, int t) {
    if (list == NULL || list->size == 0) {
        printf("Error: Empty List\n");
        exit(1);
    }
    int writeIndex = 0;
    for (int i = 0; i < list->size; i++) {
        if (list->data[i] < t) {
            list->data[writeIndex++] = list->data[i];
        }
    }
    list->size = writeIndex;
}



3.

void deleteSortedRange(List* list, int t) {
    if (list == NULL || list->size == 0) {
        printf("Error: Empty List\n");
        exit(1);
    }
    int writeIndex = 0;
    for (int i = 0; i < list->size; i++) {
        if (list->data[i] < t) {
            list->data[writeIndex++] = list->data[i];
        } else {
            break;
        }
    }
    list->size = writeIndex;
}


4.

List* mergeSortedLists(List* list1, List* list2) {
    if (list1 == NULL || list1->size == 0) {
        return list2;
    } else if (list2 == NULL || list2->size == 0) {
        return list1;
    }
    List* mergedList = createList(list1->size + list2->size);
    int i = 0, j = 0, k = 0;
    while (i < list1->size && j < list2->size) {
        if (list1->data[i] < list2->data[j]) {
            mergedList->data[k++] = list1->data[i++];
        } else {
            mergedList->data[k++] = list2->data[j++];
        }
    }
    while (i < list1->size) {
        mergedList->data[k++] = list1->data[i++];
    }
    while (j < list2->size) {
        mergedList->data[k++] = list2->data[j++];
    }
    mergedList->size = k;
    return mergedList;
}


5.

void removeDuplicates(List* list) {
    if (list == NULL || list->size == 0) {
        printf("Error: Empty List\n");
        exit(1);
    }
    int writeIndex = 0;
    for (int i = 0; i < list->size; i++) {
        if (i == 0 || list->data[i] != list->data[i-1]) {
            list->data[writeIndex++] = list->data[i];
        }
    }
    list->size = writeIndex;
}


就是链表,涉及到链表排序和遍历