王道数据结构----顺序表部分综合题----01(完整可执行代码)

文章介绍了如何在动态顺序表中删除具有最小值的元素,通过遍历找到最小值并将其替换为最后一个元素,同时返回被删除的最小值。代码给出了完整的初始化、删除操作和主函数示例。
摘要由CSDN通过智能技术生成
  • 题目:从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并推出运行。

  • 解题思路:
  • 1、首先这是一个顺序表问题-----------先定义一个动态顺序表
  • 2、实现代码的方法部分,这题比较简单,形参第一个为结构体类型的指针,第二个为返回值。
  • 3、寻找最小值的方法:先创建一个临时变量,存数组的第一个元素(假设为最小),接着依次比较,最终返回最小值。
  • 代码
    #include<stdio.h>
    #include<stdlib.h>
    #include<stdbool.h>
    
    #define InitSize 10		//初始化的大小
    //定义一个动态顺序表
    typedef struct {
    	int* data;
    	int length;
    	int MaxSize;
    }SeqList;
    
    //初始化
    bool InitList(SeqList* L) {
    	L->data = (SeqList*)malloc(sizeof(int) * InitSize);		//注意,此处开辟的空间是L->data,而非L,因为L不是一个指针
    	if (L->data == NULL)
    		return false;
    	L->length = 0;
    	L->MaxSize = InitSize;
    	return true;
    }
    
    bool DeleteMinElem(SeqList* L, int* e) {
    	if (L->length == 0)
    		return false;
    	int min = L->data[0];
    	int pow=0;	//记录最小值的下标
    	for (int i = 1; i < L->length; i++) {
    		if (L->data[i] < min) {
    			min = L->data[i];
    			pow = i;
    		}
    	}
    	L->data[pow] = L->data[L->length - 1];
    	L->length--;
    	*e = min;
    	return true;
    }
    
    int main()
    {
    	SeqList L;		//注意,此处创建的是L,而非*L,不要和链表弄混了
    	InitList(&L);
    	for (int i = 0; i < L.MaxSize; i++) {
    		scanf("%d", &L.data[i]);
    		L.length++;
    	}
    	int e;
    	if (DeleteMinElem(&L, &e)) {
    		printf("程序运行成功,删除的最小元素为%d\n", e);
    	}
    	else {
    		printf("error!");
    	}
    
    	for (int i = 0; i < L.length; i++) {
    		printf("%d ", L.data[i]);
    	}
    	
    	return 0;
    }

    欢迎提出建议。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值