第三周项目4—顺序变应用问题(1)_list *sqlist=(list*)malloc(sizeof(list))怎么改_ly201458506115的博客-程序员秘密

问题:

/*   
*Copyright (c)2015,烟台大学计算机与控制工程学院   
*All rights reserved.   
*文件名称:项目4.cbp   
*作    者:李艺   
*完成日期:2015年9月19日   
*版 本 号:v1.0   
*   
*问题描述:删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);  
*输入描述:无   
*程序输出:输出调整后的线性表  
*/  

架构:


      头文件list.h代码:

#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


功能函数list.cpp代码:

#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)
{
    L=(SqList *)malloc(sizeof(SqList));
    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
}

main.cpp测试文件代码:


#include "list.h"
#include <stdio.h>

//删除线性表中,元素值在x到y之间的元素
void delx2y(SqList *&L, ElemType x,  ElemType y)
{
    int k=0,i; //k记录非x的元素个数
    ElemType t;
    if(x>y)//使输出到下面的数都为前面小 后面小的形式
    {
        t=x;
        x=y;
        y=t;
    }
    for (i=0; i<L->length; i++)
        if (L->data[i]<x || L->data[i]>y )  //复制不在[x, y]之间的元素
        {
            L->data[k]=L->data[i];          //k增加 并且每增加一个新赋值一个
            k++;
        }
    L->length=k;
}

//用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);

    delx2y(sq, 1, 5);//主要运用此函数删除

    printf("删除后 ");
    DispList(sq);
    return 0;
}


运行结果:



知识点总结:

   加深了对算法库的运用。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ly201458506115/article/details/48573985

智能推荐

Python爬虫的requests模块你真的学会了吗?来看看这些高级用法!_Python新世界的博客-程序员秘密

1. 文件上传我们知道requests可以模拟提交一些数据。假如有的网站需要上传文件,我们也可以用它来实现,这非常简单,示例如下:很多人学习python,不知道从何学起。很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。很多已经做案例的人,却不知道如何去学习更加高深的知识。那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!QQ群:101677771 1 2 3 4 5 ..

NYOJ NO.86 找球号(一)_找球号 c语言_Kernight的博客-程序员秘密

#include#includeusing namespace std;#define N 1000005long long int array[N];int search(long long int array[], long long int key, long long int leng) //二分查找{ long long int mid, fro

Redux入门简单学习!!_redux 入门代码_HelloJinrong的博客-程序员秘密

一、 设计思想(1)Web 应用是一个状态机,视图与状态是一一对应的。(2)所有的状态,保存在一个对象里面。二、基本概念和 API2.1 storestore是保存数据的地方,可当作一个容器。整个应用只能有一个story。redux提供createStore这个函数,用来生成Storeimport { createStore } from 'redux';const store = createStore(fn);上面代码中,createStore函数接受另一个函数作为参数,返回

Linux基本权限设置_说明linux的基本权限是如何设置的_小小顺的博客-程序员秘密

1.用户组多用户同时登录一个系统而执行不同的任务,而互不影响,不同的用户可具有不同的权限,每个用户在权限允许的范围内完成不同的任务为方便管理属于同一组的用户,方便为组中的用户统一规划权限或指定任务;在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户自己useradd #用于创建用户groupadd #用于创建组usermod #用于修改用户属...

apache 显示php错误,关于apache:不显示PHP错误_恽磊的博客-程序员秘密

本问题已经有最佳答案,请猛点这里访问。我已经把这个问题归结为问题并使其变得干净,以便你能更方便地帮助我。我有一个非常简单的代码:echo"Hello world";?&gt;这完全没问题。如果我运行以下代码(解析错误)我没有收到任何错误,但仍显示文本"Hello world":echo"Hello world";piwejfoiwjefoijwef?&gt;如果我在代码之前放置解析错误但是不显示"...

SQL Server 服务器对象之链接服务器_技术至美的博客-程序员秘密

在SQLServer中经常使用别的服务器的数据库进行夸数据库数据的访问和操作,这时候比较好的方式之一就是在本机的SQLServer数据库服务器中创建一个链接服务器。创建一个链接服务器右击链接服务器2、填写对应的参数,这里设置链接服务器也是SQLServer,并且使用远程登录的模式上图中RPC和RPCOUT如果不设置成TRUE,在链接服务器执行存储过程的时候会报错,“未将服务器XXX配置为RPC”如果创建链接服务器时候没开此选项,只能用脚本修改,修改脚本如下:U

随便推点

人人都能看懂的机器学习!3个案例详解聚类、回归、分类算法_大数据v的博客-程序员秘密

导读:机器是怎样学习的,都学到了什么?人类又是怎样教会机器学习的?本文通过案例给你讲清楚各类算法的原理和应用。机器学习,一言以蔽之就是人类定义一定的计算机算法,让计算机根...

Linux 定时发送邮箱_at定时发送邮件_虫虫环游世界的博客-程序员秘密

一:在linux导入对应的包(选一导入)1.pip install sendmail(比较大)2.pip install postfix(比较小) 二:在linuxvim xxx.py文件,示例如下: #!/usr/bin/python#-*- coding=utf-8 -*-# 导入邮箱包import yagmail#链接服务器端yag = yagmail....

Hbase分析报告(tablename+startrowkey_regionid/-meta-)_L-Zhang的博客-程序员秘密

Hbase分析报告本文基于环境hadoop-0.16.4 和 hbase-0.1.3 编写Hbase是一个分布式开源数据库,基于Hadoop分布式文件系统,模仿并提供了基于Google文件系统的Bigtable数据库的所有功能。Hbaes的目标是处理非常庞大的表,可以用普通的计算机处理超过10亿行数据,并且有数百万列元素组成的数据表。Hbase可以直接使

Unity Ragdoll 实现死亡效果 心得+坑点总结_ragdoll系统_染指流年灬的博客-程序员秘密

在一些游戏中当NPC或玩家死亡的时候,死亡的肢体动作十分逼真,这一物理现象如何用Unity来实现呢?Unity物理引擎中的Ragdoll系统,可以用来创建这种效果,具体请参阅Ragdoll Wizard在场景中新建 3D Object → Ragdoll…接下来是一个初见复杂的绑定界面我们需要将模型对应的关节部位一一拉进这个表创建完成后,可以发现模型中的每个所选部位中多了一个Rigibody,一个Collider和一个Character Joint组件,在Joint面板里可以调节转动限制等

Object-C_bingwa的博客-程序员秘密

因为有class才有这样的名字。很多地方和C++一样的 。

前缀和与差分讲解_yoke菜籽的博客-程序员秘密

前缀和与差分,这是个非常快速的算法,利用了记忆化递推。

推荐文章

热门文章

相关标签