第三周 项目4 顺序表应用(一)

  1. /* 
  2. *Copyright (c) 2017,烟台大学计算机与控制工程学院 
  3. *All rights reserved. 
  4. *文件名称: 
  5. *作    者:胡俊超 
  6. *完成日期:2017年9月25日 
  7. *版 本 号:v1.0 
  8. * 
  9. *问题描述:删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)
  10. */
    #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++;
            }
        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;
    }

  11. #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;    
    }    
        
    //初始化线性表InitList(L)    
    void InitList(SqList *&L)   //引用型指针    
    {    
        L=(SqList *)malloc(sizeof(SqList));    
        //分配存放线性表的空间    
        L->length=0;    
    }    
        
    //销毁线性表DestroyList(L)    
    void DestroyList(SqList *&L)    
    {    
        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    
    }</pre><br>    
    <br>    
    <pre></pre>    
    <pre name="code" class="cpp"><pre name="code" class="cpp">#define MaxSize 50    
    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  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值