第三周项目1—顺序表的基本运算

来源:互联网 发布:java执行cmd命令 参数 编辑:程序博客网 时间:2024/04/30 09:07

问题:

/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:顺序表的基本运算.cpp *作    者:李艺*完成日期:2015年9月19日 *版 本 号:v1.0 * *问题描述:实现顺序表基本运算有算法,依据“最小化”的原则进行测试。所谓最小化           原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数           完成测试。 *输入描述:无 *程序输出:依据各个函数而定*/


(1)目的是要测试“建立线性表”的算法CreateList,为查看建表的结果,需要实现“输出线性表”的算法DispList。在研习DispList中发现,要输出线性表,还要判断表是否为空,这样,实现判断线性表是否为空的算法ListEmpty成为必要。这样,再加上main函数,这个程序由4个函数构成。main函数用于写测试相关的代码。

  

代码:

#ifndef LIST_H_INCLUDED#define LIST_H_INCLUDED#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef 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)#endif//测试函数int main(){    SqList *sq;    ElemType x[8]= {1,9,9,6,0,5,0,1};    CreateList(sq, x, 8);//最后为0则是空表    if((ListEmpty(sq))>0)  //测试不能找到的情形        printf("是空表\n");    else        printf("不是空表\n");    DispList(sq);    return 0;}//定义各个自定义函数//用数组创建线性表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("\n");}


运行结果:



(2)在已经创建线性表的基础上,求线性表的长度ListLength、求线性表L中指定位置的某个数据元素GetElem、查找元素LocateElem的算法都可以实现了。就在原程序的基础上增加: 

  • 增加求线性表的长度ListLength的函数并测试; 
  • 增加求线性表L中指定位置的某个数据元素GetElem的函数并测试; 
  • 增加查找元素LocateElem的函数并测试; 
代码:

#ifndef LIST_H_INCLUDED#define LIST_H_INCLUDED#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef 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)int ListLength(SqList *L);//求线性表的长度ListLength(L)bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)#endif//测试函数int main(){    SqList *sq;    int k;    ElemType E;    ElemType x[8]= {1,9,9,6,0,5,0,1};    CreateList(sq, x, 8);//最后为0则是空表     printf("表长度:%d\n", ListLength(sq));  //测试求长度    if(GetElem(sq, 3, E))  //测试在范围内的情形        printf("找到了第3个元素值为:%d\n", E);    else        printf("第3个元素超出范围!\n");    if(GetElem(sq, 15, E))  //测试不在范围内的情形        printf("找到了第15个元素值为:%d\n", E);    else        printf("第15个元素超出范围!\n");    if((k=LocateElem(sq, 1))>0)  //测试能找到的情形        printf("找到了,值为1的元素是第 %d 个\n", k);    else        printf("值为1的元素木有找到!\n");    if((k=LocateElem(sq, 16))>0)  //测试不能找到的情形        printf("找到了,值为16的元素是第 %d 个\n", k);    else        printf("值为16的元素木有找到!\n");    return 0;}//定义各个自定义函数//用数组创建线性表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);}//求线性表的长度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;}

运行结果:


 


(3)其余的4个基本运算:插入数据元素ListInsert、删除数据元素ListDelete、初始化线性表InitList、销毁线性表DestroyList

代码:
<span style="font-size:12px;">#ifndef LIST_H_INCLUDED#define LIST_H_INCLUDED#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef int ElemType;typedef struct{    ElemType data[MaxSize];    int length;} SqList;void DispList(SqList *L);bool ListEmpty(SqList *L);void InitList(SqList *&L);   //引用型指针void DestroyList(SqList *&L);bool ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);#endif//测试函数int main(){    SqList *sq;    ElemType E;    printf("初始化线性表\n");    InitList(sq);    printf("在第1个位置插入元素1\n");    ListInsert(sq, 1, 1);    DispList(sq);    printf("在第2个位置插入元素6\n");    ListInsert(sq, 2, 6);    DispList(sq);    printf("在第1个位置插入元素9\n");    ListInsert(sq, 1, 9);    DispList(sq);    printf("删除第2个位置的元素\n");    ListDelete(sq,2,E);    DispList(sq);    printf("销毁线性表\n");    DestroyList(sq);    DispList(sq);        return 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("\n");}//判定是否为空表ListEmpty(L)bool ListEmpty(SqList *L){    return(L->length==0);}//初始化线性表InitList(L)void InitList(SqList *&L)   //引用型指针{    L=(SqList *)malloc(sizeof(SqList));    //分配存放线性表的空间    L->length=0;}//销毁线性表DestroyList(L)void DestroyList(SqList *&L){    free(L);}//插入数据元素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}

运行结果:




知识点总结:

            让我们对线性表算法库有了一个系统的认识,算法库对于我们认识学习算法有非常大的帮助。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机淘宝图片模糊怎么办 朋友圈发图模糊怎么办 手机截图不清晰怎么办 原图字体不清晰怎么办? ugg下雨天进水了怎么办 淘宝超过提醒上限怎么办 天猫主图超过12m怎么办 淘宝图片变模糊怎么办 旺旺群不能加入怎么办 淘宝手机端模糊怎么办 淘宝无线访客少怎么办 php环境搭建失败怎么办 红色被染上黑色怎么办 手提包带子断了怎么办 拼多多商品驳回怎么办 京东结算不了怎么办 夏天白酒不好卖怎么办 个人支票丢了怎么办 鼻子长巨大脓包怎么办 微信里怎么提现怎么办 天猫账号被风控怎么办 618津贴不够用怎么办 天猫精灵不灵敏怎么办 淘宝被恶意退款怎么办 天猫红包失效怎么办 预约人数满了怎么办 淘宝签证拒签怎么办 天猫美的差评怎么办 直通车欠费三块怎么办 上海个人户口卡怎么办 网购信息泄露怎么办 单张券达到上限怎么办 未成年偷钱充q币怎么办 被香港中炎骗了怎么办 房东要收回店面怎么办 天猫字迹模糊怎么办 淘宝类目不叫上架怎么办 淘宝直播有延迟怎么办 淘宝直播间中奖怎么办 微信扫码付款后卖家不发货怎么办 淘宝打骚扰电话怎么办