济南大学数据结构(Java版)
- 格式:ppt
- 大小:1.48 MB
- 文档页数:91
第二章线性表线性结构特点:•唯一头元素•唯一尾元素•除头元素外,均有一个直接前驱•除尾元素外,均有一个直接后继书目信息、排队、算术表达式。
2.1 线性表的定义1. 线性表的语言定义线性表是n个数据元素的有限序列。
例,英文字母表(A,B,C,……,Z)线性表中的数据元素也可以由若干个数据项构成。
例,包含大量记录的登记表线性表可以表示为n 个数据元素的有限序列: (a1,…,a i-1,a i,…,a n)其中a1是头元素,a n是尾元素,a i是第i 个元素。
a i-1是a i的直接前驱,a i是a i-1的直接后继。
抽象数据类型线性表List 的定义:ADT List {数据对象: D = { a i | a i∈ElemSet,i = 1, 2, …, n }数据关系: R1 = { < a i-1, a i > }基本操作:InitList( &L )结果: 构造一个空的线性表L。
DestroyList( &L )条件: 线性表L 已存在。
…} ADT List其它基本操作包括:ClearList( &L )ListEmpty ( L )ListLength ( L )GetElem ( L,i,&e )LocateElem ( L,e,compare() )PriorElem ( L,cur_e,&pre_e )NextElem ( L,cur_e,&next_e )ListInsert ( &L,i,e )ListDelete ( &L,i,&e )ListTraverse ( L,visit() )2.2 线性表的顺序表示和实现线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。
线性表顺序存储结构表示# define LIST_INIT_SIZE 100# define LISTINCREMENT 10typedef struct {Elemtype* elem; //数据元素int length; // 表长,初始为0int listsize; // 表存储容量} SqList;Status InitList_Sq ( SqList &L ) { //初始化空线性表L.elem = ( ElemType * ) malloc( LIST_INIT_SIZE * sizeof(ElemType) );if ( ! L.elem ) exit(OVERFLOW) ;L.length = 0 ;L.listsize = LIST_INIT_SIZE ;return OK ;}线性表的顺序存储结构的优点•可随机存取表中任意数据元素(第i 个)L.elem[i-1]* (L.elem+i-1)•直接可获取线性表的长度L.length算法2.4 在第i个数据元素之前插入一个新的元素例,在第i 个元素前插入b思想:1. 找到第i个元素的位置。
济南大学自命题科目考试大纲5.掌握中序线索二叉树的建立和遍历方法;6.掌握树的存储表示方法,掌握树与二叉树的转换方法;森林与二叉树的转换方法;树和森林的遍历方法;7.理解哈夫曼树的概念,掌握建立哈夫曼树和哈夫曼编码的方法;六、图1.掌握图的基本概念和术语;熟练掌握图的邻接矩阵表示方法和邻接表表示方法;2.掌握用邻接矩阵,邻接表实现图的基本操作(创建一个图,插入或删除图中的顶点或边);3.熟练掌握图的深度优先搜索和广度优先搜索,了解非连通图的遍历方法和连通分量的计算;4.理解最小生成树的概念,熟练掌握Prim算法和Kruskal算法并掌握其生成方法;5.通过最小生成树算法了解贪心算法的思想及其求解问题的方法;6.熟练掌握单源点最短路径的Dijkstra算法,进一步理解如何用贪心算法求解问题;7.掌握用Floyd算法求图中所有顶点之间的最短路径;8.理解AOV网络和AOE网络的概念,掌握拓扑排序方法和计算关键路径的算法。
七、查找1.掌握查找的基本概念和查找方法的评判标准;2.熟练掌握顺序表查找和有序表查找的算法及其性能分析,计算平均查找长度;3.了解动态查找表的特点,二叉排序树的概念;掌握二叉排序树的构造和查找方法;理解平衡二叉树(AVL树)的概念;4.熟练掌握哈希函数、哈希表的构造方法,解决哈希冲突的方法,哈希表的查找及其分析。
八、排序1.掌握排序的基本概念,理解排序“稳定”和“不稳定”的含义,理解排序算法的评判标准;2.熟练掌握直接插入排序、希尔排序、直接选择排序、堆排序、快速排序、二路归并排序、基数排序的算法思想和算法设计方法;理解各种排序方法的性能特点并能灵活应用;3.通过快速排序和二路归并排序了解分治算法的思想及其求解问题的方法。
847算法与数据结构一、参考书目1.严蔚敏,《数据结构》,清华大学出版社2.殷人昆,《数据结构(用面向对象方法与C++语言描述)第2版》,清华大学出版社二、考试题型与分值选择题、填空题、判断题、计算题、算法题三、考试内容一、绪论1.理解数据结构的基本概念;数据结构的分类;理解数据类型和抽象数据类型的概念;2.掌握算法的定义和特性,理解算法的设计目标和判别算法优劣的性能标准;掌握算法效率得度量方法;掌握算法的时间、空间复杂度概念以及算法时间、空间复杂度的渐进分析方法。
二、线性表1.掌握线性表的逻辑结构和基本操作;2.熟练掌握线性表的顺序存储结构,链式存储结构及其它们的实现方法;3.掌握循环链表和双向链表的概念和基本的设计方法;4.掌握典型算法:线性表的原地逆置问题,约瑟夫环问题,两个有序线性表的合并问题,多项式计算问题三、栈和队列1.熟练掌握栈的概念、顺序栈和链式栈的设计方法及栈的典型应用(数制转换,括号匹配,表达式计算);2.掌握递归的概念;理解递归算法的思想,递归算法执行过程中工作栈的变化过程,对于简单的递归过程可以用栈将其改为非递归过程。
3.熟练掌握队列的概念、循环队列和链式队列的设计方法及队列的典型应用(输出杨辉三角形)4.了解优先级队列和双端队列的概念和存储表示四、数组1.理解多维数组的概念及存储结构,熟练掌握多维数组中任意一个数组元素的存储地址计算方法;2.熟练掌握特殊矩阵(三角矩阵,对称矩阵,多对角线矩阵)的压缩存储方法;3.掌握稀疏矩阵的概念,稀疏因子的定义;掌握稀疏矩阵的三元组表示及矩阵的转置、相加、相乘算法。
五、树和二叉树1.理解树的定义、树的表示方法和树的几种典型存储结构;2.熟练掌握二叉树的定义、二叉树的性质及其证明方法、二叉树的存储结构;3.熟练掌握二叉树遍历的递归算法和二叉树遍历的应用,掌握二叉树的层次遍历;4.了解二叉树遍历的非递归算法;掌握通过给定两个不同的遍历序列是否能唯一确定一个二叉树;5.掌握中序线索二叉树的建立和遍历方法;6.掌握树的存储表示方法,掌握树与二叉树的转换方法;森林与二叉树的转换方法;树和森林的遍历方法;7.理解哈夫曼树的概念,掌握建立哈夫曼树和哈夫曼编码的方法;六、图1.掌握图的基本概念和术语;熟练掌握图的邻接矩阵表示方法和邻接表表示方法;2.掌握用邻接矩阵,邻接表实现图的基本操作(创建一个图,插入或删除图中的顶点或边);3.熟练掌握图的深度优先搜索和广度优先搜索,了解非连通图的遍历方法和连通分量的计算;4.理解最小生成树的概念,熟练掌握Prim算法和Kruskal算法并掌握其生成方法;5.通过最小生成树算法了解贪心算法的思想及其求解问题的方法;6.熟练掌握单源点最短路径的Dijkstra算法,进一步理解如何用贪心算法求解问题;7.掌握用Floyd算法求图中所有顶点之间的最短路径;8.理解AOV网络和AOE网络的概念,掌握拓扑排序方法和计算关键路径的算法。
数据结构JAVA语言第二版课程设计一、项目背景作为学习数据结构的人,我们需要有一个在Java语言上实现数据结构算法的机会。
本项目旨在提供给学习者一个机会,让他们能够通过编写代码的方式掌握数据结构算法的具体实现方法,从而提升自己的编程能力和算法思维能力。
本项目是在Java语言中实现数据结构算法的课程设计,其主要包括数据结构的创建、遍历、插入、删除、排序等基本操作。
项目的主要内容有:1.数据结构说明文档:介绍数据结构的定义、特点和常用算法。
2.数据结构类定义:编写Java语言中的数据结构类,包括链表、栈、队列、二叉树、堆等。
3.数据结构算法实现:实现数据结构的基本操作算法,包括遍历、插入、删除、排序等。
4.数据结构算法测试:测试数据结构算法的正确性,分类和时间复杂度。
二、项目要求1.实现数据结构类定义,包括链表、栈、队列、二叉树、堆等。
2.实现各种数据结构的基本操作算法,包括遍历、插入、删除、排序等。
3.测试数据结构算法的正确性,分类和时间复杂度。
4.要求使用Java语言完成,实现数据结构算法的过程中可以引入第三方库。
三、项目流程1. 数据结构说明文档为了了解本项目中涉及到的数据结构,需要编写一个数据结构说明文档。
文档应该包括数据结构的定义、特点和常用算法,对于一些常见的算法应该给出具体的实现过程。
2. 数据结构类定义本次课程设计需要实现链表、栈、队列、二叉树、堆等数据结构。
初步设计完成后,需要对每种数据结构进行实现,并进行单元测试和集成测试,保证数据结构的正确性和计算性能。
3. 数据结构算法实现在数据结构类定义完成之后,需要开始实现数据结构的基本操作算法。
这里需要注意算法复杂度的问题,选择合适的算法来达到最优化的效果。
4. 数据结构算法测试为了验证数据结构算法的正确性,需要编写测试代码并进行测试。
测试代码需覆盖各种数据结构和算法的情况,包括正确和异常情况。
在测试代码完成后,需要根据测试结果对项目进行优化,提高数据结构算法的性能。
信息与数据的概念通俗讲,信息是经过加工处理并对人类社会实践和生产活动产生决策影响的数据。
它是现实世界各种事物的特征、形态以及不同事物间的联系等在人脑里的抽象反映。
数据是记录现实世界的信息的符号。
二者既有区别,又有联系。
数据是信息的载体,信息依赖数据表达。
但并非任何数据都能表示信息,它是加工处理后的数据;信息不随表示它的数据形式而改变,而数据则具有任意性,可用不同形式表示同样的信息。
信息世界中的基本概念:实体(Entity):客观存在的,可以相互区别的事物称为实体。
实体集(Entity Set):性质相同的同类实体组成的集合,称为实体集。
属性(Attribute):实体有很多的特征,如果我们把我们感兴趣的每一个特征抽取出来,每个特征称为属性。
码(Key):能唯一标识每个实体的属性或属性集,称为码。
机器世界中数据描述的常用概念:字段(Field):表示属性的命名单位称为字段或数据项。
它是可以命名的最小信息单位。
字段的定义包括字段名、字段类型、字段长度等。
记录(Record):字段的有序集合称为记录,一般对应信息世界中的一个实体,如描述图书的由有序的字段集组成(图书编号,单价,出版社)。
文件(File):同类的记录汇集成文件。
文件是描述实体集的。
例如,所有图书记录组成了一个图书文件。
关键字(Key):能唯一标识文件中每个记录的字段或字段集,称为记录的关键字。
例如图书的图书编号可以作为图书记录的关键字,学生的学号可以作为学生记录的关键字。
信息世界机器世界实体记录属性字段实体集文件码关键字数据是记录现实世界的信息并可以识别的符号,是数据库中存储的基本对象数据的定义描述事物的符号记录数据的种类文字、图形、图象、声音等数据的特点数据与其语义是不可分的数据库的定义数据库是长期储存在计算机内、有组织的、可共享的数据集合数据库的特征:数据按一定的数据模型组织、描述和储存可为各种用户共享冗余度较小数据独立性较高易扩展什么是DBMS数据库管理系统(Database Management System,简称DBMS)是位于用户与操作系统之间的一层数据管理软件。
数据结构(Java版)(第2版)习题解答叶核亚编著目录第0章Java程序设计基础 (1)【习0.1】实验0.1 哥德巴赫猜想。
(1)【习0.2】实验0.2 杨辉三角形。
(1)【习0.3】实验0.3 金额的中文大写形式。
(1)【习0.4】实验0.4 下标和相等的数字方阵。
(1)【习0.5】实验0.5 找出一个二维数组的鞍点 (2)【习0.6】实验0.6 复数类。
(2)【习0.7】实验0.8 图形接口与实现图形接口的类 (2)第1章绪论 (3)【习1.1】实验1.1 判断数组元素是否已按升序排序。
(3)【习1.2】实验1.3 用递归算法求两个整数的最大公因数。
(3)第2章线性表 (5)【习2.1】习2-5 图2.19的数据结构声明。
(5)【习2.2】习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? (5)【习2.3】实验2.2 由指定数组中的多个对象构造单链表。
(5)【习2.4】实验2.2 单链表的查找、包含、删除操作详见8.2.1。
(5)【习2.5】实验2.2 单链表的替换操作。
(6)【习2.6】实验2.2 首尾相接地连接两条单链表。
(6)【习2.7】实验2.2 复制单链表。
(6)【习2.8】实验2.2 单链表构造、复制、比较等操作的递归方法。
(7)【习2.9】建立按升序排序的单链表(不带头结点)。
(8)【习2.10】实验2.6 带头结点的循环双链表类,实现线性表接口。
(10)【习2.11】实验2.5 建立按升序排序的循环双链表。
(14)第3章栈和队列 (17)【习3.1】习3-5 栈和队列有何异同? (17)【习3.2】能否将栈声明为继承线性表,入栈方法是add(0,e),出栈方法是remove(0)?为什么? (17)【习3.3】能否用一个线性表作为栈的成员变量,入栈方法是add(0,e),出栈方法是remove(0)?为什么? (17)【习3.4】能否将队列声明为继承线性表,入队方法是add(e),出队方法是remove(0)?为什么? (17)第4章串 (18)【习4.1】实验4.6 找出两个字符串中所有共同的字符。
第五章数组和广义表数组和广义表均是元素为复合结构的线性结构。
5.1 数组的定义以二维数组为例,二维数组通常可以描述为两种形式:以行序为主序: PASCAL、C可以看成A = ( α0,α1,. . .,αm-1)T其中αi 是一个行向量形式的线性表,0≤i≤m-1αi = ( a i 0,a i 1,. . . ,a i n-1 )以列序为主序: FORTRAN可以看成A = ( α0,α1,……,αn-1)其中αj 是一个列向量形式的线性表,0≤j≤n-1αj = ( a0 j,a1 j,……,a m-1j )T5.2 数组的表示和实现数组一旦被定义,其维数和维界就不再改变,故通常采用顺序存储结构。
如何将多维数组结构转换对应一组连续的存储单元?以列序为主序以行序为主序对于数组,一旦规定了维数和维界,如何计算数组元素的存储位置?设数组以行序为主序。
二维数组A[m][n]数组元素a ij 的存储位置为LOC(i,j) =LOC(0,0)+ ( n×i + j ) L LOC(0,0)是a00的存储位置;L是每个数组元素占用的存储单元数;例,LOC(1,1) =LOC(0,0) + ( n×1 + 1 ) L三维数组 A ( b1,b2,b3 )LOC(0,0,0)是a000的存储位置;L是每个数组元素占用的存储单元数;LOC(1,1,1) =LOC(0,0,0) + ( b2×b3×1 + b3×1 + 1 ) L数组元素a ijk 的存储位置为:LOC(i,j,k) = LOC(0,0,0) + ( b2×b3×i + b3×j + k ) Ln 维数组A ( b1,b2,… ,b n )的元素存储位置可计算为:LOC(j1,j2,……,j n)= LOC(0,0,……,0) +( b2×……×b n×j1 + b3×……×b n×j2 +……+ b n×j n-1 + j n ) L5.3 矩阵的压缩存储矩阵元素如何存储?通常利用二维数组来存储矩阵元素。
数据结构(Java版)习题解答与实验指导目录第1章绪论 (1)1.1 数据结构的基本概念 (1)1.2 算法 (2)第2章线性表 (3)2.1 线性表抽象数据类型 (3)2.2 线性表的顺序存储和实现 (4)2.2.1 线性表的顺序存储结构 (4)2.2.2 顺序表 (5)2.2.3 排序顺序表 (7)2.3 线性表的链式存储和实现 (9)2.3.1 单链表 (9)【习题2-8】单链表结点类问题讨论。
(9)【习2.1】使用单链表求解Josephus环问题。
(12)【习2.2】集合并运算,单链表深拷贝的应用。
(14)2.3.2 双链表 (16)【习2.3】循环双链表的迭代方法。
(19)【习2.4】循环双链表合并连接。
(19)第3章串 (21)3.1 串抽象数据类型 (21)3.2 串的存储和实现 (22)3.2.1 串的存储结构 (22)3.2.2 常量字符串类 (22)【习3.1】C/C++语言,string.h中的strcpy()和strcat()函数存在下标越界错误。
(22)【思考题3-1】逆转String串,分析算法效率。
(24)【实验题3-1】MyString类,比较串大小,忽略字母大小写。
25【例3.2思考题3-2】MyInteger整数类,返回value的radix进制原码字符串。
(26)【实验题3-9】浮点数类。
(27)3.2.3 变量字符串类 (30)【实验题3-11】删除变量串中的所有空格。
4-样卷 (30)3.3 串的模式匹配 (31)3.3.1 Brute-Force模式匹配算法 (31)3.3.2 模式匹配应用 (32)【思考题3-4,实验题3-13】MyString类,replaceAll(pattern,s)改错。
(32)3.3.3 KMP模式匹配算法 (33)第4章栈和队列 (36)4.1 栈 (36)4.2 队列 (38)4.3 递归 (41)【习4.1】打印数字塔。
2022年济南大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。
A.快速排序B.堆排序C.归并排序D.直接插入排序2、哈希文件使用哈希函数将记录的关键字值计算转化为记录的存放地址,因为哈希函数是一对一的关系,则选择好的()方法是哈希文件的关键。
A.哈希函数B.除余法中的质数C.冲突处理D.哈希函数和冲突处理3、静态链表中指针表示的是()。
A.下一元素的地址B.内存储器的地址C.下一元素在数组中的位置D.左链或右链指向的元素的地址4、循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。
A.(rear-front+m)%mB.rear-front+1C.rear-front-1D.rear-front5、动态存储管理系统中,通常可有()种不同的分配策略。
A.1B.2C.3D.46、循环队列放在一维数组A中,end1指向队头元素,end2指向队尾元素的后一个位置。
假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。
初始时为空,下列判断队空和队满的条件中,正确的是()。
A.队空:end1==end2;队满:end1==(end2+1)mod MB.队空:end1==end2;队满:end2==(end1+1)mod (M-1)C.队空:end2==(end1+1)mod M;队满:end1==(end2+1) mod MD.队空:end1==(end2+1)mod M;队满:end2==(end1+1) mod (M-1)7、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ8、每个结点的度或者为0或者为2的二叉树称为正则二叉树。
数据结构试题及答案一、选择题(每小题2分,共20分),每个题的备选答案中,只有一个是正确的,请将答案填写在试题的括号中。
1、对顺序存储的线性表,设其长度为20,在任何位置上插入或删除操作都是等概率的。
插入一个元素时平均要移动表中的()个元素。
A.10 B.9 C.11 D.122、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表C.双链表 D.仅有尾指针的单循环链表3、当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时,首先应执行()语句修改top指针。
A.top++ B.top-- C.top = 0 D.top4、设入栈顺序为A,B,C,D,E,则出栈序列不可能是()。
A.EDCBA B.ABCDE C.ADEBC D.ABDEC5、已知关键字序列(46, 79, 56, 38, 40, 84),采用快速排序(以位于最左位置的关键字为基准)得到的第一次划分结果为:()A.{ 40, 38, 46, 56, 79, 84 } B.{ 38, 46, 79, 56, 40, 84 }C.{ 38, 46, 56, 79, 40, 84 } D.{ 40, 38, 46, 79, 56, 84 }6、一个有n个顶点和n条边的无向图一定是()。
A.不连通的B.连通的C.有环的D.无环的7、在一棵具有n个结点的二叉树的第i层上,最多具有()个结点。
A.2i B.2i-1 C.2i+1 D.2n 8、对线性表采用折半查找法,该线性表必须()。
A.采用顺序存储结构B.采用顺序存储结构,且元素按值有序C.采用链式存储结构 D.采用链式存储结构,且元素按值有序9、在一棵具有n个结点的完全二叉树中,分支结点的最大编号为()。
A.?(n-1)/2? B.?n/2? C.?n/2? D.?n/2? -110、在一个无向图中,所有顶点的度数之和等于所有边数的 ( ) 倍。
846数据结构一、参考书目1.严蔚敏,《数据结构》,清华大学出版社2.殷人昆,《数据结构(用面向对象方法与C++语言描述)第2版》,清华大学出版社二、考试题型与分值选择题、填空题、判断题、计算题、算法题三、考试内容一、绪论1.理解数据结构的基本概念;了解数据类型和抽象数据类型的概念;2.理解算法的设计目标;掌握算法的时间、空间复杂度概念以及时间、空间复杂度的分析方法。
二、线性表1.理解线性表的逻辑结构和基本操作;2.熟练掌握线性表的顺序存储结构和实现方法;3.熟练掌握线性表的链式存储结构和实现方法;4.理解单循环链表和双向链表的概念和基本设计方法。
三、栈和队列1.熟练掌握栈的概念、顺序栈和链式栈的设计方法及栈的典型应用;2.熟练掌握队列的概念、循环队列和链式队列的设计方法及队列的典型应用。
四、数组1.理解多维数组的概念及存储结构,熟练掌握多维数组中任意一个数组元素的存储地址计算方法;2.熟练掌握特殊矩阵(三角矩阵,对称矩阵)的压缩存储方法;3.掌握稀疏矩阵的概念,稀疏因子的定义;掌握稀疏矩阵的三元组表示及矩阵转置算法。
五、树和二叉树1.理解树的定义、表示方法和树的几种典型存储结构;2.熟练掌握二叉树的定义、二叉树的性质、二叉树的存储结构;3.熟练掌握二叉树遍历的递归算法和二叉树遍历的应用,掌握二叉树的层次遍历;4.掌握树的存储表示方法,掌握树与二叉树的转换方法;森林与二叉树的转换方法;树和森林的遍历方法;5.理解哈夫曼树的概念,掌握建立哈夫曼树和哈夫曼编码的方法。
六、图1.掌握图的基本概念和术语;熟练掌握图的邻接矩阵表示方法和邻接表表示方法;2.熟练掌握图的深度优先搜索和广度优先搜索;3.理解最小生成树的概念,熟练掌握Prim算法和Kruskal算法并掌握其生成方法;4.熟练掌握单源点最短路径的Dijkstra算法;5.理解AOV网络和AOE网络的概念,掌握拓扑排序方法,理解关键路径的概念。
七、查找1.掌握查找的基本概念和查找方法的评判标准;2.熟练掌握顺序表查找和有序表查找的算法及其性能分析,计算平均查找长度;;3.了解动态查找表的特点,二叉排序树的概念;掌握二叉排序树的构造和查找方法;4.熟练掌握哈希函数、哈希表的构造方法,解决哈希冲突的方法,哈希表的查找及其分析八、排序1.掌握排序的基本概念,理解排序“稳定”和“不稳定”的含义,理解排序算法的评判标准;2.熟练掌握直接插入排序、希尔排序、直接选择排序、堆排序、快速排序、二路归并排序、基数排序的算法思想和算法设计方法;理解各种排序方法的性能特点并能灵活应用。
济南大学数据结构课程设计总结济南大学数据结构课程设计总结课程设计总结本次课程设计中,使用线性表的顺序存储结构、指针传递等编程思想,再次熟悉了顺序表的数据结构及存储结构,熟练使用指针传递及指针操作的。
程序设计中,基本外框实现简单一些,一次编写并调试成功,在实现集合运算的三个子程序时显得稍微费时,包括只声明但没有实际创建用于保存的顺序表Lc运行时只看到内存使用错误但不知道具体位置浪费了时间;在执行并操作时按照最初设计是直接将位于Lb的元素而不存在于La的元素复制到La中,导致在后期操作交运算时出现结果错误,后期才将其调整为含有3个参数输入的子函数;另外声明三个顺序表时使用如下:Sqlistlist1,list2,list3;Sqlist*La,*Lb,*Lc;La=&list1;Lb=&list2; Lc=&list3;的语句,相对而言有一定的不合理,但不知道具体该如何改进;在使用数据结构时,题目已经要求是整型数据元素,可以直接使用一维数组来操作,不过在控制循环时要用sizeof()库函数实现,另外在运算结果上要有值回传的实现,相对而言不如用指针方便;再分配存储空间时不合理,La 和Lb的长度可以从终端输入在分配相应的空间大小,Lc的大小可以适当的根据La和Lb的长度动态的设定;在设计时间复杂度上可以改进,但没找到更好的方法。
通过实践可以清楚的了解编程的细节及各个子函数与主函数的调用配合,熟悉并运用课本所学知识,从设定合适数据结构,设计各子函数功能及配合到时间复杂度和程序容错能力及改进都是对个人编程能力的锻炼和提高。
另外编程时看清题目的功能是最关键的,否则会混乱程序结构且得不到想要的结果。
扩展阅读:数据结构课程设计总结(模板)《数据结构》课程设计报告题目:班级:计算机系1001班姓名:王彩娟刘爽学号:4236指导教师:刘延岭日期:202*年7月3日一、课程设计目标1、问题描述以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。