ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:31.41KB ,
资源ID:20775108      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20775108.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验指导与课程设计教程陈建新 李志敏上Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验指导与课程设计教程陈建新 李志敏上Word文档下载推荐.docx

1、 /*线性表定义*/ 3、功能(函数)设计顺序表的基本操作:InitList(SqList &L) /*初始化操作,将线性表L置空*/CreatSqlist(SqList &L,int n) /*建立一个顺序存储的线性表*/Output(SqList L) /*输出顺序表L*/IsEmpty(SqList L) /*判断表是否为空。如果L是空表,返回,否则返回*/GetElem(SqList L,int i) /*取表中第i元素。*/LocateElem(SqList L, ElemType x)/*定位函数。返回L中第个与x相等的数据元素的位置(从算起)。否则返回值为。Insert(SqLi

2、st &L, ElemType x,int i)/*在线性表L中第i(iL.length)个数据元素之前插入一个数据元素x*/Dlete(SqList &L,int i)/*删除线性表L中第i(IL.length)个数据元素*/Clear(SqList &L) /* 清空线性表L*/MergeList(SqList la, SqList lb, SqList &lc)/*合并表有序表la和lb到表lc中,使得lc依然有序*/4、界面设计指导用户按照正确的格式输入数据。5、编码实现实验二 链式存储实验理解链表的逻辑结构和存储结构,熟练掌握链表的相关操作。 链表是用一组任意的存储单元来依次存储线性

3、表中的各个数据元素,这些存储单元可以是连续的,也可以是不连续的。用链接存储结构表示线性表的一个元素时至少要有两部分信息:一是这个数据元素的值,二是这个数据元素的直接后继的存储地址。这两部分信息一起组成了链表的一个结点。数据域用来存放数据元素的值;指针域(又称链域)用来存放该数据元素的直接后继结点的地址。链表正是通过每个结点的指针域将线性表的n个结点按其逻辑次序链接成为一个整体。通常用箭头表示链域中的指针,于是单链表就可以直观地画成用箭头链接起来的结点序列,单链表中每个结点的存储地址存放在其直接前驱的指针域中,因此访问单链表的每一个结点必须从表头指针开始进行。对单链表的操作主要有:建立单链表、查

4、找(按序号查找、按值查找)、插入一个结点、删除一个结点、求表长等。单链表的结点结构如下:typedef struct node /*单链表结点结构*/ElemType data; /*ElemType可以是任何相应的数据类型如int,char等*/struct node *next; LinkList;链表的基本操作:InitList1(LinkList *&head)/初始化不带头结点的链表头指针AddHead1(LinkList *&head, ElemType x)/使用表首添加法,向头指针为head的链表中插入一个结点,其值为xInitList(LinkList *&/初始化带头结点的

5、链表头指针AddHead(LinkList *head, ElemType x)/使用表尾添加法,向头指针为head的链表中插入一个结点,其值为xCreatList(LinkList *head,int n)/生成含有n个结点的单链表output(LinkList *head)/输出单链表GetNode(LinkList *head, int i)/在带头结点的单链表中查找第i个结点,找到返回该结点指针,否则返回NULLLocateNode(LinkList *head, ElemType x)/在带头结点的单链表中查找值为x的结点,找到返回结点指针,否则返回NULLInsertNode(Li

6、nkList *head, int i, ElemType x)/在带头结点的单链表中第i个结点位置上插入值为x的结点DeleteNode1(LinkList *head, ElemType x)/在带头结点的单链表中删除值为x的结点DeleteNode(LinkList *head, int i)/在带头结点的单链表中删除第i个结点Length(LinkList *head)/在带头结点的单链表中求表的长度InsertOrder(LinkList *head,int x)/在有序单链表L中插入值为x的结点,插入后仍然有序union1(LinkList *head,LinkList *B,Li

7、nkList *&C)/A和B是两个带头结点的递增有序的单链表,本算法将两表合并成,一个带头结点的递增有序单链表C,利用原表空间。(见源代码)6、运行测试建立链表,输入相关数据,测试各功能函数。实验三 顺序栈实验理解顺序栈的逻辑结构和存储结构,熟练掌握顺序栈的相关操作。栈是限制为仅仅能在表的一端插入和删除的线性表,是生活中某些过程的抽象。插入删除的的一端称为栈顶(Top)、插入操作通常称为进栈或者入栈(Push)。不能插入删除的一端称为栈底(Bottom)、删除操作通常称为出栈或者退栈(Pop)。依据栈的定义,栈顶的元素总是最后进栈的,并且是最先出栈的;栈底元素正好相反,最先进栈,最后出栈,因

8、此,栈有着后进先出(Last In First Out LIFO)的特性,也称为后进先出表。使用顺序表来表示一个栈。顺序栈的数据类型:#define MaxSize 100 /*最大元素个数*/typedef struct /*顺序栈的类型定义*/ ElemType dataMaxSize; /*栈元素存储空间*/ int top; /*栈顶指针*/ SeqStack;顺序栈基本操作:StackInitial(SeqStack *pS) /创建一个由指针pS所指向的空顺序栈IsEmpty(SeqStack *pS) /顺序栈为空时返回,否则返回IsFull(SeqStack *pS) /栈为满

9、时返回,否则返回Push(SeqStack *pS, ElemType e) /若栈不满,则元素e进栈Pop(SeqStack *pS) /若栈不为空,则删除栈顶元素,并返回它的值GetTop(SeqStack *pS) /若栈不为空,则返回栈顶元素的值MakeEmpty(SeqStack *pS) /将由指针pS所指向的栈变为空栈运行程序,输入顺序表的数据,建立顺序栈,测试各功能函数。实验四 链式栈实验理解链式栈的逻辑结构和存储结构,熟练掌握链式栈的相关操作。问题描述同前面的顺序栈,这里是使用一个链表来表示一个栈。使用带表头结点的链表,这样所有对栈的初始化和判断条件都需要作相应的更改。链式栈

10、的数据类型:typedef struct stackNode /*链栈结点的类型定义*/ ElemType data; /*数据域*/ struct stackNode *next; /*指针域*/ StackNode;typedef struct /*链栈的类型定义*/ StackNode *top; /*栈顶指针*/ LinkStack;链式栈基本操作:功能函数同前面的顺序栈。输入相关数据,建立链表,以链表作为栈,测试各功能函数。实验五 顺序循环队列实验理解顺序队列的逻辑结构和存储结构,熟练掌握顺序队列的相关操作。队列是限制为仅仅能在表的一端插入和另一端删除的线性表,是生活中排队的抽象。插

11、入的一端称为队尾(Rear)、插入操作通称进队(Enqueue);删除的一端称为队头(Front)、删除操作通称出队(Dequeue)。队列是有着先进先出(First In First Out FIFO)的特性,也称为先进先出表。这里是采用顺序存储结构来实现的队列为顺序队列。队列的顺序存储结构也是利用一维数组来依次存放从队尾到队头的元素。设置front来指示队列当前队头元素的位置、rear来指示队列当前队尾元素的位置。顺序队列随着插入和删除操作的进行,队头和队尾标志顺序向后移动,当元素被插入到数组中的最高位置上之后,队列的空间就用完了,数组的低端还有许多空闲空间,但已经无法插入,这种现象通称为

12、顺序队列的“假溢出”。 为解决顺序队列的“假溢出”,可以将存储队列的数组看作是首尾相连的循环结构(循环队列)。循环队列判满和空的条件:front永远指向队头元素的前一个位置,队列中有一个元素空间不可用,队空判断条件:rear = front,队满判断条件:(rear + 1) % MaxSize = front。顺序循环队列的数据类型:#define MaxSize 100 /*最大元素个数*/typedef struct /*顺序循环队列的类型定义*/ /*队列元素存储空间*/ int front; /*队头指针*/ int rear; /*队尾指针*/ CircSeqQueue;顺序循环队

13、列基本操作:QueueInitial(CircSeqQueue *pQ)/创建一个由指针pQ所指向的空顺序循环队列 IsEmpty(CircSeqQueue *pQ)/顺序循环队列为空时返回1,否则返回0 IsFull(CircSeqQueue *pQ)/循队列为满时返回1,否则返回0 EnQueue(CircSeqQueue *pQ, ElemType e)/若队列不满,则元素e进队 DeQueue(CircSeqQueue *pQ)/若循环队列不为空,则删除队头元素,并返回它的值 GetFront(CircSeqQueue *pQ)/若队列不为空,则返回队头元素的值 MakeEmpty(C

14、ircSeqQueue *pQ)/将由指针pQ所指向的队列变为空队输入数据,建立顺序循环队列,测试各功能函数。实验六 链式队列实验理解链式队列的逻辑结构和存储结构,熟练掌握链式队列的相关操作。队列的链式存储结构通常也是采用单链表表示,结点同样包括数据域和指针域。由于队列需要固定在链表的头部删除和尾部插入,所以将链表的表头作为队头时,删除极为方便,为了方便在链表尾部的插入,需要增加一个指针指向尾结点。为了简化链表的插入和删除操作,一般采用带表头结点的单链表来表示链式队列,所有初始化和判断条件需要作相应的更改。链式队列的数据类型:typedef struct queueNode /*链式队列结点的

15、类型定义*/ struct queueNode *next; QueueNode;typedef struct /*链式队列的类型定义*/ QueueNode *front; QueueNode *rear; LinkQueue;链式队列基本操作:各功能函数同顺序循环队列。输入数据,建立链表,测试各功能函数。实验七 串的基本运算掌握串的特点、连接、插入、删除、显示、查找、取子字符串、比较串的大小的操作,顺序定长存储的方式,以及模式匹配的基本思想及其想法。串是一种特殊的线性表,串中所有数据元素都按某种次序排列在一个序列中。串是由零个或多个字符构成的有限序列。线性表由两种存储结构:顺序存储和链式存

16、储,串是一种特殊的线性表,因此也有两种基本存储结构:顺序串和链式串。采用顺序存储时,串是用一块地址连续的存储单元来存储串值。串链式存储时,链表中每个结点可以存放一个字符,也可以存放多个字符。串的模式匹配算法可以采用一种非常简单的思想去实现,即用模式串p中的meige字符与主串s中的字符一一比较,如果对应位置的字符相等,则进行两个串下一个位置字符的比较;如果不相等,则匹配成功,返回该趟比较的起始位置即为匹配的位置;否则匹配不成功。2、数据结构设计 串的数据类型:#include#define STRINGMAX 100 char vecSTRINGMAX int len;str;串的基本操作:v

17、oid ConcatStr(str *r1,str *r2)void SubStr(str *r,int i,int j)void DelStr(str *r,int i,int j) str *InsStr(str *r,str *r1,int i)int InDexStr(str *r,str *r1)int LenStr(str *r)str *CreateStr(ste *r)int EqualStr(str *r1,str *r2)5、编码实现(见源代码)输入数据,建立一个字符串,测试各功能函数。实验八 稀疏矩阵和广义表子系统掌握稀疏矩阵三元组表的存储、创建、显示、转置和查找等的方法

18、。掌握广义表的存储、新建、显示和查找等的方法。掌握稀疏矩阵三元组表和广义表的算法分析方法。一个阶数较大的矩阵中的非零元素个数s相当于矩阵元素的总个数t十分小时,称该矩阵为稀疏矩阵。稀疏矩阵的压缩方法是只存储非零元素。由于稀疏矩阵中非零元素的分布没有任何规律,所以在存储非零元素时还必须同时存储该非零元素所对应的行下标和列下标。若把系数矩阵的三元组线性表按顺序存储结构存储,则称为系数矩阵的三元组顺序表。广义表是线性表的推广。在广义表中,要求各原子具有相同的类型,但允许各子表具有不同的结构。广义表通常用链式存储结构进行存储,链表中的每个结点对应广义表中的一个元素。对于原子元素,sublist和lin

19、k都是指针域,前者是子表,后者指向下一个元素。稀疏矩阵三元组表的数据类型:iomanip.hstdlib.hstring.h#define SMAX 100 /三元组非零元素的最大个数广义表的数据类型:struct linknode /定义广义表int tag; /区分原子项或子表的标志位linknode *link; /存放下一个元素的地址union data_sublist char data; /存放原子值linknode *sublist; /存放子表的指针 node;稀疏矩阵三元组表的基本操作:struct SPNode / 定义三元组int I,j,v; /三元组非零元素的行、列和

20、值;struct sparmatrix /定义稀疏矩阵int rows,cols,terms; /稀疏矩阵行、列和非零元素的个数SPNode dataSMAX; /三元组表sparmatrix CreateSparmatrix() /创建稀疏矩阵sparmatrix Trans(sparmatrix A /转置稀疏矩阵void ShowSparmatrix(sparmatrix A) /显示稀疏矩阵void SearchSparmatrix(sparmatrix A,int s) /查找稀疏矩阵中非零元素void sparmatrix() /稀疏矩阵的三元组存储广义表的基本操作:void Di

21、sastr(char s,char hstr)linknode *CreatGL(char s) /创建广义表void Showvl(linknode *gnode /显示广义表int Search(linknode *gnode,char x) /广义表中的元素void vastlist() /广义表输入数据,分别建立稀疏矩阵三元组表和广义表,并测试各功能函实验九 二叉树实验理解二叉树的逻辑结构和存储结构,熟练掌握二叉树的相关操作。二叉树(Binary Tree)是n(n0)个结点的有限集合。它或为空树(n=0),或为非空树;对于非空树有:(1)有一个特定的称之为根的结点;(2)根结点以外的

22、其余结点分别由两棵互不相交的称之为左子树和右子树的二叉树组成。这个递归定义表明二叉树或为空,或是由一个根结点加上两棵分别称为左子树和右子树的互不相交的二叉树组成的。由于左、右子树也是二叉树,则由二叉树的定义,它们也可以为空。对二叉树所进行的操作有:建立一棵二叉树;访问(遍历)二叉树;求二叉树的深度(高度)等相关操作。二叉树一般采用链表存储结构,即用一个链表来存储一棵二叉树,二叉树中每个结点用链表中的一个链结点来存储。常见的有二叉链表。二叉链表的每个结点都有一个数据域和两个指针域,一个指针指向左孩子,另一个指针指向右孩子。描述为:typedef struct Node2 ElemType dat

23、a; /*数据域*/ struct Node2 *lchild; /*左指针域*/struct Node2 *rchild; /*右指针域*/ BTNode;二叉树的基本操作:createbitree(BTNode *&T) /构建一棵二叉树DispLeaf(BTNode *b) /输出一棵给定二叉树的所有叶子结点。InsertLeftNode(BTNode *p, char x) /左结点插入InsertRightNode(BTNode * p,char x) /右结点插入DeleteLeftTree(BTNode *p) /删除左子树DeleteRightTree(BTNode *p) /

24、删除右子树SearchNode(BTNode *b,char x) / 查找结点LchildNode(BTNode *p) /查找左孩子结点RchildNode(BTNode *p) /查找右孩子结点BiTreeDepth(BTNode *b) / 求二叉树的高度DispBiTree(BTNode *b) /输出二叉树PreOrder(BTNode * p) /按先序访问操作 InOrder(BTNode * p) /按中序访问操作 PostOrder(BTNode * p) /按后序访问操作 InTongji(BTNode *t,int &m,int &n) / 中序遍历方法统计叶结点的个数

25、 CountLeaf(BTNode *T) / 返回指针T所指二叉树中所有叶子结点个数Count(BTNode *T) / 返回指针T 所指二叉树中所有结点个数输入二叉树中各结点的数据数据,测试各功能函数。实验十 图的存储与遍历掌握图邻接矩阵的存储方法、图深度优先遍历的基本思想和图广度优先遍历的基本思想。1.问题描述图是由若干个顶点和若干条边构成的结构,每个顶点具有任意多个前驱和后继。顶点是一些具体对象的抽象,而边是对象间关系的抽象。图是一种结构复杂的数据结构,其信息包括两部分:图中数据元素即顶点的信息,元素间的关系(顶点之间的关系)边或者弧的信息。图的常用存储结构:邻接矩阵存储、邻接表存储、十字链表存储以及邻接多重表存储。用一维数组存储图中顶点的信息,用二维数组存储图中边或弧的信息,该二维数组称为邻接矩

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1