数据结构实践项目——顺序表

简介: 本组项目针对《数据结构基础系列(2):线性表》课程第1-7节 1. 导学 2. 线性表的逻辑结构与基本运算 3. 线性表的顺序存储结构 4. 创建线性表的实现(暨参数类型的讨论) 5. 顺序表基本运算的实现 6. 线性表顺序存储的应用 7. 实践指导:用程序实践算法【项目1 - 顺序表的基本运算】   领会“0207将算法变程序”部分建议的方法,将

本组项目针对《数据结构基础系列(2):线性表》课程第1-7节
1. 导学
2. 线性表的逻辑结构与基本运算
3. 线性表的顺序存储结构
4. 创建线性表的实现(暨参数类型的讨论)
5. 顺序表基本运算的实现
6. 线性表顺序存储的应用
7. 实践指导:用程序实践算法

【项目1 - 顺序表的基本运算】
  领会“0207将算法变程序”部分建议的方法,将顺序表部分的算法变成程序。
  实现顺序表基本运算有算法(对应视频0204创建线性表的实现0205顺序表基本运算的实现),依据“最小化”的原则进行测试。所谓最小化原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数完成测试。
  作为第一个这种类型的实践(后续每一部分均有这种实践,这是我们学习的基础,也是实践成果积累的基础),结合相关的算法,给出建议的过程:
  (1)目的是要测试“建立线性表”的算法CreateList,为查看建表的结果,需要实现“输出线性表”的算法DispList。在研习DispList中发现,要输出线性表,还要判断表是否为空,这样,实现判断线性表是否为空的算法ListEmpty成为必要。这样,再加上main函数,这个程序由4个函数构成。main函数用于写测试相关的代码。
程序的结构如下所示:

#include <....>   //必要的库文件包括
#define ...       //必要的宏定义
//声明实现算法的自定义函数,以及其他必要的自定义函数
//定义用于驱动测试的main函数
int main()
{

    return 0;
}
//定义各个自定义函数

  若在上面的指导性提示基础上还难于下手,请到课程主页,找到相关链接,观摩后再做。
  切记:(1)无从下手时,要找到参考,这是要“借力”;(2)找到参考,并未解决问题,观摩之后,丢开参考,自行完成,这是根本的目标。用这样的“抄之有道”,抄来的在心里,最终的成果,来自你的心中、脑中和手中。
  (2)在已经创建线性表的基础上,求线性表的长度ListLength、求线性表L中指定位置的某个数据元素GetElem、查找元素LocateElem的算法都可以实现了。就在原程序的基础上增加:
  增加求线性表的长度ListLength的函数并测试;
  增加求线性表L中指定位置的某个数据元素GetElem的函数并测试;
  增加查找元素LocateElem的函数并测试;
  (3)其余的4个基本运算:插入数据元素ListInsert、删除数据元素ListDelete、初始化线性表InitList、销毁线性表DestroyList都可以同法完成,请自行安排实践路线。
  请完成后,发布博文,展示你的实践成果。
[参考解答]

【项目2 - 建设“顺序表”算法库】
  领会“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。这一周,建的是顺序表的算法库。
  算法库包括两个文件:
  头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
  源文件:list.cpp,包含实现各种算法的函数的定义
  请采用程序的多文件组织形式,在项目1的基础上,建立如上的两个文件,另外再建立一个源文件,编制main函数,完成相关的测试工作。
  请完成后,发布博文,展示你的实践成果。
[参考解答]  

【项目3 - 求集合并集】
  假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。

提示:
(1)除了实现unnionList函数外,还需要在main函数中设计代码,调用unionList进行测试和演示;
(2)可以充分利用前面建好的算法库,在程序头部直接加 #include<list.h>即可(工程中最普遍的方法,建议采纳);
(3)也可以将实现算法中需要的线性表的基本运算对应的函数,与自己设计的所有程序放在同一个文件中。

  请完成后,发布博文,展示你的实践成果。
[参考解答]

【项目4 - 顺序表应用】
  定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
  1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
  2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。

提示:
(1)充分利用前面建立的算法库解决建立顺序表、输出线性表的问题;
(2)为保证复杂度的要求,设计算法并用专门的函数实现算法;
(3)每项工作写一个程序,并发布博文,展示你的实践成果。
[参考解答]

目录
相关文章
|
3月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
94 4
|
3月前
|
存储 编译器 C语言
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
72 2
|
8天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
2月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
2月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
85 3
|
2月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
3月前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
48 6
|
3月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
30 3
|
3月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
41 2
|
3月前
|
存储
【数据结构】线性表和顺序表
【数据结构】线性表和顺序表
30 1