栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构算法题程序(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构算法题程序(二)

前言

  书接上文
  完整程序参考:郝斌数据结构-线性表之顺序表程序

题目

  4、从有序顺序表中删除其值在给定值s 与t之间(要求s 我的版本:


bool Del_s_t(struct arr *pArr,int s,int t){
	int i,j;
	int k;
	if(s>=t||is_empty(pArr)){
		return false;
	}                           //不合理的情况退出运行
	for(i=0;icnt;i++){
		if(pArr->pBase[i]
			k++;                //记录满足条件的元素个数
		}else{
			break;
		}
	}
	for(j=pArr->cnt-1;j>0;j--){//cnt-1是最有一个元素的数组下标
		if(pArr->pBase[j]>t){
			k++;                //记录满足条件的元素个数
		}else{
			break;
		}
	}
	for(;jcnt;i++,j++){
		pArr->pBase[i] = pArr->pBase[j+1];//j+1的目的是将等于t的元素删掉
	}
	pArr->cnt = k;              //将多余元素删除
	return true;
}

参考答案:

bool Del_s_t_two(struct arr *pArr,int s,int t){
	int i,j;
	if(s>=t||pArr->cnt==0){
		return false;
	}
	for(i=0;icnt&&pArr->pBase[i]=pArr->cnt){
		return false;//检错,例如出现数组最大元素5,删除区间在5-7的情况;
	}
	for(j=i;jcnt&&pArr->pBase[j]<=t;j++);//j直接停在大于t的第一个元素下标上
	for(;jcnt;i++,j++){
		pArr->pBase[i] = pArr->pBase[j];
	}
	pArr->cnt=i;//脑抽了!!!i就是数组长度,无需再用k计数了。
	return true;
}

  5、从顺序表中删除其值在给定值s与t之间(包含s和t,要求s 基本思路:
  不再是有序表了,首先遍历数组的全部元素,找到满足小于s和大于t的元素。用k计数,将满足条件的元素存入k的连续下标数组内。k的值就是新数组的长度。

bool Del_s_t_upgrade(struct arr *pArr,int s,int t){
	int i,k=0;
	if(is_empty(pArr)||s>=t){
		return false;
	}
	for(i=0;icnt;i++){
		if(pArr->pBase[i]pBase[i]>t){
			pArr->pBase[k] = pArr->pBase[i];
			k++;
		}
	}
	pArr->cnt = k;
	return true;
}

参考答案:

bool Del_s_t_upgrade(struct arr *pArr,int s,int t){
	int i,k=0;
	if(is_empty(pArr)||s>=t){
		return false;
	}
	for(i=0;icnt;i++){
		if(pArr->pBase[i]>=s||pArr->pBase[i]<=t){
			k++;//记录在s和t之间的元素
		}else{
		    pArr->pBase[i-k]=pArr->pBase[i];//将在s和t之外的元素按顺序排列
		}
	}
	pArr->cnt -= k;             //这样判断反而有点麻烦了
	return true;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号