网站开发私单哪里接,增城区建设局网站,建站公司网站 phpwind,湖南seo优化哪家好题目#xff1a;
给定一个顺序存储的线性表#xff0c;请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储#xff0c;并且相对位置不能改变。
函数接口定义#xff1a;
List Delete( List L, ElementType minD, ElementType maxD );其…题目
给定一个顺序存储的线性表请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储并且相对位置不能改变。
函数接口定义
List Delete( List L, ElementType minD, ElementType maxD );其中List结构定义如下
typedef int Position;
typedef struct LNode *List;
struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存线性表中最后一个元素的位置 */
};L是用户传入的一个线性表其中ElementType元素可以通过、、进行比较minD和maxD分别为待删除元素的值域的下、上界。函数Delete应将Data[]中所有值大于minD而且小于maxD的元素删除同时保证表中剩余元素保持顺序存储并且相对位置不变最后返回删除后的表。
裁判测试程序样例
#include stdio.h#define MAXSIZE 20
typedef int ElementType;typedef int Position;
typedef struct LNode *List;
struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存线性表中最后一个元素的位置 */
};List ReadInput(); /* 裁判实现细节不表。元素从下标0开始存储 */
void PrintList( List L ); /* 裁判实现细节不表 */
List Delete( List L, ElementType minD, ElementType maxD );int main()
{List L;ElementType minD, maxD;int i;L ReadInput();scanf(%d %d, minD, maxD);L Delete( L, minD, maxD );PrintList( L );return 0;
}/* 你的代码将被嵌在这里 */
输入样例
10 4 -8 2 12 1 5 9 3 3 10 0 4
输出样例
4 -8 12 5 9 10
先上错误代码
List Delete( List L, ElementType minD, ElementType maxD )
{int i,k,hMAXSIZE;for(i0;ih;i){if(L-Data[i]minDL-Data[i]maxD){for(ki;kh;k){L-Data[k]L-Data[k1]; }h--;}}L-LastL-Datah-1;return L;
}跟之前的那个题一样也是向前移动还不知道具体错因。 1-4 数组元素的区间删除 (20 分) https://blog.csdn.net/BQDQSZ/article/details/100164636
struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存线性表中最后一个元素的位置 */
};这个结构体包含了一个int数组和一个整数
typedef struct LNode *List;
List L;这两句又表明这道题中是想让你用结构体指针L来访问结构体成员int数组。 1-4 数组元素的区间删除 借助了一个新数组。这里就直接用一个新的结构体然后返回他的地址给L即可。
但是改完后还是不对费解。
List Delete( List L, ElementType minD, ElementType maxD )
{struct LNode b;int k0 ;for(int i0;i MAXSIZE;i){if(L-Data[i]minD||L-Data[i]maxD){b.Data[k]L-Data[i];k; }}b.Lastk-1;return (b);//错误函数调用完成后b所指的那块存储空间已经物是人非了
}
我找到错因了和之前的某道题一样忘了局部变量在函数调用完成后就不存在了所以返回的地址不是指向结构体的。应该使用动态分配。
修改后20分
List Delete( List L, ElementType minD, ElementType maxD )
{struct LNode *B;B(struct LNode *)malloc(sizeof(struct LNode ));//!!!!!!!!!int i,k0 ;for( i0;iL-Last;i){if(L-Data[i]minD||L-Data[i]maxD){B-Data[k]L-Data[i];k; }}B-Lastk-1;return (B);
}
还有这种思路我想不到正确答案
List Delete( List L, ElementType minD, ElementType maxD )
{int i,count0;for(i0;iL-Last;i){if(L-Data[i]maxDL-Data[i]minD)//若当前元素在区间内count1 count;elseL-Data[i-count]L-Data[i];/*若当前元素不在区间内把当前元素向前移动count单位,并替换Data[i-count]*/ }L-LastL-Last-count;return L;
}