数据结构实验指导书new

上传人:宝路 文档编号:23508978 上传时间:2017-12-01 格式:DOC 页数:15 大小:74.51KB
返回 下载 相关 举报
数据结构实验指导书new_第1页
第1页 / 共15页
数据结构实验指导书new_第2页
第2页 / 共15页
数据结构实验指导书new_第3页
第3页 / 共15页
数据结构实验指导书new_第4页
第4页 / 共15页
数据结构实验指导书new_第5页
第5页 / 共15页
点击查看更多>>
资源描述

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

1、数据结构实验指导书实验一 线性表的创建与应用一、 实验目的1、掌握线性表的定义2、 掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在链接存储结构上的运算。二、实验内容1、阅读并运行本实验程序(有序顺序表实现)2、用单链表方式实现本程序相应功能(有序单链表)3、利用有序单链表实现一元多项式的加法的功能。三、 实验要求1、 认真阅读和掌握本实验的参考程序(有序顺序表)。2、 上机运行该程序。3、 保存和打印出程序的运行结果,并结合程序进行分析。4、 按照有序顺序表功能,重新改写程序并运行,打印出文件清单和运行结果5、创建有序单链表时,要用头插法和尾插法同时实现。6、实现一元多项式的加法

2、的功能,并输出结果。7、最好能将结果写入到文本文件中。四、 注意事项:1、实验学时:4学时2、实验完成一周内提交实验报告(实验报告本)3、实验结果要求抓图打印4、严禁抄袭五、 实验附件程序(有序顺序表)Odsqlist.h文件:#define LIST_INIT_SIZE 8 /线性表存储空间的初始分配量#define LISTINCREMENT 10 /线性表存储空间的分配增量#define OVERFLOW -2#define ERROR 0#define OK 1#define TRUE 1#define FALSE 0typedef int Status;typedef int Ele

3、mType;typedef struct ElemType *elem; / 存储空间基址int length; / 当前长度int listsize; / 当前分配的存储容量( 以sizeof(ElemType)为单位)SqList; / 俗称 顺序表typedef SqList OdSqList; /有序顺序表Status InitList(OdSqList&); / 结构初始化void Destroy(OdSqList&); /销毁有序顺序表void ClearList(OdSqList&);/清空有序表Status ListEmpty(OdSqList);/判有序表为空int List

4、Length(OdSqList);/求表长int LocateElem(OdSqList,ElemType); / 查找void ListInsert(OdSqList&,ElemType); / 插入元素Status ListDelete(OdSqList&, int,ElemType& ); / 删除元素int ListDeletem(OdSqList&L, ElemType e); / 删除所有值为e的元素,返回删除的元素个数int ListDeletemn(OdSqList&, ElemType, ElemType ); / 删除所有值界于minkmaxk 的元素,并返回删除的元素个数

5、void ListTraverse(OdSqList);/遍历非递减有序线性表odsqlist.cpp文件:#include#include#include odsqlist.hStatus InitList( OdSqList& L )/ 构造一个空的线性表 L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType);if (!L.elem) exit(OVERFLOW);L.length = 0;L.listsize = LIST_INIT_SIZE;return OK; / InitListvoid ListTraverse(

6、OdSqList L)/遍历线性表int i;printf(listsize is %d.n,L.listsize);printf(listlength is %d.n,L.length);printf(the list is:();for(i=1;i= L.listsize) / 当前存储空间已满,增加分配newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType);if (!newbase) exit(OVERFLOW);/ 存储分配失败L.elem = newbase; / 新基址L.l

7、istsize += LISTINCREMENT; / 增加存储容量q = &(L.elem0); / q 指示第1个元素位置for (p = &(L.elemL.length-1);p=q&*pe; -p) *(p+1) = *p; / 插入位置及之后的元素右移*(p+1) = e; / 插入e+L.length; / 表长增1Status ListDelete(OdSqList &L, int i, ElemType &e) ElemType *p,*q;if (i L.length) return ERROR;/ 删除位置不合法p = &(L.elemi-1); / p 为被删除元素的位

8、置e = *p; / 被删除元素的值赋给 eq = L.elem+L.length-1; / 表尾元素的位置for (+p; p #include#include odsqlist.hvoid main()OdSqList L;int k;char i;ElemType e,mink,maxk;printf(OdSqList is initn);i=InitList(L);ListTraverse(L);while(1)printf(nnplease select:n);printf(1-insertn);printf(2-traversen);printf(3-deletein);print

9、f(4-deletekn);printf(5-deletemink-maxkn);printf(6-locaten);printf(7-isemptyn);printf(8-lengthn);printf(9-clearlistn);printf(0-quitn);scanf(%d,&k);switch(k)case 1:printf(please input e:);scanf(%d,&e);ListInsert(L,e);ListTraverse(L);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);br

10、eak;case 2:ListTraverse(L);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 3:while(1)printf(please input delete i:);scanf(%d,&i);if(ListDelete(L,i,e)=ERROR)printf(delete positon is error!n);else printf(Deleted elem is %dn,e);break;ListTraverse(L);scanf(%c,&i);printf(ple

11、ase press any key to continue);scanf(%c,&i);break;case 4:printf(please input delete e:);scanf(%d,&e);ListTraverse(L);printf(%d elem is deleted.n,ListDeletem(L,e);ListTraverse(L);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 5:printf(please input delete mink and maxk:)

12、;scanf(%d%d,&mink,&maxk);ListTraverse(L);printf(%d elem is deleted.n,ListDeletemn(L,mink,maxk);ListTraverse(L);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 6:printf(please input locate e:);scanf(%d,&e);i=LocateElem(L,e);if(i=0)printf(locate Defaulted!n);else printf(l

13、ocated no. is %dn,i);ListTraverse(L);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 7:if(ListEmpty(L)printf(the orderlist is empty!n);elseprintf(the orderlist is not empty!n);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 8:printf(length

14、is %d.n,ListLength(L);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 9:ClearList(L);printf(the orderlist is empty!n);scanf(%c,&i);printf(please press any key to continue);scanf(%c,&i);break;case 0:Destroy(L);exit(1);break;实验二 栈(队列)的创建与应用一、 实验目的1. 掌握栈(队列)的基本操作:初始化栈(队列)、

15、判栈(队列)为空、出栈(队列)、入栈(队列)等运算。2. 掌握栈(队列)的应用方法,应用特点。二、实验要求1 认真阅读和掌握本实验提供的参考算法程序。2 上机实现实验内容算法。 3 保存和打印出程序的运行结果,并结合程序进行分析。三、实验内容1.表达式求值:已提供的表达式求值程序结构不好,请改进,要求用多文件方式实现,并将中序表达式变为后序表达式的结果写入文件。2.迷宫问题:已提供的迷宫问题算法程序有栈和队列实现两种方式,请你分别改进,要求用多文件方式实现,并将最终的路径写入文件。(以上提供的源码已随课件发给大家了)四、实验学时实验学时:2学时实验三 树的创建与应用一、实验目的1 掌握二叉树的二叉链表的定义方法。2 掌握基于二叉链表的二叉树的创建和遍历。3 掌握用线索

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

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