第3周项目4-顺序表应用问题(2)

来源:互联网 发布:淘宝好不好 编辑:程序博客网 时间:2024/05/22 08:45
Copyright (c)2016,烟台大学计算机与控制工程学院      
文件名称:项目3.cbp    
作    者:王婧
完成日期:2016年9月17日    
版 本 号:v1.0    
问题描述:将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。 
输入描述:无 

程序输出:输出调整后的线性表 

头文件list.h代码:

<span style="font-family:SimSun;font-size:18px;">#ifndef LIST_H_INCLUDED  #define LIST_H_INCLUDED    #define MaxSize 50  #include <stdio.h>  #include <malloc.h>  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  #endif  </span>
<span style="color: rgb(85, 85, 85); line-height: 35px; background-color: rgb(255, 255, 255);"><span style="font-family:SimSun;font-size:18px;">功能函数文件list.cpp代码:</span></span>

<span style="font-family:SimSun;font-size:18px;">#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[12]= {2,0,1,4,5,8,5,0,6,1,1,4};      CreateList(sq, a, 12);      printf("操作前 ");      DispList(sq);        move(sq);        printf("操作后 ");      DispList(sq);      return 0;  }  </span>


0 0
原创粉丝点击