线性表应用--根据首元素大小移动其他元素到相应位置
2014-09-11 20:21
330 查看
/*程序的版权和版本声明部分: *Copyright(c)2014,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:田成琳 *完成日期:2014 年 9 月 11 日 *版本号:v1.0 *对任务及求解方法的描述部分: *问题描述:线性顺序表的简单应用(移动) *程序输入: *程序输出: *问题分析:有一个顺序表,设计一个算法,以第一个 元素为分界线,将所有小鱼等于它的元素 移到该元素前,大于它的元素移到该元素 后面。 *算法设计:解法1: 用一个pivot存放L->data[0],用i,j分别指 向顺序表第一个和最后一个元素,当i<j时循 环:从右向左扫描找到一个小于等于piovt的 data[j],再从左往右扫描,找到一个大于piovt 的元素data[i],两者进行交换.循环结束时 data[0]和data[j]交换. 解法2: 将L->data[0]存放到piovt中,用i从左往右查找, j从右往左查找.当i不等于j时循环,指向同一元 素为止:从右往左扫描,找到一小于piovt的data[j] 覆盖data[i],再从左往右扫描,找到一个大于piovt 的data[i]替换data[j].最后让data[i]=piovt. */ #include<iostream> #include<cstdlib> using namespace std; const int MaxSize=50; //顺序表中最多元素个数 typedef struct { int data[MaxSize]; //存放顺序表中元素 int length; //存放顺序表长度 }SqList; void CreateList(SqList *L,int a[],int n);//建立顺序表 void DisplayList(SqList *L); //输出线性表 void move_1(SqList *L); //移动函数1 void move_2(SqList *L); //移动函数2 void CreateList(SqList *L,int a[],int n) { for(int i=0;i<n;i++) L->data[i]=a[i]; L->length=n; } void DisplayList(SqList *L) { for(int i=0;i<L->length;i++) cout<<L->data[i]<<" "; //遍历输出 cout<<endl; } void move_1(SqList *L) { int i=0,j=L->length-1,pivot=L->data[0],temp; while(i<j) { while(i<j&&L->data[j]>pivot) j--; //从右侧扫描,找到一个小于等于pivot的值 while(i<j&&L->data[i]<=pivot) i++; //从左侧扫描,找到一个大于pivot的值 if(i<j) //满足条件,两者交换 { temp=L->data[i]; L->data[i]=L->data[j]; L->data[j]=temp; } } temp=L->data[0]; //L->data[0]和L->data[j]交换 L->data[0]=L->data[j]; L->data[j]=temp; } void move_2(SqList *L) { int i=0,j=L->length-1,pivot=L->data[0]; while(i<j) { while(j>i&&L->data[j]>pivot) j--; //找到一个小于等于piovt的值 L->data[i]=L->data[j]; i++; while(i<j&&L->data[i]<=pivot) i++; //找到一个大于piovt的值 L->data[j]=L->data[i]; j--; } L->data[i]=pivot; } int main() { SqList L; int n; cout<<"请输入顺序表元素个数及元素:"<<endl; cin>>n; int *array=new int ; for(int i=0;i<n;i++) cin>>array[i]; CreateList(&L,array,n); cout<<"线性表中的元素为:"<<endl; DisplayList(&L); cout<<"使用第一种解法移动后线性表中的元素为:"<<endl; move_1(&L); DisplayList(&L); cout<<"使用第二种解法移动后线性表中的元素为:"<<endl; move_2(&L); DisplayList(&L); return 0; }
运行结果:
相关文章推荐
- 双向链表的应用—实现根据使用频率安排元素位置的功能
- 将视频移动到iPad屏幕下方为其他应用腾出位置
- 3.1 Javascript:探索客户端-设置网页元素根据窗口比例调整位置与大小
- 小猫统计定制CRUD(增查删改)界面:界面内元素(控件)的位置移动、大小控制
- Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之77――BREW中位置信息的获得(LBS应用)
- Maximum message size quota for incoming messages (65536) has been exceeded.已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceive
- 补码的应用:从buffer里的一段char*根据数据类型和长度转换成相应的整型
- 无边框窗体改变大小并移动位置
- 在运行时通过鼠标拖动移动控件位置及改变控件的大小
- picture根据鼠标位置执行相应操作
- JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
- 在运行时通过鼠标拖动移动控件位置及改变控件的大小
- 根据窗口大小自动调整元素大小
- 鼠标移动上去,元素的left增加N像素,鼠标移开会慢慢的移动到原来的位置
- 元素随浏览器滚动条拉动而移动位置的JS效果
- JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
- AE根据记录信息获得地图元素信息并定位地图位置
- Maximum message size quota for incoming messages (65536) has been exceeded.已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceive
- 在运行时通过鼠标拖动移动控件位置及改变控件的大小