(第三周项目4)顺序表应用
2015-09-18 13:37
337 查看
定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
提示:
(1)充分利用前面建立的算法库解决建立顺序表、输出线性表的问题;
(2)为保证复杂度的要求,设计算法并用专门的函数实现算法;
(3)每项工作写一个程序,并发布博文,展示你的实践成果。
1.
结果
2.
算法库
结果
总结
前者利用覆盖,后者利用快速排序。
心得
快速排序算法好厉害。
1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
提示:
(1)充分利用前面建立的算法库解决建立顺序表、输出线性表的问题;
(2)为保证复杂度的要求,设计算法并用专门的函数实现算法;
(3)每项工作写一个程序,并发布博文,展示你的实践成果。
1.
#include <stdio.h> #include <malloc.h> //动态存储分配函数头文件 #define MaxSize 50 //必要的宏定义 typedef int ElemType; typedef struct { ElemType data[MaxSize]; int length; }SqList; ElemType e; void CreateList(SqList *&L, ElemType a[], int n) { int i; L=(SqList *)malloc(sizeof(SqList)); for (i=0; i<n; i++) L->data[i]=a[i]; L->length=n; } void DispList(SqList *L) { int i; for (i=0; i<L->length; i++) printf("%d ",L->data[i]); printf("\n"); } bool ListDelete(SqList *&L,int i,ElemType &e) { int j; if (i<1 || i>L->length) //参数错误时返回false return false; i--; //将顺序表逻辑序号转化为物理序号 e=L->data[i]; for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移 L->data[j]=L->data[j+1]; L->length--; //顺序表长度减1 return true; //成功删除返回true } int LocateElem(SqList *L, ElemType e) { int i=0; while (i<L->length && L->data[i]!=e) i++; if (i>=L->length) return 0; else return i+1; } void DelexyList(SqList *&L,ElemType x,ElemType y) { int i,k=0,t; if(x>y) { t=x; x=y; y=x; } for(i=0;i<L->length;i++) { if(L->data[i]<x||L->data[i]>y) { L->data[k]=L->data[i]; k++; } } L->length=k; } //====================== int main() { SqList *L; ElemType x,y; int a[5]={0,9,4,8,7}; CreateList(L,a,5); DelexyList(L,5,10); DispList(L); return 0; }
结果
2.
算法库
void QueList(SqList *&L) { ElemType t; int i=0,j=L->length-1; while(i<j) { while(i<j&&L->data[j]%2==0)//略过后面的偶数 j--; while(i<j&&L->data[i]%2==1)//略过前面的奇数 i++; if(i<j)//直到前偶后奇互换 { t=L->data[i]; L->data[i]=L->data[j]; L->data[j]=t; } } }
#include <stdio.h> #include <malloc.h> #include "list.h" int main() { SqList *sq; int x[6]={5,8,7,2,4,9}; CreateList(sq,x,6); printf("前:\n"); DispList(sq); QueList(sq); printf("后:\n"); DispList(sq); return 0; }
结果
总结
前者利用覆盖,后者利用快速排序。
心得
快速排序算法好厉害。
相关文章推荐
- Git服务器 - 配置
- Implement Stack using Queues
- WPF入门教程系列十九——ListView示例(一)
- PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
- What is the difference between left join and left outer join?
- xcode7.0-iOS9新特性之三:界面适配利器:UIStackView
- 谈一谈我所理解的面试
- django:TemplateDoesNotExist错误的解决方法
- Dijkstra算法--有向图的源点到其他顶点的最短路径(连接矩阵、邻接矩阵两种方式)
- [Django1.6]The MEDIA_ROOT and STATIC_ROOT settings must different 解决
- MYSQL简单安装配置
- Rust 1.3 发布
- Xcode7 网络请求报错:The resource could not be loaded because the App Transport Security policy requir
- UITabBarItem 如何触发点击事件
- IT成长路<2013.3-2013.9>"而立"上篇
- 在CentOS下安装Python2.7
- 创建一个返回String或&str的Rust函数
- 利用ADO.NET的体系架构打造通用的数据库访问通用类
- oracle回顾--基础篇(二)
- 浅谈协方差矩阵