第三周 项目四 顺序表的应用
2015-10-20 20:36
190 查看
/* *Copyright (c)2015, 烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:Apply.cpp *作 者:苏凯祺 *完成日期:2014年10月20号 *版 本 号:v1.0 *问题描述:将所有的奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。 */ #include "list.h" #include <stdio.h> //移动结束后,奇数居左,偶数居右 void move(SqList *&L) { int i=0,j=L->length-1; ElemType tmp; while (i<j) { while ((i<j) && (L->data[j]%2==0)) //从右往左,找到第一个奇数(偶数就忽略不管) j--; while ((i<j) && (L->data[i]%2==1)) //从左往右,找到第一个偶数(奇数就忽略不管) i++; if (i<j) //如果未到达“分界线”,将右边的奇数和左边的偶数交换 { tmp=L->data[i]; L->data[i]=L->data[j]; L->data[j]=tmp; } } //待循环上去后,继续查找,并在必要时交换 } //用main写测试代码 int main() { SqList *sq; ElemType a[10]= {5,8,7,0,2,4,9,6,7,3}; CreateList(sq, a, 10); printf("操作前 "); DispList(sq); move(sq); printf("操作后 "); DispList(sq); return 0; }
运行结果:
知识点总结:
这个题的做法很像是排序题的一种,分别对线性表的两头分别进行筛选,当前面筛选出一个不是偶数的时候,后面再筛选出一个不是奇数,然后进行交换。这里就充分表现了单步调试的优点,更好的去了解过程。
学习心得:
学习的过程中,很多都是可以通用的。
相关文章推荐
- 三层架构
- C/C++用动态链表实现对学生信息的存储
- 软件项目管理有感
- Jsp中三种注释
- 给AVS添加描述(how to add a description to a video)
- 剑指Offer--复杂链表的复制
- Extjs之RowNumberer
- Java中自定义有序不重复的集合——SetList
- UILabel高度自适应
- 用同一台PC的两个网口实现Iperf的server端和client端
- SQL Server 2008等登录用户只能看到自己的数据库设置办法
- 冒泡排序
- 简单利用HUDText插件实现血条和怪物伤害减血效果
- 代码审查时,发现功能实现的原因,而不仅仅是挑毛病(转)
- (原创)c#学习笔记04--流程控制01--布尔逻辑03--运算符优先级
- Android中分类的ListView实现
- 如何在Mac电脑上安装汉化破解版的DreamWearver CC
- 初探oVirt-使用cloud-init
- VirtualBox或VM Ware只能安装32位系统的解决办法
- linux c ping 实现