从有序顺序表中删除其值在给定s与t之间,(要求s小于t)的所有元素,如果s或t不合理或者顺序表为空则显示错误信息并退出运行

#include<stdio.h>
#include <stdlib.h> 
#include<iostream>
using namespace std;
 
 
#define LIST_INIT_SIZE 100	
#define LISTINCREMENT 2	
typedef struct 
{
int *data;	
int length;	
int listsize;
 } sqlist;
 int main()
{
  	sqlist l;
  	int b[]={0,1,2,3,4,5,6,7,8,9};//删除3,7,之间的数字 剩余,0123789 
  	l.data=b;
 	l.length=sizeof(b)/sizeof(int); 
  	l.listsize=sizeof(int)*l.listsize;
  	int s,t,temp;
  	s = 3;
	t = 7; 
  	int i,j;
	for(i=0;i<l.length&&l.data[i]<=s;i++);
	cout<<i<<" ";
	for(j=i;j<l.length&&l.data[j]<t;j++);
	cout<<j<<" ";
//i=4,j=7
	for(;j<l.length;i++,j++){
		l.data[i]=l.data[j];
	}
	l.length=l.length-(j-i);
		cout<<"删除元素后";//上面改为,<s和<=t,则结果是也删除了3,7,i=3,j=8删除后为,01289
	for(int i=0;i<l.length;i++){
  			cout<<l.data[i]<<" ";
  	}
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 算法如下: 1. 判断顺序表是否为空,如果为空则显示错误信息退出运行。 2. 定义两个指针,一个指向要删除的第一个元素的位置,一个指向要删除的最后一个元素的下一个位置。 3. 从顺序表的第一个元素开始遍历,找到第一个大于等于s的元素,将指针1指向该位置。 4. 从指针1指向的位置开始遍历,找到第一个大于t的元素,将指针2指向该位置。 5. 将指针1和指针2之间元素全部删除。 6. 返回删除后的顺序表。 ### 回答2: 可以设计一个算法来从有序顺序表删除其值给定值s与t之间的所有元素。假设顺序表元素的类型为整数。 算法设计如下: 1. 检查顺序表是否为空。若为空,则显示错误信息退出运行。 2. 初始化两个变量i和j,分别指向顺序表的起始位置和结束位置。 3. 从序列顺序表找到第一个大于等于s的元素,将其位置赋值给i。 4. 从顺序表找到第一个大于t的元素,将其位置赋值给j。 5. 检查i和j的值,如果i大于等于j,则表示没有需要删除元素,算法结束。 6. 否则,从位置i开始,将位置j之后的所有元素依次向前移动j-i个位置。 7. 更新顺序表的长度,使其减去j-i。 8. 重复步骤4-7直到i大于等于j。 算法实现如下(伪代码): ``` DeleteElements(list, s, t): if list.isEmpty(): display "顺序表为空,错误!" and exit i = 0 j = 0 for index in 0 to list.length() - 1: if list[index] >= s: i = index break for index in i to list.length() - 1: if list[index] > t: j = index break while i < j: for k in i+1 to list.length() - 1: list[k - (j-i)] = list[k] list.setLength(list.length() - (j - i)) for index in i to list.length() - 1: if list[index] > t: j = index break ``` 这个算法的时间复杂度为O(n),其n是顺序表的长度。因为算法的时间复杂度与顺序表元素的个数成正比。 ### 回答3: 设计一个算法实现从有序顺序表删除其值给定值s与t之间的所有元素。如果顺序表为空,则显示出错信息并退出运行。 首先,我们需要判断顺序表是否为空。如果为空,则输出出错信息并退出运行。 接下来,我们需要找到第一个大于等于s的元素的位置和第一个大于t的元素的位置。 然后,使用两个指针,一个指向第一个大于等于s的元素的位置,另一个指向第一个大于t的元素的前一个位置。 通过移动指针,找到需要删除元素的范围,并将其删除。 最后,输出删除后的顺序表。 算法实现如下: 1. 初始化指针low和high,分别指向顺序表的第一个位置和最后一个位置。 2. 如果low的位置大于high的位置,则表示顺序表为空,输出出错信息并退出运行。 3. 否则,找到第一个大于等于s的元素的位置,即low的位置。如果low的位置小于等于high的位置且顺序表元素的值小于s,则将low的位置后移一位。 4. 找到第一个大于t的元素的前一个位置,即high的位置。如果high的位置大于等于low的位置且顺序表元素的值大于等于t,则将high的位置前移一位。 5. 循环执行以下步骤,直到low的位置大于high的位置: a. 将low的位置后移一位。 b. 将low位置的元素复制到high位置,即删除low位置的元素。 c. 将high的位置前移一位。 6. 输出删除后的顺序表。 这个算法的时间复杂度为O(n),其n为顺序表元素个数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值