大家好,我是执念斩长河,一个刚刚学习数据结构的学渣。
题目再现
设计一个算法,从顺序表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