《数据结构》实验指导

上传人:aa****6 文档编号:38106873 上传时间:2018-04-27 格式:DOC 页数:52 大小:172KB
返回 下载 相关 举报
《数据结构》实验指导_第1页
第1页 / 共52页
《数据结构》实验指导_第2页
第2页 / 共52页
《数据结构》实验指导_第3页
第3页 / 共52页
《数据结构》实验指导_第4页
第4页 / 共52页
《数据结构》实验指导_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《《数据结构》实验指导》由会员分享,可在线阅读,更多相关《《数据结构》实验指导(52页珍藏版)》请在金锄头文库上搜索。

1、数据结构数据结构语言版语言版实验指导实验指导目目 录录数据结构上机实验的目的和要求.1实验一 顺序结构线性表的实现.2实验二 单链表的插入和删除.8实验三 栈的实现.11实验四 二叉树操作实现.14实验五 哈夫曼树的建立与编码实现.18实验六 图的遍历操作.28实验七 排序.34实验八 查找.40数据结构课程设计.451数据结构数据结构上机实验的目的和要求上机实验的目的和要求通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程 序的能力。 要求所编的程序能正确运行,并提交实验报告。实验报告的基本要求为: 1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定: (1

2、)输入的形式和输出值的范围; (2)输出的形式; (3)程序所能达到的功能; (4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。 2、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。 4、调试分析: (1)调试过程中所遇到的问题及解决方法; (2)算法的时空分析; (3)经验与体会。 5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。 6、测试结果:列出对于给定的输入所产生的输出结果。若有可能,测试随输入规模的 增长所用算法的实际运行时间的变化。2实验一实验一 顺序结构线性

3、表的实现顺序结构线性表的实现一、目的:一、目的: 掌握顺序表的表示方法,存储结构及其基本操作的实现。 二、要求:二、要求: 建立一顺序表,实现其基本操作。 三、示例程序:三、示例程序: 说明:一个完整的程序是由输入,处理,输出三部分组成的,每个部分还可以分为若 干小部分,如输入,又可以分为声明,初始化变量,接收数据,预处理数据等。书上列出 的算法是解决问题的基本思路,也可以是解决问题的处理过程,并未给出详细的输入与输 出,这一部分需要在练习过程中加入,在解决实际问题时,还需要做灵活的处理。语言 本身有自身的特点,其基本思想是与机器的指令码相关的。要理解程序时必须明确这些特 点,并从算法所根据的

4、数据结构下手,然后才能明白给出的程序中其算法的意义。本例程 序用于演示顺序表的基本操作,希望同学们好好掌握。#include #include #include #include #define LIST_INIT_SIZE 50 #define LISTINCREMENT 10 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define CANCEL 0 typedef struct int *elem; int length; int listsize; sqlist; int compare(int X,int

5、Y) if(X=Y) return X; else return FALSE; /compare 的关系判断 void visit(int coutL.length) exit(ERROR); e=*(L.elem+i-1); return OK; /用 e 返回 L 中第 i 个数据元素的值 int locateelem(sqlist L,int e,int(*compare)(int x1,int x2) int i=1,j=0,*p; p=L.elem; while(iL.length) return FALSE; else pre_e=*p-2; return OK; /若 cur_e

6、 是 L 的数据元素,且不是第一个,则用 pre_e 返回它的前驱,否则操作失败, pre_e 无定义 int nextelem(sqlist L,int cur_e,int p=L.elem; while(i=L.length) return FALSE; else next_e=*p; return OK; /若 cur_e 是 L 的数据元素,且不是最后一个,则用 next_e 返回它的后继,否则操作失 败,next_e 无定义 int listinsert(sqlist if(iL.length+1) return ERROR; if (L.length=L.listsize) new

7、base=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int); 5if(!newbase) exit(0); L.elem=newbase; L.listsize=L.listsize+LISTINCREMENT; q=L.elem+i-1; for(p=L.elem+L.length-1;p=q;-p) *(p+1)=*p; *q=e; +L.length; return OK; /在线性表 L 中第 i 个位置插入元素 e int listdelete(sqlist if(iL.length) return ERROR;

8、 else p=L.elem+i-1; e=*p; q=L.elem+L.length-1; for(+p;pa; coutj; i=listinsert(L,k,j); for(b=1;bn; getelem(L,n,e); coutm; getelem(L,m,cur_e); if(priorelem(L,cur_e,pre_e) coutm; listdelete(L,m,e); coutnext=NULL;printf(“Input # to end “); /输入“#”代表输入结束printf(“Please input Node_data:“);scanf(“%s“,ch); /输

9、入各结点的字符串while(strcmp(ch,“#“)!=0) pp=LocateNode(head,ch); /按值查找结点,返回结点指针if(pp=NULL) /没有重复的字符串,插入到链表中s=(ListNode *)malloc(sizeof(ListNode);strcpy(s-data,ch);r-next=s;r=s;r-next=NULL;printf(“Input # to end “);printf(“Please input Node_data:“);scanf(“%s“,ch);return head; /返回头指针 /=按值查找结点,找到则返回该结点的位置,否则返回

10、 NULL=ListNode *LocateNode(LinkList head, char *key) ListNode *p=head-next; /从开始结点比较while(strcmp(p-data,key)!=0 /扫描下一个结点return p; /若 p=NULL 则查找失败,否则 p 指向找到的值为 key 的结点 /=删除带头结点的单链表中的指定结点=void DeleteList(LinkList head,char *key) ListNode *p,*r,*q=head;p=LocateNode(head,key); /按 key 值查找结点的if(p=NULL ) /

11、若没有找到结点,退出printf(“position error“); exit(0);while(q-next!=p) /p 为要删除的结点,q 为 p 的前结点q=q-next;10r=q-next;q-next=r-next;free(r); /释放结点 /=打印链表=void printlist(LinkList head) ListNode *p=head-next; /从开始结点打印while(p) printf(“%s, “,p-data); p=p-next;printf(“n“); /=删除所有结点,释放空间=void DeleteAll(LinkList head) ListNode *p=head,*r;while(p-next) r=p-next; free(p); p=r;free(p); 四、实验内容四、实验内容 1、分析、理解程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#) ,测试程 序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。3、修改程序: (1) 增加插入结点的功能。 (2) 将建立链表的方法改为头插入法。 五、实验报告要求五、实验报告要求 基本要求见第一页内容。 写出实验结果,并画出所建链表的示意图。 六、附加实验内容(详细

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号