欢迎来到天天文库
浏览记录
ID:45747455
大小:114.17 KB
页数:36页
时间:2019-11-17
《《数据结构》上机实验指导new》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《数据结构》实验指导书方义秋编著黄梅根改程序计算机综合实验中心nnssu2、及各程序模块Z间的调用关系。3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。6、测试结果:列出对于给定的输入所产生的输出结果。若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。实验一、单链表的插入和删除一、目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。二、要求:建立一个数据域定义为字符串的单链表,3、在链表屮不允许侑重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。三、示例程序:(VC++调试通过)#inc)udez/stdio.h"//定义结点〃结点的数据域为字符串//结点的指针域#inc)ude/zstring.h"ftinclude^stdlib.h"ftinclude^ctype.h"typedefstructnode{chardata[10];structnode*next;}ListNode;typedefListNode*LinkList;LinkListCreatListRl();ListNode4、*LocateNodc();voidDeleteList();voidprintlist();voidDeleteAll();//H定义LinkList单链表类型//函数,用尾插入法建立帶头结点的单链表//函数,按值查找结点//函数,删除指定值的结点//函数,打卬链表屮的所有值//函数,删除所有结点,释放内存//=========-按值查找结点,找到则返回该结点的位置,否则返回NULL==========ListNode*LocateNode(LinkListhead,char*key){ListNode*p=hoad->ne5、xt;//从开始结点比较while(p&&strcmp(p->data,key)!=0)//直到p为NULL或p->data为key止p=p->next;//扌才描下一个结点returnp;〃若p二NULL则查找失败,否则p指向找到的值为key的结点//==========用尾插入法建立带头结点的单链表===========LinkListCreatListRl(void)charchLlO];LinkListhead=(LinkList)malloc(sizeof(ListNode));//生成头结点ListNode*s,*6、r,*pp;r=head;r->next=NULL;printf(,zlnput#toend”);//输入代表输入结束printf("PleaseinputNode_data:〃);scanf("%s",ch);//输入各结点的字符串while(strcmp(ch,"#")!=0){pp=LocateNode(head,ch);//按值查找结点,返冋结点指针if(pp==NULL){//没有重复的字符串,插入到链表小s=(ListNode*)meilloc(sizeof(ListNode));strepy(s->data,ch7、);r->next二s;r->next=NULL;}printf("Input#toend“);printf("PleaseinputNodedata:,z);scanfch);}returnhead;〃返回头指针}//==========删除带头结点的单链表中的指定结点=======voidDeleteList(LinkListhead,char*key)ListNode*p,*q二head;p=LocateNode(head,key);if(p==NULL){printf(/zpositionerror");exit(0)8、;}while(q->ncxtUp)q=q->next;r=q->next;q->next=r->next;free(r):〃按key值查找结点的//若没有找到结点,退出//P为要删除的结点,q为P的前结点//释放结点//===========打印链表=======voidp
2、及各程序模块Z间的调用关系。3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。6、测试结果:列出对于给定的输入所产生的输出结果。若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。实验一、单链表的插入和删除一、目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。二、要求:建立一个数据域定义为字符串的单链表,
3、在链表屮不允许侑重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。三、示例程序:(VC++调试通过)#inc)udez/stdio.h"//定义结点〃结点的数据域为字符串//结点的指针域#inc)ude/zstring.h"ftinclude^stdlib.h"ftinclude^ctype.h"typedefstructnode{chardata[10];structnode*next;}ListNode;typedefListNode*LinkList;LinkListCreatListRl();ListNode
4、*LocateNodc();voidDeleteList();voidprintlist();voidDeleteAll();//H定义LinkList单链表类型//函数,用尾插入法建立帶头结点的单链表//函数,按值查找结点//函数,删除指定值的结点//函数,打卬链表屮的所有值//函数,删除所有结点,释放内存//=========-按值查找结点,找到则返回该结点的位置,否则返回NULL==========ListNode*LocateNode(LinkListhead,char*key){ListNode*p=hoad->ne
5、xt;//从开始结点比较while(p&&strcmp(p->data,key)!=0)//直到p为NULL或p->data为key止p=p->next;//扌才描下一个结点returnp;〃若p二NULL则查找失败,否则p指向找到的值为key的结点//==========用尾插入法建立带头结点的单链表===========LinkListCreatListRl(void)charchLlO];LinkListhead=(LinkList)malloc(sizeof(ListNode));//生成头结点ListNode*s,*
6、r,*pp;r=head;r->next=NULL;printf(,zlnput#toend”);//输入代表输入结束printf("PleaseinputNode_data:〃);scanf("%s",ch);//输入各结点的字符串while(strcmp(ch,"#")!=0){pp=LocateNode(head,ch);//按值查找结点,返冋结点指针if(pp==NULL){//没有重复的字符串,插入到链表小s=(ListNode*)meilloc(sizeof(ListNode));strepy(s->data,ch
7、);r->next二s;r->next=NULL;}printf("Input#toend“);printf("PleaseinputNodedata:,z);scanfch);}returnhead;〃返回头指针}//==========删除带头结点的单链表中的指定结点=======voidDeleteList(LinkListhead,char*key)ListNode*p,*q二head;p=LocateNode(head,key);if(p==NULL){printf(/zpositionerror");exit(0)
8、;}while(q->ncxtUp)q=q->next;r=q->next;q->next=r->next;free(r):〃按key值查找结点的//若没有找到结点,退出//P为要删除的结点,q为P的前结点//释放结点//===========打印链表=======voidp
此文档下载收益归作者所有