数据结构 上机实验与解析

我希望的是可以直接从网络上下载...
或者网络上可以直接看也就可以了...
不过希望有习题跟解析

我学的数据结构是 清华大学 严蔚敏 第二版

不是c语言跟c++
实验要求是用delphi来编程...

太高深了,我是学Java的给你下了点希望能用上http://v.youku.com/v_show/id_co00XNzI3NjY1Ng==.html
这是youku上的视频不过得安Flash播放器才能看
线性结构的特点:
在数据元素的非空有限集中,
(1) 存在唯一的一个被称作“第一个”的数据元素。
(2) 存在唯一的一个被称作“最后一个”的数据元素。
(3) 除“第一个”之外,集合的每一个数据元素只有一个前驱。
(4) 除“最后一个”之外,集合的每一个数据元素只有一个后继。

2.1线性表的类型定义
线性表(Linear List)是最常用且最简单的一种数据结构。简言之,一个线性表是n个数据元素的有限序列。
一个数据元素可以有若干个数据项(Item)组成。在这种情况下,常把数据元素称为记录(Record),含有大量记录的线性表又称为文件(File)。
同一个线性表中的数据元素必定具有相同特性,即属同一数据对象,相邻数据元素之间存在着序偶关系。若将线性表记为:(a1, …, ai-1, ai, ai+1, …, an)则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai又且仅有一个直接后继,当i=2,3,…,n时,ai又且仅有一个直接前驱。
线性表中元素的个数n(n≥0)定义为线性表的长度,n=0时称为空表。在非空表中的每个数据元素都有一个确定的位置,如a1是第一个数据元素,an是最后一个数据元素,ai是第i个数据元素,称i为数据元素ai在线性表中的位序。

2.2线性表的顺序表示和实现
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。
假设线性表的每个元素需要占用L个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:LOC(ai+1)= LOC(ai)+L,一般来说,线性表的第i个数据元素ai的存储位置为:LOC(ai)= LOC(a1)+(i-1)*L,其中LOC(a1)是线性表的第一个数据元素a1的存储位置,通常称作线性表的起始位置或基地址。
线性表的这种机内表示称作线性表的顺序存储结构或顺序映像(Sequential Mapping),反之,称这种存储结构的线性表为顺序表。
线性表的顺序存储结构是一种随机存取的存储结构。

//--------------线性表的动态分配顺序存储结构--------------//
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
Typedef struct
{
ElemType *elem; //存储空间基址
Int length; //当前长度
Int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;

当在顺序存储结构的线性表中某个位置上插入或删除一个数据元素时,其时间主要耗费在移动元素上(换句话说,移动元素的操作为预估算法时间复杂度的基本操作),而移动元素的个数取决于插入或删除元素的位置。
在顺序存储结构的线性表中插入或删除一个数据元素,平均约移动表中一半的元素。

2.3线性表的链式表示和实现

2.3.1线性链表
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。指针域中存储的信息称作指针或者链。N个结点(ai(1≤i≤n)的存储映像)链结成一个链表,即为线性表(a1, a2, …, an)的链式存储结构。又由于此链表的每个结点中只包含一个指针域,故又称为线性链表或者单链表。
这个链表的存取必须从头指针开始进行,头指针指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。线性链表中最后一个结点的指针为“空”(NULL)。
用线性链表表示线性表时,数据元素之间的逻辑关系是由结点中的指针指示的。换句话说,指针为数据元素之间的逻辑关系得映像,则逻辑上相邻的两个数据元素其存储的物理位置不要求紧邻,由此,这种存储结构为非顺序映像或者链式映像。

//--------------线性表的单链表存储结构--------------//
Typedef struct
{
ElemType data;
Struct LNode *next;
}LNode, *LinkList;

有时候,我们在单链表的第一个结点之前附设一个结点,称之为头结点。头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。
单链表是非随机存取的存储结构。单链表和顺序存储结构不同,它是一种动态结构。

//--------------线性表的静态单链表存储结构--------------//
#define MAXSIZE 1000 //链表的最大长度
Typedef struct
{
ElemType data;
Int cur;
}component, SLinkList[MAXSIZE];

这种描述方法便于在不设“指针”类型的高级程序设计语言中使用链表结构。在如上述的链表中,数据的一个分量表示一个结点,同时用游标(指示器cur)代替指针指示结点在数组中的相对位置。为了和指针型描述的线性链表相区别,我们给这种用数组描述的链表起名静态链表。

2.3.2循环链表
循环链表(Circular Linked List)是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,这个链表形成一个环。
循环链表的操作和线性表基本一致,差别仅在于算法的循环条件不是p或者p->next是否为空,而是它们是否等于头指针。但有的时候,若在循环链表中设立尾指针而不设头指针,可使某些操作简化。

2.3.3双向链表
在单链表中,NextElem的执行时间为O(1),而PriorElem的执行时间为O(n)。为克服单链表这种单向性的缺点,可利用双向链表(Double Linked List)。
在双向链表的结点中有两个指针域,其一指向直接后继,另一个指向直接前驱。

//--------------线性表的双向链表存储结构--------------//
Typedef struct
{
ElemType data;
Struct *prior;
Struct *next;
}DuLNode, *DuLinkList;

//--------------一个带头结点的线性表类型定义--------------//
//--------------注意:不同的C++标准,其链表结构的定义是不同的--------------//
Typedef struct LNode
{
ElemType data;
Struct LNode *next;
}*Link, *Position;
Typedef struct
{
Link head,tail;
Int len;
}LinkList;

2.4一元多项式的表达和相加
一般情况下的一元n次多项式可写成:
Pn(x) =
其中,pi是指数为ei的项的非零系数,且满足
0≤ e1 < e2 < … < em = n
若用一个长度为m且每个元素有两个数据项(系数项和指数项)的线性表
((p1, e1),(p2, e2),…,(pm, em))
便可以唯一的确定多项式Pn(x)。
若只对多项式进行“求值”等不改变多项式的系数和指数的运算,则采用类似于顺序表的顺序存储结构即可,否则应采用链式存储表示。
有序链表的基本操作定义与线性链表有两处不同:
第一, LocateElem的职能不同
第二, 增加了按有序关系进行插入的操作OrderInsert
Status LocateElem(LinkList L, ElemType e, Position &q, int (*compare)(ElemType, ElemType))
//若有序链表L中存在与e满足判定函数compare()取值为0的元素,则q指示L中第一个
//值为e的结点的位置,并返回TRUE;否则q指示第一个与e满足判定函数compare()取值>0的元素的前驱的位置,并返回FALSE
Status OrderInsert(LinkList &L, ElemType e, int (*compare)(ElemType, ElemType))
//按有序判定函数compare()的约定,将值为e的结点插入到有序链表L的适当位置上

//--------------多项式抽象数据类型的存储结构定义--------------//
typedef struct
{//项的表示,多项式的项作为LinkList的数据元素
Float coef; //系数
Int expn; //指数
}term, ElemType;//两个类型名:term用于本ADT,ElemType为LinkList的数据对象名
typedef LinkList polynomial; //用带头结点的有序链表表示多项式

void AddPolyn(polynomial &Pa, polynomial &Pb)
{//多项式加法:Pa = Pa + Pb,利用两个多项式的结点构成“和多项式”。
ha = GetHead(Pa); hb = GetHead(Pb); //ha和hb分别指向Pa和Pb的头结点
qa = NextPos(ha); qb = NextPos(hb); //qa和qb分别指向Pa和Pb中当前结点
while(!Empty(Pa)&&!Empty(Pb)) //Pa和Pb均非空
{
a = GetCurElem(qa); b = GetCurElem(qb); //a和b为两表中当前元素比较
swith(*cmp(a, b))
{
case -1: //多项式PA中当前结点的指数值小
ha = qa; qa = NextPos(Pa, qa); break;
case 0: //两者的指数值相等
sum = a.coef + b.coef;
if (sum != 0.0) //修改多项式PA中当前结点的系数值
{
SetCurElem(qa, sum); ha = qa;
}
else //删除多项式PA中当前结点
{
DelFirst(ha, qa); FreeNode(qa);
}
DelFirst(hb, qb); FreeNode(qb); qb = NextPos(Pb, hb);
qa = NextPos(Pa, ha); break;
case 1: //多项式PB中当前结点的指数最小
DelFirst(hb, qb); InsFirst(ha, qb);
qb = NextPos(Pb, hb); break;
}//switch
}//while
if (!Empty(Pb)) Append(Pa, qa); //连接Pb中剩余结点
FreeNode(hb); //释放Pb的头结点
}//AddPolyn
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-09-27
去网易学院

上面有视频教程

数据结构上机实验(编程)(单链表的基本操作)
1.熟悉线性表的基本运算在顺序存储结构上的实现;2.以线性表的基本操作(建表、插入、删除等)的实现为重点;3.通过本次实验帮助学生加深对C\/c++ 语言的使用(特别是函数参数、数据类型的定义和数组的使用)。不需要太难的结构,最好带上解释..需要调用函数的那种...谢谢啦 展开  我来答 2个回答 #热议# OPPO...

求数据结构教程(第5版)上机实验题参考答案李春葆
第二题:第三题:第四题:第五题:第六题:

数据结构学什么
数据结构课程设计的实践教学(即上机实验)题分为基础性、综合性和设计性三大类。基础性(即知识验证性)类实验题主要用于巩固课堂知识,实现小程序的简单应用。综合性和设计性实验题属于大作业,讲述了完成设计性实验题则要实现从建模到解模的全过程,即实验者要独立完成:问题的抽象、数据的提取、数据的...

谁能介绍一下计算机科学与技术专业?
对数据地有效组织是程序的主要任务之一,算法的主要操作对象亦为数据结构。从简单的数组和链表,到各色高级的抽象数据类型(ADT),数据结构在程序设计中的地位不言而喻。学好数据结构,是进一步学习专业课的基本前提。可以这么说,一个不懂得如何组织和操控数据的学生,根本就不配当我们计算机科学专业的学生,更不配当一名程序...

数据结构上机实验求答案
设计思路,根据题目要求,由于只是一个简单的顺序表,所以使用数组是最简便的操作。将数组封装到一个类当中,在类中封装插入、删除等相关操作。3~最后调试:这个帮不了你,不知道你自己会遇到什么问题。代码:这种代码一般情况下,一遍就能完成,基本上不需要调试,只需要修改语法错误即可。可以私信 ...

算法与数据结构习题精解和实验指导目录
第1章,深入理解算法与程序,首先介绍了基本知识点,通过精心设计的习题帮助你巩固理解。接着,我们提供详细的解答,确保你能够掌握每一个概念。第2章,重点关注常用数据结构,从基础知识开始,一步步讲解。习题解答部分包括了各种典型问题的解答,帮助你熟练运用。此外,还特别提供了上机实验指导,让你在...

数据结构与算法的内容简介
第1章主要介绍数据结构和算法分析的基本概念,第2~6章主要介绍典型的线性结构、树型结构和图型结构,第7~8章分别介绍查找和排序操作。另外,每章后面附有习题和上机实验内容,上机实验提供了完整的、可运行的程序上机实验供读者参考,以加深读者对所学知识的理解和应用。本书既可作为高等院校计算机及...

C 语言程序设计上机实验指导内容简介
C 语言程序设计上机实验指导是一本详尽的教材,分为十个部分,旨在深入讲解C语言的基础和应用。首章阐述C语言的概论,帮助读者建立基本认知。随后的章节详细探讨数据类型、运算符与表达式的运用,通过实例展示如何设计程序的顺序结构、选择结构和循环结构。在学习过程中,读者将接触并理解数组和指针的概念,...

怎样学好C语言
1、要把基础的语法掌握,让后多练习编程,上机实验,先易后难,循序渐进。2、练习多了,收获的成就感就越强,然后会越来越有兴趣,这样你才有信心坚持下去。3、同时要学习数据结构,这对于算法分析非常重要。4.、要培养勤学的习惯,多看看相关论坛,网站,杂志等等。个人一点小小的建议,希望能对你有...

数据结构李春葆第六版有几本书
三本。数据结构教程第六版【教材+学习指导+上机实验指导】3本。数据结构(Datastructures)是由若干数据成分按照一定方式构成的复合数据以及作用于其上的函数或运算。

相似回答