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

目录

题目描述

解题思路

宏定义

顺序表定义

实现函数

测试代码

测试结果


题目描述

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

来源:王道p17.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;ilength;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" 
/* 
题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 
出自:王道p17.1
*/
SqElemType WD_17_1(SqList *L){    			//传入的是L的指针
	if(L->length==0) exit(0);				//如果顺序表长度为0
	int e=0;								//定义最小值的下标
	for(int i=1;ilength;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

测试结果

王道数据结构第二章顺序表第1题_第1张图片

你可能感兴趣的:(算法,数据结构,c语言,顺序表)