• 第3周实践项目4 -顺序表的应用 删除顺序表中元素为x的值


    /* 
    copyright (t) 2017,烟台大学计算机学院  
    *All rights reserved.  
    *文件名称:1.cpp  
    *作者:邵雪源 
    *完成日期:2017年9月14日  
    *问题描述:删除元素在x,的所有元素,要求算法的时间按复杂度为o(n),空间复杂度为o(1)
    *版本号:v1.0  
    */
    main.cpp

    #include "list.h"
    #include <stdio.h>
    void delnode1(SqList *&L,ElemType x)
    {
        int i;
        ElemType e;
        while((i=LocateElem(L,x))>0)
        {
            ListDelete(L, i, e);
        }
    }
    //用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);
    
        delnode1(sq, 7);
    
        printf("删除后 ");
        DispList(sq);
        return 0;
    }
    
    list.h

    #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);//用数组创建线性表
    bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(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 ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED
    #endif
    
    list.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;
    }
    //判定是否为空表ListEmpty(L)
    bool ListEmpty(SqList *L)
    {
        return(L->length==0);
    }
    //输出线性表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("
    ");
    }
    //求某个数据元素值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;
    }
    //删除数据元素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
    }
    解法二:
    
    #include "list.h"
    #include <stdio.h>
    void delnode2(SqList *&L,ElemType x)
    {
        int k=0,i; //k记录非x的元素个数
        for (i=0; i<L->length; i++)
            if (L->data[i]!=x)
            {
                L->data[k]=L->data[i];
                k++;
            }
        L->length=k;
    }
    //用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);
        delnode2(sq, 7);
        printf("删除后 ");
        DispList(sq);
        return 0;
    }
    
    

    
    
                
  • 相关阅读:
    基于 WebGL 的 HTML5 楼宇自控 3D 可视化监控
    基于 HTML5 的 WebGL 楼宇自控 3D 可视化监控
    基于 WebGL 3D 的 HTML5 档案馆可视化管理系统
    基于 HTML5 的 WebGL 3D 档案馆可视化管理系统
    基于 HTML5 的 WebGL 和 VR 技术的 3D 机房数据中心可视化
    代码管理(四)SVN和Git对比
    代码管理(二)sourcetree 安装与使用
    代码管理(一)git
    iOS11新特性之LargeTitle
    使用Cordova搭建Andoid和iOS开发环境
  • 原文地址:https://www.cnblogs.com/sxy201658506207/p/7586268.html
Copyright © 2020-2023  润新知