第三周项目4

来源:互联网 发布:高德地图数据导出 编辑:程序博客网 时间:2024/06/06 09:03

/*  

*Copyright  (c)2017,烟台大学计算机与控制工程学院      

*All rights reservrd.      

*文件名称 :test.cpp      

*作者:杜昕晔  

*完成时间:2017年9月7日      

*版本号:v1.0      

*问题描述:删除元素在【x,y】质检的所有元素

问题及代码:

#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 delx2y(SqList *&L, ElemType x,  ElemType y);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)  {      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);  }  //删除线性表中,元素值在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++;        }    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);    delx2y(sq, 4, 7);    printf("删除后 ");    DispList(sq);    return 0;}
运行结果: