线性表的顺序存储---习题
2016-03-26 15:01
176 查看
今天完成了一些与线性表相关的习题,总结如下
Q1:设顺序表有10个元素,其元素类型为整型。 设计一个算法,以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面;
A:此为数据结构老师在课堂上提出的一个问题,如果了解快速排序算法的原理,此题便十分简单,只需将快速排序最后的两次递归去掉即可。
代码如下(条件是已知顺序表l存在)
Q2:定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
A:第一道题来自数据结构教材后习题,要求找出给定范围内的元素并删除,正面入手较为复杂,涉及删除操作,会有大量的数据需要移动。反面入手则显得简单且高效,只需要将不在此范围的元素予以保留并将表长修改为余下元素个数即可,代码如下:
A:第二个问题还是用类似分离元素的思想进行解决,从两头向中间遍历,当未到达中央分界线是,对从两边分别找到的偶数和奇数进行交换,最后即可得到结果;
Q1:设顺序表有10个元素,其元素类型为整型。 设计一个算法,以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面;
A:此为数据结构老师在课堂上提出的一个问题,如果了解快速排序算法的原理,此题便十分简单,只需将快速排序最后的两次递归去掉即可。
代码如下(条件是已知顺序表l存在)
status divide(sqlist *l,int pos){ int i=0,j=l->length-1; elemtype temp,pivot=l->data[0];/*pivot即为题目中所说的第一个元素,也称枢纽元素*/ while(i<j){ while(i<j&&l->data[j]>pivot)/*从右向左找比pivot小的元素*/ j--; if(i<j){ l->data[i++]=l->data[j];/*如果找到,将其存至顺序表左侧*/ } while(i<j&&l->data[i]<pivot)/*从左向右找比pivot大的元素*/ i++; if(i<j){ l->data[j--]=l->data[i];/*如果找到,将其存至顺序表右侧*/ } } l->data[i]=pivot; return OK; }
Q2:定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
A:第一道题来自数据结构教材后习题,要求找出给定范围内的元素并删除,正面入手较为复杂,涉及删除操作,会有大量的数据需要移动。反面入手则显得简单且高效,只需要将不在此范围的元素予以保留并将表长修改为余下元素个数即可,代码如下:
/*删除指定范围内的元素*/ status deleteeleminrange(sqlist *l,int x,int y){ int i=0,k=0,t=0;//k用来记录不在x,y范围内的元素 if(x>y)/*检查参数是否正确,不正确则进行修正*/ { t=x; x=y; y=t; } for(i=0;i<l->length;i++){ if(l->data[i]>y||l->data[i]<x) l->data[k++]=l->data[i]; } l->length=k;/*切记修改表长*/ }
A:第二个问题还是用类似分离元素的思想进行解决,从两头向中间遍历,当未到达中央分界线是,对从两边分别找到的偶数和奇数进行交换,最后即可得到结果;
status moveeven(sqlist *l){ int i=0,j=l->length-1; elemtype temp; while(i<j){ while(i<j&&l->data[j]%2==0)//寻找奇数 j--; while(i<j&&l->data[i]%2!=0)//寻找偶数 i++; if(i<j){//未到达中间时进行交换 temp=l->data[j]; l->data[j]=l->data[i]; l->data[i]=temp; } } return OK; }
相关文章推荐
- 一则C语言题
- 简单工厂模式加减乘除器
- iOS 视图控制器转场详解(转载)
- GitHub Android Libraries Top 100 简介
- 嵌入式窗口系统
- 浅谈几种常见语言的命名空间(Namespace)
- Java学习笔记--ThreadLocal
- jsp中java代码、jsp代码、js代码执行的顺序
- 获取Android设备标识符
- 机器学习基础(二十五)—— Feature Selection
- C++中的this
- Java volatile
- Java程序编译&运行笔记
- hi35xx样例程序使用
- 关于第三方库
- 批量漏洞检测框架
- JSP
- 4-1 yum源文件
- css3 一个简单的静态立方体
- jquery实现hover图片半透明效果