bool DeleteX(const T &x)
3. 算法分析
线性表的基本运算程序的主要算法的算法时间复杂度和空间复杂度为O(n)
四、程序代码
void SeqList
T temp; //临时变量存放数据
for(int i = 0; i < n / 2; i++) //前后互换逆置 {
temp = elements[i];
elements[i] = elements[n - i - 1]; elements[n - i - 1] = temp; } }
template
bool SeqList
int tmp = n, i; //用于判断是否有删除数据 n = 0;
int *hash = new int[tmp]; for(i = 0; i < tmp; i++) {
hash[i] = 0;
if(elements[i] == x) hash[i]++; }
for(i = 0; i < tmp; i++) if(!hash[i])
elements[n++] = elements[i]; delete[]hash;
if(n == tmp) //判断是否有删除的数据 return false; else
return true; }
五、测试和调试
1. 测试用例和结果
1) 输入顺序表的长度为10
2) 输入10个元素分别为1,3,7,8,4,6,24,15,22,9
3) 输出创建好的表:1,3,7,8,4,6,24,15,22,9
以及逆置后的表:9,22,15,24,6,4,8,7,3,1
4) 输入要删除的数据22,接着输出删除该数据后的
5) 重新输入需要删除的数据4,24,如图所示只删除了4
2. 结果分析
1) 程序能够正确的实现顺序表的逆置以及删除特定值的元素 2) 由测试结果来看,数据无法实现两个数的同时删除,还有改进的空
间
六、实验小结
通过这次课程设计,使我对数据结构有了初步的清晰了解,增强了程序的编写能力,在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,终于完成了这段程序。在调试过程中,我认识到了数据结构的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。我也认识到了自己的薄弱之处,如对c++和链表知识不够熟悉,在以后的学习中我们要集中精力、端正态度,争取把知识学得更扎实、更全面。
实习题名:多项式的基本运算 班级 姓名 学号 日期2016.03.10 一、 问题描述 设计带表头结点的单链表表示的多项式类,在该类上定义和实现教材2.4节中程序2.7的多项式类上的各个运算,在该类上增加成员函数void
PolyMul(Polynominal & r),并重载*运算符,实现菜单驱动的main函数,测试多项式类上各个运算:输入多项式,显示多项式,多项式加法和乘法运算。
二、 概要设计
文件polynominal.cpp中定义了两个类,分别是多项式结点类Term和多项式类polynominal。
三、 详细设计
1. 类和类的层次结构
为实现多项式的算术运算,在polynominal类之前定义了Term类。
Term -int coef; -int exp; -Term* link; +Term(int c, int e); +Term(int c, int e, Term* nxt); +Term* InsertAfter(int c, int e); Polynomina -Term* theList +void AddTerms(istream& in); +void Output(ostream& out)const; +void PolyAdd(Polynominal& r); +void PolyMul(Polynominal& r); 2. 核心算法
项结点类中定义了三个私有数据域分别为coef、指数exp和指向下一个项结点的指针域link,多项式polynominal被声明成结点类的友元类。多项式polynominal其中包括了三个公有成员函数: AddTerms,Output,PolyAdd, PolyMul,分别实现多项式的输入、输出、相加、相乘。PolyAdd(Polynominal& r)函数和PolyMul(Polynominal& r)函数的流程图如下。
q1指向表头结点 p指向第一个要处理的结点 N p!=NULL&&p->exp>Y N p->exp