第三周 项目一 顺序表的基本运算 (1)(2)(3)

本文介绍了一个使用C语言实现的线性表基本操作案例,包括建立、查询、插入、删除等核心功能,并提供了完整的源代码及运行结果。
  1. /* 
  2. * Copyright(c) 2017,烟台大学计算机学院 
  3. * All rights reserved. 
  4. * 文件名称:main.cpp 
  5. * 作    者:张翠平 
  6. * 完成日期:2017 年 9 月 20 日 
  7. * 版 本 号:v1.0 
  8. * 
  9. * 问题描述:建立线性表,求线性表的长度,求线性表L中指定位置的某个元素,查找元素,插入数据元素,删除数据元素,初始化线性表,销毁线性表
  10. * 输入描述:无
  11. * 程序输出:线性表,表长度,指定位置的数据元素,查找元素位置,线性表
  12. */  
  13. 问题及代码:
  14. #include <stdio.h>
    #include <malloc.h> //必要的库文件包括
    #define MaxSize 50  //必要的宏定义
    typedef int ElemType;  //ElemType在不同场合可以根据问题的需要确定,在此取简单的int
    typedef struct
    {
        ElemType data[MaxSize];  //利用了前面MaxSize和ElemType的定义
        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);
    void DestroyList(SqList *&L);
    bool ListDelete(SqList *&L, int i, ElemType &e);
    
    //定义用于驱动测试的main函数
    int main()
    {
        SqList *sq;
        InitList(sq);
        ListInsert(sq, 1, 5);
        ListInsert(sq, 2, 3);
        ListInsert(sq, 1, 4);
        DispList(sq);
        ElemType a;
        int loc;
    
        printf("表长度:%d\n", ListLength(sq));  //测试求长度
    
        if(GetElem(sq, 3, a))  //测试在范围内的情形
            printf("找到了第3个元素值为:%d\n", a);
        else
            printf("第3个元素超出范围,false!\n");
    
        if((loc=LocateElem(sq, 8))>0)  //测试能找到的情形
            printf("找到了,值为2的元素是第 %d 个\n", loc);
        else
            printf("值为2的元素没有找到,false!\n");
    
        ListDelete(sq,2,a);
        DispList(sq);
        DestroyList(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;
    }
    
    //输出线性表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);
    }
    
    //求线性表的长度ListLength(L)
    int ListLength(SqList *L)
    {
        return(L->length);
    }
    
    //求某个数据元素值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;
    }
    
    //初始化顺序表InitList(&L)
    void InitList(SqList *&L)
    {
        L=(SqList *)malloc(sizeof(SqList));
        L->length=0;
    
    }
    //插入数据元素ListInsert(L,i,e)
    
    void DestroyList(SqList *&L)
    {
        free(L);
    }
    
    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;
    
    }
    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;
    }
    


  15. 运行结果:
  16. 
    
  17. 知识点总结:
  18. 注意头文件的添加,不要漏掉函数声明中的;号。
  19. 心得体会:
  20. 熟记指针和引用的基础知识。
  21. 
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值