欢迎来到天天文库
浏览记录
ID:40210118
大小:928.50 KB
页数:113页
时间:2019-07-26
《数据结构算法设计与实现指导(上)ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构算法设计与实现指导(上)李岩芳何巍主编实验一:实验目的及要求理解线性表顺序存储的抽象数据类型的定义,及在C语言环境中的表示方法。理解线性表在顺序存储时的基本操作的算法,及在C语言环境中一些主要基本操作的实现。在C语言环境下实现线性表在顺序存储时的应用操作:将两个非递减的线性表合并成一个新的非递减的线性表。实验内容建立线性表结构取指定位置元素查找指定元素输出指定元素的前驱输出指定元素的后继插入元素删除元素访问线性表元素输出元素比较两个元素清空线性表判断线性表是否为空销毁线性表合并线性表主函数退出基本操作集函数应用函数比较两个
2、元素intcompare(ElemTypea,ElemTypeb){return(a-b);}输出元素voidprint(ElemType*c){printf("%d",*c);}访问线性表元素注意:该函数中传递的参数仍是一个函数.visit()是一个形参,在该程序的实际调用中,传递的实参为print(),也就是说,visit(p++)相当于调用print(p++)。用该种方式实现遍历。StatusListTraverse(SqListL,void(*visit)(ElemType*)){ElemType*p;inti;p=L.e
3、lem;for(i=1;i<=L.length;i++)visit(p++);printf("");returnOK;}输出指定元素的后继算法思想:在一个非空的线性表中,除最后一个数据元素之外,其余数据元素有且只有一个后继。故本函数处理时从第1个数据元素开始寻找与指定元素相等的数据元素,直到倒数第2个数据元素,控制条件采用的是i小于线性表的长度(i4、xt_e){inti=1;ElemType*p=L.elem;while(i5、,ElemTypecur_e,ElemType*pre_e){inti=2;ElemType*p=L.elem+1;while(i<=L.length&&*p!=cur_e){p++;i++;}if(i>L.length)returnINFEASIBLE;else{*pre_e=*--p;returnOK;}}查找指定元素算法思想:查找数据元素可引申出多个操作:取出某个指定的元素,修改某个指定的元素,找出某个指定元素的前驱和后继,输出从某个元素开始的m个元素等。intLocateElem(SqListL,ElemTypee,Sta6、tus(*compare)(ElemType,ElemType)){ElemType*p;inti=1;p=L.elem;while(i<=L.length&&compare(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}取指定位置元素算法思想:因为顺序存储的线性表具有随机存储的特点,当希望取出第i个位置的数据元素时,只要用存储空间的基地址加上前i-1个数据元素的存储空间即可。StatusGetElem(SqListL,inti,ElemType*e){if(i<17、8、i>L.le9、ngth)exit(ERROR);*e=*(L.elem+i-1);returnOK;}清空线性表判断线性表是否为空算法思想:当一个线性表的长度为0时就表明这个线性表不含有任何数据元素,故在这个函数中只要把线性表的长度修改为0即可。StatusClearList(SqList*L){(*L).length=0;returnOK;}//清空线性表清空线性表判断线性表是否为空判断线性表是否为空。StatusListEmpty(SqListL){if(L.length==0)returnTRUE;elsereturnFALSE;}建立线10、性表结构算法思想:按照线性表顺序存储结构的定义,申请一串连续存储空间,即开辟一个指定大小的一维数组;指定空的线性表的长度,即为0;指定线性表的大小。StatusInitList(SqList*L){(*L).elem=(ElemType*)mall
4、xt_e){inti=1;ElemType*p=L.elem;while(i5、,ElemTypecur_e,ElemType*pre_e){inti=2;ElemType*p=L.elem+1;while(i<=L.length&&*p!=cur_e){p++;i++;}if(i>L.length)returnINFEASIBLE;else{*pre_e=*--p;returnOK;}}查找指定元素算法思想:查找数据元素可引申出多个操作:取出某个指定的元素,修改某个指定的元素,找出某个指定元素的前驱和后继,输出从某个元素开始的m个元素等。intLocateElem(SqListL,ElemTypee,Sta6、tus(*compare)(ElemType,ElemType)){ElemType*p;inti=1;p=L.elem;while(i<=L.length&&compare(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}取指定位置元素算法思想:因为顺序存储的线性表具有随机存储的特点,当希望取出第i个位置的数据元素时,只要用存储空间的基地址加上前i-1个数据元素的存储空间即可。StatusGetElem(SqListL,inti,ElemType*e){if(i<17、8、i>L.le9、ngth)exit(ERROR);*e=*(L.elem+i-1);returnOK;}清空线性表判断线性表是否为空算法思想:当一个线性表的长度为0时就表明这个线性表不含有任何数据元素,故在这个函数中只要把线性表的长度修改为0即可。StatusClearList(SqList*L){(*L).length=0;returnOK;}//清空线性表清空线性表判断线性表是否为空判断线性表是否为空。StatusListEmpty(SqListL){if(L.length==0)returnTRUE;elsereturnFALSE;}建立线10、性表结构算法思想:按照线性表顺序存储结构的定义,申请一串连续存储空间,即开辟一个指定大小的一维数组;指定空的线性表的长度,即为0;指定线性表的大小。StatusInitList(SqList*L){(*L).elem=(ElemType*)mall
5、,ElemTypecur_e,ElemType*pre_e){inti=2;ElemType*p=L.elem+1;while(i<=L.length&&*p!=cur_e){p++;i++;}if(i>L.length)returnINFEASIBLE;else{*pre_e=*--p;returnOK;}}查找指定元素算法思想:查找数据元素可引申出多个操作:取出某个指定的元素,修改某个指定的元素,找出某个指定元素的前驱和后继,输出从某个元素开始的m个元素等。intLocateElem(SqListL,ElemTypee,Sta
6、tus(*compare)(ElemType,ElemType)){ElemType*p;inti=1;p=L.elem;while(i<=L.length&&compare(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}取指定位置元素算法思想:因为顺序存储的线性表具有随机存储的特点,当希望取出第i个位置的数据元素时,只要用存储空间的基地址加上前i-1个数据元素的存储空间即可。StatusGetElem(SqListL,inti,ElemType*e){if(i<1
7、
8、i>L.le
9、ngth)exit(ERROR);*e=*(L.elem+i-1);returnOK;}清空线性表判断线性表是否为空算法思想:当一个线性表的长度为0时就表明这个线性表不含有任何数据元素,故在这个函数中只要把线性表的长度修改为0即可。StatusClearList(SqList*L){(*L).length=0;returnOK;}//清空线性表清空线性表判断线性表是否为空判断线性表是否为空。StatusListEmpty(SqListL){if(L.length==0)returnTRUE;elsereturnFALSE;}建立线
10、性表结构算法思想:按照线性表顺序存储结构的定义,申请一串连续存储空间,即开辟一个指定大小的一维数组;指定空的线性表的长度,即为0;指定线性表的大小。StatusInitList(SqList*L){(*L).elem=(ElemType*)mall
此文档下载收益归作者所有