第三周项目4 顺序表应用(将所有奇数移到偶有偶数前面)

  1. /*   
  2.  * Copyright (C) 2016, 烟台大学计算机与控制工程学院   
  3.  * All rights reserved.   
  4.  * 文件名称 : fangzhou.cpp   
  5.  * 作    者 : 吕方舟  
  6.  * 完成日期 : 2016年9月15日   
  7.  * 版 本 号 : v1.0   
  8.  * 问题描述 :两种排序算法的运行时间 
  9.  * 输入描述 :无 
  10.  * 程序输出 :数字的顺序 

  1.  */
  2. main.cpp:
    1. #include "list.h"  
    2. #include <stdio.h>  
    3. //用main写测试代码  
    4. int main()  
    5. {  
    6.     SqList *sq;  
    7.     ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};  
    8.     CreateList(sq, a, 10);  
    9.     printf("操作前 ");  
    10.     DispList(sq);  
    11.   
    12.     move(sq);  
    13.   
    14.     printf("操作后 ");  
    15.     DispList(sq);  
    16.     return 0;  
    17. }  

  3. <span style="font-family: Consolas, 'Courier New', Courier, mono, serif; background-color: inherit;">List.cpp:</span>
  4. <span style="font-family: Consolas, 'Courier New', Courier, mono, serif; background-color: inherit;"></span><pre name="code" class="cpp">#include <stdio.h>  
    #include <malloc.h>  
    #include "list.h"  
      
    //用数组创建线性表  
    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;  
    }  
      
    //初始化线性表InitList(L)  
    void InitList(SqList *&L)   //引用型指针  
    {  
        L=(SqList *)malloc(sizeof(SqList));  
        //分配存放线性表的空间  
        L->length=0;  
    }  
      
    //销毁线性表DestroyList(L)  
    void DestroyList(SqList *&L)  
    {  
        free(L);  
    }  
      
    //判定是否为空表ListEmpty(L)  
    bool ListEmpty(SqList *L)  
    {  
        return(L->length==0);  
    }  
      
    //求线性表的长度ListLength(L)  
    int ListLength(SqList *L)  
    {  
        return(L->length);  
    }  
      
    //输出线性表DispList(L)  
    void DispList(SqList *L)  
    {  
        int i;  
        if (ListEmpty(L)) return;  
        for (i=0; i<L->length; i++)  
            printf("%d ",L->data[i]);  
        printf("\n");  
    }  
      
    //求某个数据元素值GetElem(L,i,e)  
    bool GetElem(SqList *L,int i,ElemType &e)  
    {  
        if (i<1 || i>L->length)  return false;  
        e=L->data[i-1];  
        return true;  
    }  
      
    //按元素值查找LocateElem(L,e)  
    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;  
    }  
      
    //插入数据元素ListInsert(L,i,e)  
    bool ListInsert(SqList *&L,int i,ElemType e)  
    {  
        int j;  
        if (i<1 || i>L->length+1)  
            return false;   //参数错误时返回false  
        i--;            //将顺序表逻辑序号转化为物理序号  
        for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置  
            L->data[j]=L->data[j-1];  
        L->data[i]=e;           //插入元素e  
        L->length++;            //顺序表长度增1  
        return true;            //成功插入返回true  
    }  
      
    //删除数据元素ListDelete(L,i,e)  
    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  
    }  
      
      
    //移动结束后,奇数居左,偶数居右  
    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;  
            }  
        }   //待循环上去后,继续查找,并在必要时交换  
    }  
    
    <span style="font-family: Consolas, 'Courier New', Courier, mono, serif; background-color: inherit;"><span style="color: rgb(0, 130, 0); background-color: inherit;">
    </span></span>
    List.h:
     
  5. #ifndef LIST_H_INCLUDED  
    #define LIST_H_INCLUDED  
      
      
    #define MaxSize 50  
    typedef int ElemType;  
    typedef struct  
    {  
        ElemType data[MaxSize];  
        int length;  
    } SqList;  
    void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表  
    void InitList(SqList *&L);//初始化线性表InitList(L)  
    void DestroyList(SqList *&L);//销毁线性表DestroyList(L)  
    bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)  
    int ListLength(SqList *L);//求线性表的长度ListLength(L)  
    void DispList(SqList *L);//输出线性表DispList(L)  
    bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)  
    int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)  
    bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)  
    bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED  
    void move(SqList *&L);  
    #endif // LIST_H_INCLUDED  

    运行结果:

  6. 
    
  7. 知识点总结:
  8.    线性表中对元素的目标移动删除等功能的实现。
  9. 学习心得:
  10.    在纸上画一画~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值