软件技术基础-实验指导书
时间:2025-04-23
时间:2025-04-23
实验指导书
《软件技术基础》实验指导书
1
实验指导书
目录
《软件技术基础》上机实验的目的和要求 ............................................................................................ 3 实验一、单链表的插入和删除................................................................................................................... 4 实验二、二叉树操作 .................................................................................................................................... 8 实验三、图的遍历操作 .............................................................................................................................. 12 实验四、排序................................................................................................................................................ 19 实验五、查找................................................................................................................................................ 25
2
实验指导书
《软件技术基础》上机实验的目的和要求
通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。
要求所编的程序能正确运行,并提交实验报告。实验报告的基本要求为: 1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定: (1)输入的形式和输出值的范围; (2)输出的形式;
(3)程序所能达到的功能;
(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
2、概要设计:说明用到的软件技术基础定义、主程序的流程及各程序模块之间的调用
关系。
3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。 4、调试分析:
(1)调试过程中所遇到的问题及解决方法; (2)算法的时空分析; (3)经验与体会。
5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。
6、测试结果:列出对于给定的输入所产生的输出结果。若有可能,测试随输入规模的
增长所用算法的实际运行时间的变化。
3
实验指导书
实验一、单链表的插入和删除
一、目的:
了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
二、要求:
建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。
三、示例程序:
#include "stdio.h" #include "string.h" #include "stdlib.h"
typedef struct node //定义结点 {
char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode;
typedef ListNode * LinkList; // 自定义LinkList单链表类型
LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表 ListNode *LocateNode(LinkList head, char *key); //函数,按值查找结点
void DeleteList(LinkList head,char *key); //函数,删除指定值的结点
void printlist(LinkList head); //函数,打印链表中的所有值 void DeleteAll(LinkList head); //函数,删除所有结点,释放内存
//==========主函数============== void main() {
char *ch; char num[4]; char b[8]; ch=&b[0]; LinkList head;
head=CreatListR1(); //用尾插入法建立单链表,返回头指针 printlist(head); //遍历链表输出其值
4
实验指导书
printf(" Delete node (y/n):"); //输入"y"或"n"去选择是否删除结点 scanf("%s",num);
if(strcmp(num,"y")==0 || strcmp(num,"Y")==0){ }
DeleteAll(head); //删除所有结点,释放内存 }
//==========用尾插入法建立带头结点的单链表=========== LinkList CreatListR1(void) {
char *ch; char a[8]; ch=&a[0];
LinkList head=(LinkList)malloc(sizeof(ListNode)); //生成头结点 ListNode *s,*r,*pp; r=head; r->next=NULL;
printf("Input # to end "); //输入"#"代表输入结束 printf("Please input Node_data:");
scanf("%s",ch); //输入各结点的字符串 while(strcmp(ch,"#")!=0) {
pp=LocateNode(head,ch); //按值查找结点,返回结点指针 if(pp==NULL) { //没有重复的字符串,插入到链表中 }
printf("Input # to end "); printf("Please input Node_data:"); scanf("%s",ch);
s=(ListNode *)malloc(sizeof(ListNode)); strcpy(s->data,ch); r->next=s; r=s;
r->next=NULL;
printf("Please input Delete_data:");
scanf("%s",ch); //输入要删除的字符串 DeleteList(head,ch); printlist(head);
}
return head; //返回头指针 }
//==========按值查找结点,找到则返回该结点的位置,否则返回NULL========== ListNode *LocateNode(LinkList head, char *key)
5
实验指导书
{
ListNode *p=head->next; //从开始结点比较
while(p && strcmp(p->data,key)!=0) //直到p为NULL或p-> data为key止 }
//==========删除带头结点的单链表中的指定结点======= void DeleteList(LinkList head,char *key) {
ListNode *p,*r,*q=head;
p=LocateNode(head,key); //按key值查找结点 …… 此处隐藏:9473字,全部文档内容请下载后查看。喜欢就下载吧 ……