线性表应用--根据首元素大小移动其他元素到相应位置

来源:互联网 发布:在centos上安装ms8.0 编辑:程序博客网 时间:2024/06/14 03:55
/*程序的版权和版本声明部分:*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);          //移动函数1void move_2(SqList *L);          //移动函数2void 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[n];    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;}

运行结果:


0 0
原创粉丝点击