C语言解决顺序表删除最小值含测试源码

大家好,我是执念斩长河,一个刚刚学习数据结构的学渣。

题目再现

设计一个算法,从顺序表L中删除最小值的元素,并返回被删元素的值,空出的位置由最后一个元素填补,若顺序表为空,则显示空表信息并退出运行。

测试效果

在这里插入图片描述

解题思路

提前申请pos放位置,和x放最小值,不断地去遍历找最小,最后找到删除,甩出x值

核心源码

DataType deleteMin(SeqList& L) {
    
    
    if (L.n == 0)
    {
    
    
        printf("L.n is NULL!\n");
        return -1;
    }
    DataType  x = L.data[0];
    int pos = 0;
    for(int i = 1;i<L.n;i++){
    
    
        if(x > L.data[i]){
    
    
            x = L.data[i];
            pos = i;
        }
    }
    L.data[pos] = L.data[L.n-1];
    L.n--;
    return x;

}

完整源码

#include<stdio.h>
#include<stdlib.h>
#define initSize 100
typedef int DataType;
typedef struct{
    
    
    DataType *data;
    int maxSize,n;
}SeqList;


void initList(SeqList& L) {
    
    
    //调用方式initList(L),输入:未初始化的顺序表L;输出;已初始化的顺序表L
    L.data = (DataType *) malloc(initSize*sizeof(DataType));
    if(!L.data) {
    
    
        printf("分配有误....\n");
        exit(1);
    }
    L.maxSize = initSize;
    L.n = 0;
}


void createList(SeqList &L,DataType A[],int n) {
    
    
    initList(L);
    for(int i = 0;i<n;i++)
        L.data[i] = A[i];
    L.n = n;
}

void printList(SeqList& L) {
    
    
    for(int i =0;i<L.n;i++)
        printf("%d ",L.data[i]);
    printf("\n");

}





DataType deleteMin(SeqList& L) {
    
    
    if (L.n == 0)
    {
    
    
        printf("L.n is NULL!\n");
        return -1;
    }
    DataType  x = L.data[0];
    int pos = 0;
    for(int i = 1;i<L.n;i++){
    
    
        if(x > L.data[i]){
    
    
            x = L.data[i];
            pos = i;
        }
    }
    L.data[pos] = L.data[L.n-1];
    L.n--;
    return x;

}

int main()
{
    
    

    SeqList A,B;
    //模拟1的情况
    int arr1[5] = {
    
    5,8,9,2,1};
    createList(A,arr1,sizeof(arr1)/sizeof(int));
    printList(A);
    int data = deleteMin(A);
    printf("Deleted:%d\n",data);
    printList(A);

    return 0;
}



参考文献

殷人昆著.数据结构与算法解析.北京:清华大学出版社,2021.4

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/120637978