第三周 项目4 - 顺序表应用(2)
2017-12-14 10:41
274 查看
/*
*Copyright (c)2017,烟台大学计算机与控制工程学院
*All rights reservrd.
*文件名称 :test.cpp
*作者:潘亚楠
*完成时间:2017年12月14日
*版本号:v1.0
*问题描述:将所在奇数移到所有偶数的前面
问题及代码:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
//自定义函数声明部分
void CreateList(SqList *&L, ElemType a[], int n);
void DispList(SqList *L);
bool ListEmpty(SqList *L);
int ListLength(SqList *L);
bool GetElem(SqList *L,int i,ElemType &e);
int LocateElem(SqList *L, ElemType e);
void InitList(SqList *&L);
bool ListInsert(SqList *&L,int i,ElemType e);
bool ListDelete(SqList *&L,int i,ElemType &e);
void DestroyList(SqList *&L);
void move(SqList *&L);
//移动结束后,奇数居左,偶数居右
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;
}
void DispList(SqList *L) //输出线性表DispList(L)
{
int i;
if (ListEmpty(L))
return;
for (i=0; i<L->length; i++)
printf("%d ",L->data[i]);
printf("\n");
}
bool ListEmpty(SqList *L) //判定是否为空表ListEmpty(L)
{
return(L->length==0);
}
int ListLength(SqList *L) //求线性表的长度ListLength(L)
{
return(L->length);
}
bool GetElem(SqList *L,int i,ElemType &e) //求某个数据元素值GetElem(L,i,e)
{
if (i<1 || i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L, ElemType e) //按元素值查找LocateElem(L,e)
{
9b31
int i=0;
while (i<L->length && L->data[i]!=e) i++;
if (i>=L->length)
return 0;
else
return i+1;
}
void InitList(SqList *&L) //初始化线性表
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
void DestroyList(SqList *&L)
{
free(L);
}
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;
} 运行结果:
*Copyright (c)2017,烟台大学计算机与控制工程学院
*All rights reservrd.
*文件名称 :test.cpp
*作者:潘亚楠
*完成时间:2017年12月14日
*版本号:v1.0
*问题描述:将所在奇数移到所有偶数的前面
问题及代码:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
//自定义函数声明部分
void CreateList(SqList *&L, ElemType a[], int n);
void DispList(SqList *L);
bool ListEmpty(SqList *L);
int ListLength(SqList *L);
bool GetElem(SqList *L,int i,ElemType &e);
int LocateElem(SqList *L, ElemType e);
void InitList(SqList *&L);
bool ListInsert(SqList *&L,int i,ElemType e);
bool ListDelete(SqList *&L,int i,ElemType &e);
void DestroyList(SqList *&L);
void move(SqList *&L);
//移动结束后,奇数居左,偶数居右
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;
}
void DispList(SqList *L) //输出线性表DispList(L)
{
int i;
if (ListEmpty(L))
return;
for (i=0; i<L->length; i++)
printf("%d ",L->data[i]);
printf("\n");
}
bool ListEmpty(SqList *L) //判定是否为空表ListEmpty(L)
{
return(L->length==0);
}
int ListLength(SqList *L) //求线性表的长度ListLength(L)
{
return(L->length);
}
bool GetElem(SqList *L,int i,ElemType &e) //求某个数据元素值GetElem(L,i,e)
{
if (i<1 || i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L, ElemType e) //按元素值查找LocateElem(L,e)
{
9b31
int i=0;
while (i<L->length && L->data[i]!=e) i++;
if (i>=L->length)
return 0;
else
return i+1;
}
void InitList(SqList *&L) //初始化线性表
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
void DestroyList(SqList *&L)
{
free(L);
}
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;
} 运行结果:
相关文章推荐
- 第三周项目4 顺序表的应用
- 第三周项目4-顺序表应用(1)
- 第三周项目4 顺序表应用
- 第三周-项目四(2)顺序表的应用
- 第三周项目4-顺序表的应用
- 第三周 项目四 顺序表的应用(1)
- C/C++ 第三周线性表项目(2) 顺序表的应用
- 第三周 项目4-顺序表的应用
- 第三周 项目四——顺序表应用(1)
- 第三周项目4-顺序表应用(2)
- 第三周 项目四 顺序表的应用
- 第三周 项目四 顺序表的应用2(。。)
- 第三周项目4 顺序表应用(2)
- 第三周项目4-顺序表应用(2)
- 第三周 项目4-顺序表的应用(1)
- 第三周项目四顺序表应用
- 第三周项目4-顺序表应用(2)
- 第三周 项目 4 顺序表的应用 (1)(补)
- 第三周项目四 顺序表的应用
- 第三周 线性表(-)--顺序表 项目四--顺序表的应用 问题一