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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(NYIST数据结构实验指导书样本.doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

NYIST数据结构实验指导书样本.doc

1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 南阳理工学院 数据结构上机实验指导书 ( ) 软件学院·软件工程教研室 .3 目 录 实验1 线性表应用 2 实验2 栈和队列的应用 2 实验3 线性表应用 3 实验4 图论及其应用 3 实验5 查找 4 实验6 排序 4 实验1 线性表应用 一、 实验目的 1. 了解和掌握线性表顺序存储和链式存储在计算机中的表示, 基本操做在计算机中的实现。 2. 能够利用线性表结构对实际问题进行分析建模, 利用计

2、算机求解。 3. 能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。 二、 实验内容及步骤 1. 利用程序设计语言分别实现顺序表和链表的抽象数据类型。 2. 掌握程序分文件( 头文件和实现文件) 书写的方式。 3. 分别用顺序表和链表实现课本算法2.2: 合并两个非递减有序序列, 并对其时间性能做出分析。P21 #include"c1.h" typedef int ElemType; #include"c2-1.h" #include"bo2-1.c" #include"func2-3.c" /* 包括equal()、 c

3、omp()、 print()、 print2()和print1()函数 */ void MergeList(SqList La,SqList Lb,SqList *Lc) /* 算法2.2 */ { /* 已知线性表La和Lb中的数据元素按值非递减排列。 */ /* 归并La和Lb得到新的线性表Lc, Lc的数据元素也按值非递减排列 */ int i=1,j=1,k=0; int La_len,Lb_len; ElemType ai,bj; InitList(Lc); /* 创立空表Lc */ La_len=ListLength(La);

4、 Lb_len=ListLength(Lb); while(i<=La_len&&j<=Lb_len) /* 表La和表Lb均非空 */ { GetElem(La,i,&ai); GetElem(Lb,j,&bj); if(ai<=bj) { ListInsert(Lc,++k,ai); ++i; } else { ListInsert(Lc,++k,bj); ++j; } } /* 以下两个while循

5、环只会有一个被执行 */ while(i<=La_len) /* 表La非空且表Lb空 */ { GetElem(La,i++,&ai); ListInsert(Lc,++k,ai); } while(j<=Lb_len) /* 表Lb非空且表La空 */ { GetElem(Lb,j++,&bj); ListInsert(Lc,++k,bj); } } void main() { SqList La,Lb,Lc; int j,a[4]={3,5,8,11},b[7]

6、{2,6,8,9,11,15,20}; InitList(&La); /* 创立空表La */ for(j=1;j<=4;j++) /* 在表La中插入4个元素 */ ListInsert(&La,j,a[j-1]); printf("La= "); /* 输出表La的内容 */ ListTraverse(La,print1); InitList(&Lb); /* 创立空表Lb */ for(j=1;j<=7;j++) /* 在表Lb中插入7个元素 */ ListInsert(&Lb,j,b[j-1]); pri

7、ntf("Lb= "); /* 输出表Lb的内容 */ ListTraverse(Lb,print1); MergeList(La,Lb,&Lc); printf("Lc= "); /* 输出表Lc的内容 */ ListTraverse(Lc,print1); } 实验2 栈和队列的应用 一、 实验目的 1. 掌握栈和队列这两种抽象数据类型的特点, 并能在相应的应用问题中正确选用它们。 2. 熟练掌握栈类型的两种实现方法。 3. 熟练掌握循环队列和链队列的基本操作实现算法。 二、 实验内容及步骤 1. 用程序设计语言实现栈和队列的抽象数据类

8、型。 2. 在第一题的基础上完成以下选择: 选择一: 1) 设计并实现括号匹配算法。 2) 用队列实现在屏幕上打印杨辉三角。 选择二: 分别用栈和队列实现迷宫问题求解。 选择三: 分别用栈和队列实现一个列车调度系统。 1.import java.util.Scanner; public class 括号配对 { public static void main(String args[]) { int top=0;//堆指针 boolean end=true;//不匹配时只输出一次 char stack[]=new char

9、[100];//存括号 String s; System.out.println("请输入表示式: "); Scanner scanner=new Scanner(System.in); s=scanner.next(); //表示式 char biao[]=s.toCharArray();//将字符串转化成字符数组 System.out.println("表示式: "+s); for(int i=0;i

10、]=='(')//如果是(则入栈 { stack[top]='('; top++; } else if(biao[i]==')')//如果是)则出栈 { if(!(top==0)) top--; else { System.out.println("括号不匹配"); end=false; } } }//除循环两种可能 if(top==0&&end) System.out.println("括号匹配");//出

11、循环stack空 else if(top!=0&&end) System.out.println("括号不匹配");//出循环时stack不空 } } 2. #include #define N 11 void main() { int i,j,a[N][N]; for(i=1;i

12、a[i-1][j]; for(i=1;i

13、 中序、 后序遍历算法并验证。 3. 用非递归算法实现二叉树的中序遍历。 一、 二叉树的抽象数据类型:   ADT BinaryTree{   //数据对象D: D是具有相同特性的数据元素的集合。   //数据关系R:    //  若D=Φ, 则R=Φ, 称BinaryTree为空二叉树;    //  若D≠Φ, 则R={H}, H是如下二元关系;    //    ( 1) 在D中存在惟一的称为根的数据元素root, 它在关系H下无前驱;    //    ( 2) 若D-{root}≠Φ, 则存在D-{root}={D1,Dr}, 且D1∩Dr =

14、Φ;    //    ( 3) 若D1≠Φ, 则D1中存在惟一的元素x1, ∈H, 且存在D1上的关系H1 ⊆H; 若Dr≠Φ, 则Dr中存在惟一的元素xr, ∈H, 且存在上的关系Hr ⊆H; H={,,H1,Hr};    //    ( 4) (D1,{H1})是一棵符合本定义的二叉树, 称为根的左子树; (Dr,{Hr})是一棵符合本定义的二叉树, 称为根的右子树。     //基本操作:      InitBiTree( &T )       //操作结果: 构造空二叉树T。    D

15、estroyBiTree( &T )     //  初始条件: 二叉树T已存在。     //  操作结果: 销毁二叉树T。     CreateBiTree( &T, definition )     //  初始条件: definition给出二叉树T的定义。     //  操作结果: 按definiton构造二叉树T。     ClearBiTree( &T )     //  初始条件: 二叉树T存在。     //  操作结果: 将二叉树T清为空树。     BiTreeEmpty( T )     //  初始条件: 二叉树T存在。 

16、    //  操作结果: 若T为空二叉树, 则返回TRUE, 否则返回FALSE。     BiTreeDepth( T )     //  初始条件: 二叉树T存在。     //  操作结果: 返回T的深度。     Root( T )     //  初始条件: 二叉树T存在。     //  操作结果: 返回T的根。     Value( T, e )     //  初始条件: 二叉树T存在, e是T中某个结点。     //  操作结果: 返回e的值。     Assign( T, &e, value )     //  初始条件: 二

17、叉树T存在, e是T中某个结点。     //  操作结果: 结点e赋值为value。     Parent( T, e )     //  初始条件: 二叉树T存在, e是T中某个结点。     //  操作结果: 若e是T的非根结点, 则返回它的双亲, 否则返回”空”。     LeftChild( T, e )     //  初始条件: 二叉树T存在, e是T中某个结点。     //  操作结果: 返回e的左孩子。若e无左孩子, 则返回”空”。     RightChild( T, e )     //  初始条件: 二叉树T存在, e是T中某个结

18、点。     //  操作结果: 返回e的右孩子。若e无右孩子, 则返回”空”。     LeftSibling( T, e )     //  初始条件: 二叉树T存在, e是T中某个结点。     //  操作结果: 返回e的左兄弟。若e是T的左孩子或无左兄弟, 则返回”空”。     RightSibling( T, e )     //  初始条件: 二叉树T存在, e是T中某个结点。     //  操作结果: 返回e的右兄弟。若e是T的右孩子或无右兄弟, 则返回”空”。     InsertChild( T, p, LR, c )     // 

19、 初始条件: 二叉树T存在, p指向T中某个结点, LR为0或1, 非空二叉树c与T不相交且右子树为空。     //  操作结果: 根据LR为0或1, 插入c为T中p所指结点的左或右子树。p所指结点的原有左或右子树则成为c的右子树。     DeleteChild( T, p, LR )     //  初始条件: 二叉树T存在, p指向T中某个结点, LR为0或1。     //  操作结果: 根据LR为0或1, 删除T中p所指结点的左或右子树。     PreOrderTraverse( T, visit() )     //  初始条件: 二叉树T存在, Vis

20、it是对结点操作的应用函数。     //  操作结果: 先序遍历T, 对每个结点调用函数Visit一次且仅一次。一旦visit()失败, 则操作失败。     InOrderTraverse( T, visit() )     //  初始条件: 二叉树T存在, Visit是对结点操作的应用函数。     //  操作结果: 中序遍历T, 对每个结点调用函数Visit一次且仅一次。一旦visit()失败, 则操作失败。     PostOrderTraverse( T, visit() )     //  初始条件: 二叉树T存在, Visit是对结点操作的应用函数。

21、     //  操作结果: 后序遍历T, 对每个结点调用函数Visit一次且仅一次。一旦visit()失败, 则操作失败。     LevelOrderTraverse( T, visit() )     //  初始条件: 二叉树T存在, Visit是对结点操作的应用函数。     //  操作结果: 层次遍历T, 对每个结点调用函数Visit一次且仅一次。一旦visit()失败, 则操作失败。  }ADT BinaryTree   // //二、 基本操作的实现: //二叉树的结点结构体: typedef struct{      TElemTyp

22、e data;      struct BiTNode *lchild,*rchild;  }BiTNode,*BiTree; //二叉树的创立:  /*******************************************/  /*          按照前序遍历建立二叉树         */  /*******************************************/  Status CreateBiTree(BiTree &T)   {       //按先序次序输入二叉树中结点的值( 一个字符) ,       

23、//空格字符表示空树, 构造二叉链表表示的二叉树T。       char ch;       ch = getchar();//scanf("%c",&ch);       if(ch == ' ')           T = NULL;       else      {           if(!(T = (BiTNode*)malloc(sizeof(BiTNode))))               exit(OVERFLOW);           T->data = ch;                //生成根结点         

24、  CreateBiTree(T->lchild);     //构造左子树           CreateBiTree(T->rchild);     //构造右子树       }       return OK;   }  /************************************************************/  /*                  按层次顺序建立一棵二叉树 : 队列         */  /********************************************************

25、/  Status LevelCreateBiTree(BiTree &T)   {       BiTree p,s;//p指向父亲结点, s指向孩子结点       Queue BiNodeQueue;       char ch;       ch=getchar();       if(ch==' ')       {           return NULL;       }       T=(BiTNode*)malloc(sizeof(BiTNode)); //生成根结点       T->data=ch;      

26、 EnQueue(BiNodeQueue,T); //用队列实现层次遍历       while(!BiNodeQueue.Empty())       {           DeQueue(BiNodeQueue,p);           ch=getchar(); //为了简化操作, 分别对左右子结点进行赋值。           if(ch!=' ')//子树不空则进队列进行扩充。下同           {               s=(BiTNode*)malloc(sizeof(BiTNode));               s->data

27、ch;               p->lchild=s;               EnQueue(BiNodeQueue,s);           }           else          {               p->lchild=NULL;           }           ch=getchar();           if(ch!=' ')           {               s=(BiTNode*)malloc(sizeof(BiTNode));               s->

28、data=ch;               p->rchild=s;               EnQueue(BiNodeQueue,s);           }           else          {               p->rchild=NULL;           }       }       return OK;   } //2.二叉树的前序遍历:  /*******************************************/  /*          按照前序递归遍历二叉树    

29、     */  /*******************************************/  Status PreOrderTraverse(BiTree T)   {       if(T)       {           printf("%d",T->data);             PreOrderTraverse(T->lchild);             PreOrderTraverse(T->rchild);        }       return OK;   }  /****************

30、/  /*          按照前序非递归遍历二叉树: 栈   */  /*******************************************/    Status PreOrderTraverse(BiTree T)   {       stack S;       InitStack(S);        BiTree p=T;  //p指向当前访问的结点       while(p||!StackEmpty(S))       {           if(p)     

31、      {               printf("%c",p->data);               Push(S,p);               p=p->lchild;           }           else          {               Pop(S,p);               p=p->rchild;           }       }       return OK;   }  //3.二叉树的中序遍历:  /*****************************

32、/  /*          按照中序递归遍历二叉树         */  /*******************************************/  Status InOrderTraverse(BiTree T)   {       if(T)       {           InOrderTraverse(T->lchild);           printf("%d",T->data);            InOrderTraverse(T->rchild);       }     

33、  return OK;   }  /*******************************************/  /*          按照中序非递归遍历二叉树       */  /*******************************************/  Status InOrderTraverse(BiTree T)    {         stack S;       BiTree p;       InitStack(S);  Push(S, T);         while (!StackEmpty(S)

34、)        {           while (GetTop(S, p) && p)                Push(S, p->lchild);   // 向左走到尽头           Pop(S, p);                // 空指针退栈(叶子的左孩子)           if (!StackEmpty(S))            {   // 访问结点, 向右一步               Pop(S, p);                 printf("%d",p->data);   //当前根结点    

35、           Push(S, p->rchild);           }       }       return OK;   }  /*******************************************/  /*          按照中序非递归遍历二叉树       */  /*******************************************/  Status InOrderTraverse(BiTree T)    {         stack S;       InitStack(S); 

36、      BiTree p=T;         while (p || !StackEmpty(S))        {           if (p)            {                Push(S, p);                 p = p->lchild;            }  // 非空指针进栈, 继续左进           else           {  // 上层指针退栈, 访问其所指结点, 再向右进               Pop(S, p);                 pr

37、intf("%d",p->data);                p = p->rchild;           }       }       return OK;   }  //二叉树的后序遍历:  /*******************************************/  /*          按照后序递归遍历二叉树         */  /*******************************************/  Status PostOrderTraverse(BiTree T)   {   

38、    if(T)       {           PostOrderTraverse(T->lchild);           PostOrderTraverse(T->rchild);           printf("%d",T->data);       }       return OK;   }  /*******************************************/  /*        按照后序非递归遍历二叉树         */  /*************************************

39、/  Status PostOrderTraverse(BiTree T)    {        stack S;       InitStack(S);       BiTree p=T,pre=NULL;       while ( p || !StackEmpty(S))        {            if (p)            {                Push(S,p);                p = p->left;            }            else   

40、        {                Pop(S,p);                if (p->right!=NULL && pre!=p->right)               { //pre指向上次访问的右结点, 避免再次访问                   p=p->right;                }                else              {                    printf("%d",p->data);                   pre=p;      

41、             p=NULL;                }            }        }   }  /*******************************************/  /*        按照后序非递归遍历二叉树         */  /*******************************************/  Status PostOrderTraverse(BiTree T)    {       BiTree p = T,last = NULL;       stack S

42、       InitStack(S);       Push(S,p);       while(!StackEmpty(S))       {           Pop(S,p);           if(last == p->left || last == p->right)//左右子树已经访问完了, 该访问根节点了           {               printf("%d",p->data);               last = p;           }           else if(p->left ||

43、 p->right) //左右子树未访问, 当前节点入栈, 左右节点入栈           {               Push(S,p);               if(p->right)                   Push(S,p->right);               if(p->left)                   Push(S,p->left);           }           else //当前节点为叶节点, 访问           {               printf("%d",p-

44、>data);               last = p;           }       }   }      //二叉树的层次遍历:  /*******************************************/  /*           按照层次遍历二叉树            */  /*******************************************/  void LevelOrderTraverse(BiTree T)   {       Queue BiNodeQueue;      

45、 BiTree p=T;       EnQueue(BiNodeQueue,p);       while(!BiNodeQueue.Empty())       {           DeQueue(BiNodeQueue,p);           if(p)           {               printf("%c",p->data);               EnQueue(BiNodeQueue,p->lchild);               EnQueue(BiNodeQueue,p->rchild);      

46、     }       }   }  //交换左右子树:  /*******************************************/  /*      递归法将二叉树的左右子树互换       */  /*******************************************/  void Exchange(BiTree T)   {       BiTree temp;       if(T)       {           Exchange1(T->lchild);           Exchang

47、e1(T->rchild);           temp=T->lchild;           T->lchild=T->rchild;           T->rchild=temp;       }   }  /*******************************************/  /*      非递归法将二叉树的左右子树互换     */  /*******************************************/  void Exchange(BiTree T)   {       stack S

48、       InitStack(S);       BiTree p=T,temp;       while(p||!StackEmpty(S))       {           if(p)           {               Push(S,p);               temp=p->lchild;               p->lchild=p->rchild;               p->rchild=temp;               p=p->lchild;           }    

49、       else          {               Pop(S,p);               p->rchild;           }       }   } 4. 给出一段报文和每个字符出现的概率, 对其进行哈夫曼编码和解码。 实验4 图论及其应用 一、 实验目的 1. 了解图的基本概念及术语,并能够熟练掌握图的两种存储结构(邻接矩阵和邻接表)。 2. 理解最小生成树的概念, 能按Prim算法构造最小生成树。 3. 掌握图的两种遍历(深度优先搜索遍历和广度优先搜索遍历)、 拓扑排序、 关键路径、 最短路径的算

50、法思想。 二、 实验内容及步骤 1. 实现网( 有权图) 的存储结构。 2. 利用prim算法构造它的最小生成树。 3. 选择一个源点, 寻找从原点出发到达其它顶点的最短路径。 实验5 查找 一、 实验目的 1. 理解"查找表"的结构特点以及各种表示方法的适用性。 2. 熟练掌握顺序查找和折半查找, 并对其性能做出分析。 3. 熟练掌握哈希表的构造方法, 深刻理解哈希表与其它结构的表的实质性的差别。 二、 实验内容及步骤 1. 实现查找表的顺序查找和折半查找算法。 #include #include #include

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服