实验报告
(2014 / 2015 学年第二学期)
课程名称数据结构
实验名称线性表的基本运算及多项式的算术运算
实验时间2015 年9 月28 日
指导单位计算机科学与技术系
指导教师黄海平
学生姓名陈明阳班级学号Q14010119 学院(系) 贝尔英才专业信息科技强化班
实验报告
class SeqList :public LinearList
{
public:
SeqList(int mSize);
~SeqList() { delete[] elements; }
bool IsEmpty() const;
int Length() const;
bool Find(int i, T& x) const;
int Search(T x) const;
bool Insert(int i, T x);
bool Delete(int i);
bool Update(int i, T x);
void Output(ostream& out)const;
private:
int maxLength;
T *elements;
};
template
SeqList
{
maxLength = mSize;
elements = new T[maxLength];
n = 0;
}
template
bool SeqList
{
return n == 0;
}
template
int SeqList
{
return n;
}
template
bool SeqList
{
if (i<0 || i>n - 1)
{
cout <<"out of bounds"<< endl; return false;
}
x = elements[i];
return true;
}
template
int SeqList
{
for (int j = 0; j < n; j++)
if (elements[j] == x)return j;
return -1;
}
template
bool SeqList
{
if (i<-1 || i>n - 1)
{
cout <<"out of bounds"<< endl;
return false;
}
if (n == maxLength)
{
cout <<"over flow"<< endl;
return false;
}
for (int j = n - 1; j > i; j--)elements[j + 1] = elements[j];
elements[i + 1] = x;
n++;
return true;
}
template
bool SeqList
{
if (i<0 || i>n - 1)
{
cout <<"out of bounds"<< endl;
return false;
}
if (!n)
{
cout <<"over flow"<< endl;
return false;
}
for (int j = i+1; j n--; return true; } template 重构函数如下: 源码: #include using namespace std; class Term { public: Term(int c, int e); Term(int c, int e, Term* nxt); Term* InsertAfter(int c, int e); private: int coef; int exp; Term* link; friend ostream& operator<<(ostream &, const Term &); friend class Polynominal; }; Term::Term(int c, int e) :coef(c), exp(e) { link = 0; } Term::Term(int c, int e, Term *nxt) : coef(c), exp(e) { link = nxt; } Term* Term::InsertAfter(int c, int e) { link = new Term(c, e, link); return link; } ostream& operator<<(ostream& out, const Term& val) { if (0 == val.coef) return out; if (1!= val.coef) out< switch (val.exp) { case 0:break; case 1:out<<"X"; break; default:out<<"X^"< } return out; } class Polynominal { public: Polynominal(); ~Polynominal(); void AddTerms(istream& in); void Output(ostream& out)const; void PolyAdd(Polynominal& r); void PolyMul(Polynominal& r); private: Term* theList; friend ostream& operator<<(ostream &, const Polynominal &); friend istream& operator>>(istream&, Polynominal &); friend Polynominal& operator+(Polynominal &, Polynominal &); friend Polynominal& operator*(Polynominal &, Polynominal &); }; Polynominal::Polynominal() { theList = new Term(0, -1); //头结点 theList->link = NULL; //单链表尾结点指针域为空 } Polynominal::~Polynominal() { Term* p = theList->link; while (p != NULL) { theList->link = p->link; delete p; p = theList->link; } delete theList; } void Polynominal::AddTerms(istream & in) { Term* q = theList; int c, e; for (;;) { cout <<"Input a term(coef,exp):\n"<< endl; cin >> c >> e; q = q->InsertAfter(c, e); if (0 >= e) break; } } void Polynominal::Output(ostream& out)const { int first = 1; Term *p = theList->link; for (; p != NULL && p->exp >= 0; p = p->link) { if (!first && (p->coef>0)) out<<"+"; first = 0; out<< *p; } cout << endl; } void Polynominal::PolyAdd(Polynominal& r) { Term *q, *q1 = theList, *p; //q1指向表头结点 p = r.theList->link; //p指向第一个要处理的结点 q = q1->link; //q1是q的前驱,p和q就指向两个当前进行比较的项while (p != NULL && p->exp >= 0)//对r的单循环链表遍历,知道全部结点都处理完 { while (p->exp < q->exp) //跳过q->exp大的项 { q1 = q; q = q->link; } if (p->exp == q->exp) //当指数相等时,系数相加 { q->coef = q->coef + p->coef; if (q->coef == 0) //若相加后系数为0,则删除q { q1->link = q->link; delete(q); q = q1->link; //重置q指针 } else { q1 = q; //若相加后系数不为0,则移动q1和q q = q->link; } } else//p>exp>q->exp的情况 q1 = q1->InsertAfter(p->coef, p->exp); //以p的系数和指数生成新结点,插入q1后 p = p->link; } } void Polynominal::PolyMul(Polynominal& r) { Polynominal result; //定义相乘后的数据 Term *n = result.theList; //n指向result的头结点 n = n->InsertAfter(0, 0); //在result的头结点后插入新结点,系数指数均为0 Term *p = r.theList->link; //p指向第一个要处理的结点 while(p->exp >= 0) //对r的单循环链表遍历 { Polynominal tmp; //存储某段相乘后的数据 Term *m = tmp.theList; //m指向tmp的头结点 Term *q = theList->link; //q指向表头结点的后继结点 while(q->exp >= 0) //对当前对象的单循环环链表遍历 { m = m->InsertAfter((p->coef)*(q->coef), (p->exp) + (q->exp)); //生成新结点插入n后 q = q->link; } result.PolyAdd(tmp); //将temp加到result上 p = p->link; } Term *q = theList->link; //q指向表头结点的后继结点 while(q != NULL) //删除原对象的所有数据 { theList->link = q->link; delete q; q = theList->link; } q = theList; q = q->InsertAfter(0, 0); PolyAdd(result); //将result加到当前对象上} ostream &operator<<(ostream& out, const Polynominal& x) { x.Output(out); return out; } istream &operator>>(istream& in, Polynominal &x) { x.AddTerms(in); return in; } Polynominal & operator + (Polynominal &a, Polynominal &b) { a.PolyAdd(b); return a; } Polynominal & operator * (Polynominal &a, Polynominal &b) { a.PolyMul(b); return a; } int main() { int choose; cout <<"choose calculate type 1.add 2.mul"<< endl; cin >> choose; Polynominal p, q; switch (choose) { case 1: cin >> p; cout << p; cin >> q; cout << q; q = q + p; break; case 2: 实验报告 实验2 查找算法的实现和应用?实验目的 1. 熟练掌握静态查找表的查找方法; 2. 熟练掌握动态查找表的查找方法; 3. 掌握hash表的技术. ?实验内容 1.用二分查找法对查找表进行查找; 2.建立二叉排序树并对该树进行查找; 3.确定hash函数及冲突处理方法,建立一个hash表并实现查找。 程序代码 #include cout<<"Not present!"; } return 0; } 结果 二叉排序树 #include 《数据结构课程实验》大纲 一、《数据结构课程实验》的地位与作用 “数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: (1)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时) 实验报告 (2015 / 2016学年第二学期) 课程名称数据结构A 实验名称二叉树的基本操作及哈夫曼编码译码系统的实现 实验时间2016 年 4 月14 日 指导单位计算机科学与技术系 指导教师骆健 学生姓名班级学号 学院(系) 管理学院专业信息管理与信息系统 实习题名:二叉树的基本操作 班级姓名学号日期2016.04.14 一、问题描述 设计递归算法,实现下列二叉树运算:删除一棵二叉树、求一棵二叉树的高度、求一棵二叉树中叶子结点数、复制一棵二叉树、交换一棵二叉树的左右子树。设计算法,按自上到下,从左到右的顺序,按层次遍历一棵二叉树。设计main函数,测试上述每个运算。 二、概要设计 文件tree.cpp中在该文件中定义二叉树的链式存储结构,用队列实现二叉树的层次遍历,并且编写实现二叉树的各种基本操作函数。其中包括结点类BTNode,循环队列类SeqQueue,二叉树类BinaryTree。主函数main的代码如图所示。 三、详细设计 1.类和类的层次设计 程序定义了循环队列SeqQueue类和二叉树BinaryTree类。SeqQueue类主要是用队列实现,层次遍历。运用后序遍历思想,把树分解为左右子树和跟结点再进行左右交换并计算树的高度,最后删除二叉树。 (a )循环队列类 (b )二叉树类 2. 核心算法 程序利用循环队列SeqQueue 类通过不断出队并输出节点的值,将左右孩子入队直到队列为空实现二叉树的层次遍历。并运用后序遍历思想,将二叉树树分解为左右子树和根结点,利用(p -> lChild)和(p -> rChild)计算结点数目,并通过交换结点的左右子树实现左右交换,计算树的高度,最后删除二叉树。核心算法主要是二叉树BinaryTree 类中的High ,Node_num ,Exchange ,Level_traversal 四个函数,其设计流程图如下: SeqQueue -int front, rear; -int maxSize; -BTNode 数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include 数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"< 班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK; 数据结构(C语言版) 实验报告 专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测 试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"" #include"" #include"" #include"" typedef struct node . . 示意图: head head head 心得体会: 本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。另外实验指导书上给出的代码是有一些问题的,这使我们认识到实验过程中不能想当然的直接编译执行,应当在阅读并完全理解代码的基础上再执行,这才是实验的意义所在。 实验2 实验题目:二叉树操作设计和实现 实验目的: 掌握二叉树的定义、性质及存储方式,各种遍历算法。 实验要求: 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历 的操作,求所有叶子及结点总数的操作。 实验主要步骤: 1、分析、理解程序。 2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针), 如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求 所有叶子及结点总数。 实验代码 #include"" #include"" #include"" #define Max 20 ertex=a; irstedge=NULL; irstedge; G->adjlist[i].firstedge=s; irstedge; R[i] 留在原位 长春大学计算机学院网络工程专业 数据结构实验报告 实验名称:实验二栈和队列的操作与应用 班级:网络14406 姓名:李奎学号:041440624 实验地点:日期: 一、实验目的: 1.熟练掌握栈和队列的特点。 2.掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用。 3.掌握链队的入队和出队等基本操作。 4.加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力。 二、实验内容、要求和环境: 注:将完成的实验报告重命名为:班级+学号+姓名+(实验二),(如:041340538张三(实验二)),发邮件到:ccujsjzl@https://www.doczj.com/doc/dd2960527.html,。提交时限:本次实验后24小时之内。 阅读程序,完成填空,并上机运行调试。 1、顺序栈,对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 (1)文件SqStackDef. h 中实现了栈的顺序存储表示 #define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/ #define STACKINCREMENT 2 /* 存储空间分配增量*/ typedef struct SqStack { SElemType *base; /* 在栈构造之前和销毁之后,base 的值为NULL */ SElemType *top; /* 栈顶指针*/ int stacksize; /* 当前已分配的存储空间,以元素为单位*/ }SqStack; /* 顺序栈*/ (2)文件SqStackAlgo.h 中实现顺序栈的基本操作(存储结构由SqStackDef.h 定义) Status InitStack(SqStack &S) { /* 构造一个空栈S */ S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); /* 存储分配失败*/ S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } int StackLength(SqStack S) { // 返回S 的元素个数,即栈的长度, 编写此函数 2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList [内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template 1.1实验步骤 随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加,因此软件开发需要系统的方法。一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实习题的复杂度远不如实际中真正的软件系统,但为了培养一个软件工作者所应具备的科学工作的方法和作风,我们制订了如下所述完成实验的5个步骤: 1、问题分析和任务定义 通常,实验题目的陈述比较简洁,或者说有模棱两可的含义。因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么,解决问题的关键是什么。注意:本步骤强调的是做什么,而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等。这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。 2.数据类型和算法设计 在设计这一步骤中需分概要设计和详细设计两步实现。概要设计指的是,对问题分析中提出的解决问题的关键点进行进一步阐述,提出问题的解决方案(算法思想);详细设计中首先对概要设计中涉及的操作对象定义相应的数据类型,并在具体的存储结构下描述关键问题解决过程;同时要综合考虑程序功能,按照以数据结构为中心的原则划分模块,说明各模块的功能,画出模块之间的调用关系图,模块的划分和调用应使得程序结构清晰、合理、简单和易于调试。详细设汁的结果是对数据结构和基本操作的规格说明作出进一步的求精,定义相应的存储结构并写出各过程和函数的伪码算法。在求精的过程中,应尽量避免陷入语言细节,不必过早表述辅助数据结构和局部变量。 3.编码实现和静态检查 编码是把详细设计的结果进一步求精为程序设计语言程序。如何编写程序才能较快地完成调试是特别要注意的问题。程序的每行不要超过60个字符。每个过程(函数)体一般不要超过40行,最长不得超过60行,否则应该分割成较小的过程(函数)。要控制if语句连续嵌套的深度,分支过多时应考虑使用switch语句。对函数功能和重要变量进行注释。一定要按格式书写程序,分清每条语句的层次,对齐括号,这样便于发现语法错误。 在上机之前,应该用笔在纸上写出详细的程序编码,并做认真地静态检查。多数初学者在编好程序后处于以下两种状态之一:一种是对自己的“精心作品”的正确性确信不疑;另一种是认为上机前的任务已经完成,纠查错误是上机的工作。这两种态度是极为有害的。对一般的程序设计者而言,当编写的程序长度超过50行时,通常会含有语法错误或逻辑错误。上机动态调试决不能代替静态检查,否则调试效率将是极低的。静态检查主要有两种方法,一是用一组测试数据手工执行程序(通常应先检查单个模块);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注解。 4.上机准备和上机调试 上机准备包括以下几个方面: (1)熟悉C语言用户手册或程序设计指导书。 (2)注意Turbo C、VC与标准C语言之间的细微差别。 (3)熟悉机器的操作系统和语言集成环境的用户手册,尤其是最常用的命令操作,以便顺利进行上机的基本活动。 (4)掌握调试工具,考虑调试方案,设计测试数据并手工得出正确结果。“磨刀不误砍柴工”。学生应该熟练运用高级语言的单步调试和程序调试器DEBUG调试程序。 《数据结构》实验报告 实验序号:1 实验项目名称:概论 附源程序清单: 1. #include 2. #include 实验1: 顺序表的操作实验 一、实验名称和性质 二、实验目的 1.掌握线性表的顺序存储结构的表示和实现方法。 2.掌握顺序表基本操作的算法实现。 3.了解顺序表的应用。 三、实验内容 1.建立顺序表。 2.在顺序表上实现插入、删除和查找操作(验证性内容)。 3.删除有序顺序表中的重复元素(设计性内容)。 4.完成一个简单学生成绩管理系统的设计(应用性设计内容)。 四、实验的软硬件环境要求 硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块: Windows环境下的VC++6.0 五、知识准备 前期要求熟练掌握了C语言的编程规则、方法和顺序表的基本操作算法。 六、验证性实验 1.实验要求 编程实现如下功能: (1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。 (2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。 (3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。 (4)在顺序表中查找值为e的数据元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。 2. 实验相关原理: 线性表的顺序存储结构称为顺序表,顺序表的存储结构描述为: #define MAXLEN 30 /*线性表的最大长度*/ typedefstruct { Elemtypeelem[MAXLEN]; /*顺序表中存放元素的数组,其中elemtype为抽象数据类型,在程序 具体实现时可以用任意类型代替*/ int length; /*顺序表的长度,即元素个数*/ }Sqlist; /*顺序表的类型*/ 【核心算法提示】 1.顺序表插入操作的基本步骤:要在顺序表中的第i个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,假设线性表的表长为n,则i的合法值范围:1≤i≤n+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的表长增加1。 2.顺序表删除操作的基本步骤:要删除顺序表中的第i个数据元素,首先仍然要判断i 的合法性,i 的合法范围是1≤i≤n,若是合法位置,则将第i个数据元素之后的所有数据元素都前移一个位置,最后将线性表的表长减1。 3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值为e的数据元素,则可以采用顺序查找的方法,从顺序表中第1个数据元素开始依次将数据元素值与给定值e进行比较,若相等则查找成功,函数返回该数据元素在顺序表中的位置,若顺序表中所有元素都与给定值e不相片,则查找失败,函数返回0值。 【核心算法描述】 status Sqlist_insert(Sqlist&L,inti,Elemtypex) /*在顺序表L中第i个元素前插入新元素x*/ {if (i<1||i>L.length+1) return ERROR; /*插入位置不正确则出错*/ if (L.length>=MAXLEN) return OVERFLOW; /*顺序表L中已放满元素,再做插入操作则溢出*/ for(j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j];/*将第i个元素及后续元素位置向后移一位*/ L.elem[i-1]=x; /*在第i个元素位置处插入新元素x*/ L.length++; /*顺序表L的长度加1*/ return OK; } status Sqlist_delete(Sqlist&L,inti,Elemtype&e) /*在顺序表L中删除第i个元素*/ {if (i<1||i>L.length)return ERROR; /*删除位置不正确则出错*/ for(j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j]; /*将第i+1个元素及后继元素位置向前移一位*/ L.length--; /*顺序表L的长度减1*/ return OK; } int Sqlist_search(SqlistL,Elemtype x) /* 在顺序表中查找值为x的元素,如果找到,则函数返回该元素在顺序表中的位置,否则返回0*/ 2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨 实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。 三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;i 实验报告 (2015 / 2016 学年第一学期) 课程名称数据结构 实验名称图的基本运算及飞机换乘次数最少问题 实验时间2015 年12 月 4 日 指导单位计算机科学与技术系 指导教师黄海平 学生姓名陈明阳班级学号Q14010119 学院(系) 贝尔英才专业信息科技强化班 实验报告 实验名称图的基本运算及飞机换乘次数最少问题指导教师黄海平 实验类型验证实验学时 4 实验时间12.4 一、实验目的和要求 飞机最少换乘次数问题。 (1)设有n个城市,编号为0~n-1,m条航线的起点和终点由用户输入提供。寻找一条换乘次数最少的线路方案。 (2)参考:可以使用有向图表示城市间的航线;只要两城市间有航班,则图中这两点间存在一条权值为1的边;可以使用Dijkstra算法实现。 二、实验环境(实验设备) VSUAL STUDIO2015 三、实验原理及内容 对象视图: 源代码: Graph.h #include 班级: 姓名: 学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入与删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表与链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号与成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include { char num[10]; // 学号 char name[20]; // 姓名 double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK; } Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到i位置的数据域,返回给 e { LinkList p; p=L->next; 图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template 数据结构实验代码南邮实验课实验十各种算法性能比较#include while(i>0) { last=0; for(j=0;j //快速排序 void QuickSort(T A[],int n) { QSort(A,0,n-1); } template 数据结构实验
数据结构实验报告格式
南邮数据结构上机实验二二叉树的基本操作及哈夫曼编码译码系统的实现
数据结构实验报告
数据结构实验报告全集
数据结构实验一 实验报告
数据结构实验报告-答案
数据结构实验
数据结构实验报告模板
数据结构实验1
数据结构实验1
《数据结构》实验1
数据结构实验报告及心得体会
南邮数据结构实验三
数据结构实验一 实验报告
数据结构实验报告图实验
南邮数据结构实验算法分析