第三周项目3 顺序表的应用

来源:互联网 发布:维基百科数据库下载 编辑:程序博客网 时间:2024/05/16 03:54
/*     
*Copyright (c)2016,烟台大学计算机与控制工程学院     
*All rights reserved.          
*作    者:王晓慧    
*完成日期:2016年9月16日          
*问题描述:删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);    
*输入描述:无     
*程序输出:输出调整后的线性表    
*/ 
#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代码:    [cpp] view plain copy       #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测试文件代码:         [cpp] view plain copy       #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;    }   
运行结果
<img src="http://img.blog.csdn.net/20160916185612049?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
知识点总结:算法库的应用,线性表元素的查找和删除
学习心得:学习算法库,更有效率的完成任务 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子再用点力妈要飞了视频 中国真实的母教子视频 四川单亲妈教子性知识 52岁全程落脸视频 我尝到了母爱的滋味开头 我尝到了母爱的滋味txt 我尝到了母爱的甜蜜400 真实母教子视频 我尝到了母亲的滋味400 我尝到了母爱的滋味450 单亲家庭母教子 啊儿子深点妈要来了中文字 美国真实的母教子视频 儿子别 停妈还要中文字 尝到了母爱的滋味400 让儿子尝试了一次中文字 我尝到了母爱的滋味40 我尝到了母爱的滋味400小说下载 好胀胀死妈了乖乖儿子中文字 我尝到了母爱的滋味300 儿子别射J去妈会怀孕视频中文 全屏儿子射J去妈怀孕了漫画 全屏无遮单身妈和儿 四川真实亲妈视频y 全屏无遮单身妈和儿子漫画 全屏无遮单身妈和儿子线播放 青岛重庆真实儿子亲妈 全屏无遮单身在线播放 四川真实亲妈视频链接 全屏无遮单身妈和儿子在线播放中文字 白边液越用白边越大 四川亲妈真实视频 普通话对白边电话边看边干 浙江边干边对白边对白边对白 离婚后一直跟儿子做 边骂脏话对白 离婚多年生理需求和儿子 儿子很帅没忍住和他 离婚后跟儿子做 和儿子一起旅游没忍住 离婚很多年和儿子一起