【第三周项目4-顺序表应用(2)】

问题及代码:

/*
 * Copyright (c) 2016, 烟台大学计算机与控制工程学院
 * All rights reserved.
 * 文件名称:Cube007.cpp
 * 作    者:刘小楠
 * 完成日期:2016年9月18日
 *
 * 问题描述:将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
 * 输入描述:线性表长度、线性表中各元素
 * 输出描述:调整顺序后的线性表
 */

main.cpp

#include <iostream>
#include <malloc.h>
#include <cstdio>
#include "list.h"
using namespace std;

int main()
{
    int i,Llength;
    Sqlist *l;
    Elemtype a[Maxsize];
    printf("请输入线性表长度:\n");
    scanf("%d",&Llength);
    printf("请输入线性表中各元素:\n");
    for(i=0;i<Llength;i++)
        scanf("%d",&a[i]);
    CreateList(l,a,Llength);
    movejs(l);
    DispList(l);

    return 0;
}
list.h

#define Maxsize 100
typedef int Elemtype;          //自定义数据类型
typedef struct list
{
    Elemtype data[Maxsize];    //存顺序表元素
    int length;                //存顺序表长度
} Sqlist;

void CreateList(Sqlist *&l,Elemtype a[],int n);    //由a中的n个元素建立顺序表
void DispList(Sqlist *l);                          //输出线性表
void movejs(Sqlist *&l);                           //移动奇数
lxn.cpp

#include <stdio.h>
#include <malloc.h>
#include "list.h"
void CreateList(Sqlist *&l,Elemtype a[],int n)    //由a中的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)                          //输出线性表
{
    int i;
    for(i=0;i<l->length;i++)
        printf("%d ",l->data[i]);
    printf("\n");
}
void movejs(Sqlist *&l)                           //移动奇数
{
    int i=0,j=l->length-1;
    Elemtype t;
    while (i<j)
    {
        while ((i<j) && (l->data[j]%2==0))         //从右往左遍历找第一个奇数
            j--;
        while ((i<j) && (l->data[i]%2==1))         //从左往右遍历找第一个偶数
            i++;
        if (i<j)                                   //如果未到达“分界线”,将上述循环中找到的奇数和偶数交换
        {
            t=l->data[i];
            l->data[i]=l->data[j];
            l->data[j]=t;
        }
    }
}
程序截图:



知识点总结:
主要应用了线性表元素的查找及变换,主要实现依赖于move函数。
学习心得:
随着做完第三周的项目,掌握了基本算法库的应用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值