王道数据结构第二章顺序表第1题

目录

题目描述

解题思路

宏定义

顺序表定义

实现函数

测试代码

测试结果


题目描述

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

来源:王道p19.1

解题思路

从前往后遍历,并记录最小值下标,根据题目要求替换成表尾元素,顺序表长度减1。

宏定义

#define SqElemType int
#define MaxSize 1000

顺序表定义

typedef struct{
    SqElemType data[MaxSize];
    int length;
}SqList;

[注] 上述宏定义和结构体定义是答题时要写的答案,并不是代码实现时的定义,代码实现稍有不同,感兴趣可去“help.h”中查看。

实现函数

SqElemType WD_17_1(SqList *L){    			//传入的是L的指针
	if(L->length==0) exit(0);				//如果顺序表长度为0
	int e=0;								//定义最小值的下标
	for(int i=1;i<L->length;i++){			//下标定义时为0,所以从1开始遍历
		if(L->data[e]>L->data[i]) e=i;		//记录最小值下标 
	}
	SqElemType res=L->data[e];				//定义返回值,并赋初值为查找到的最小值
	L->data[e]=L->data[L->length-1];		//根据题目要求用顺序表最后一位填补删除的元素
	L->length--;							//顺序表长度减1
	return res;								//返回结果
}

测试代码

#include"../help.h" 
/* 
题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 
出自:王道p19.1
*/
SqElemType WD_17_1(SqList *L){    			//传入的是L的指针
	if(L->length==0) exit(0);				//如果顺序表长度为0
	int e=0;								//定义最小值的下标
	for(int i=1;i<L->length;i++){			//下标定义时为0,所以从1开始遍历
		if(L->data[e]>L->data[i]) e=i;		//记录最小值下标 
	}
	SqElemType res=L->data[e];				//定义返回值,并赋初值为查找到的最小值
	L->data[e]=L->data[L->length-1];		//根据题目要求用顺序表最后一位填补删除的元素
	L->length--;							//顺序表长度减1
	return res;								//返回结果
}
//[注] 题目条件是顺序表只有一个最小元素,本测试代码传入的顺序表可能有多个最小值,只会删除第一个 
int main(){
	for(int i=0;i<3;i++){
        printf("\n------------------第%d次测试-----------------\n\n",i+1);
        SqList L;
		InitsqList(&L);
		int len;
		int *arr=create_arr_n(30,15,&len);
		for(int i=0;i<len;i++) ListInsert(&L,1,arr[i]);
		printf("删除前:");
		print_sqList(L);
		int min=WD_17_1(&L);
		printf("\nmin:%d",min); 
		printf("\n删除后:");
		print_sqList(L);
    }
}

测试结果

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值