没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构实验与习题解析
"这本《数据结构实验与习题》旨在帮助计算机专业的学生克服在学习数据结构过程中遇到的困难,提供理论学习与实践操作相结合的指导。它特别关注那些编程基础较弱的学生,提供了C语言基础知识的复习,以及一系列上机实验和书面作业,帮助他们更好地理解和应用数据结构。” 在《数据结构实验与习题》中,作者首先介绍了C语言基础知识,这是学习数据结构的重要前提。这部分涵盖了基本的输入/输出操作,函数的定义与参数传递,以及结构体的概念和使用。理解这些概念并能够熟练运用,对于实现和理解数据结构的算法至关重要。例如,函数的参数传递涉及到值传递和引用传递,这在创建和操作复杂数据结构时经常用到;结构体则允许我们将多个不同类型的数据组合在一起,形成复杂的数据结构。 接着,书中的上机实验部分提供了丰富的C语言源程序实例,覆盖了从简单的数据结构验证到需要独立思考和设计的综合实验题。这些实验旨在让学习者通过动手实践来加深对数据结构的理解,如链表、树、图等经典数据结构的实现。通过验证已有的代码或扩展已有功能,学生可以逐步提升编程能力和问题解决能力。 习题部分则是对理论知识的巩固和拓展,包括选择题、判断题、图表解答题、算法设计题以及综合解答分析题。这些习题设计全面,难度适中,既适合自我检测,也适用于课堂讨论和小组合作。部分习题的答案被提供,以便于学生自我检查和学习。 《数据结构实验与习题》是一本实用的教材补充,它弥补了传统教材可能忽视的实践环节,通过理论与实践的结合,帮助学生克服数据结构学习的难点,提升其分析问题和解决问题的能力。无论对于初学者还是有一定基础的学生,这本书都能提供有价值的指导和练习。
资源详情
资源推荐
14
creat(&b); outputc(b);
a1=add(a,b); outputc(a1);
} /* maijn */
/* 创建一个复数 */
void creat(comp *c)
{ float c1,c2;
printf("输入实部 real x=?");scanf("%f",&c1);
printf("输入虚部 xvpu y=?");scanf("%f",&c2);
(*c).x=c1; c ->y=c2;
} /* creat */
/* 输出一个复数 */
void outputc(comp a)
{ printf("\n %f+%f i \n\n",a.x,a.y);
}
/* 求两个复数相加之和 */
comp add(comp k,comp h)
{ comp l;
l.x=k.x+h.x; l.y=k.y+h.y;
return(l);
} /* add */
三、实习题
首先将上面源程序输入计算机,进行调试。运行程序,输入下列两个复数的实部域虚
部,记录两个复数相加的输出结果。 原始数据:2.0 + 3.5i ,3.0 – 6.3i
然后在上面程序的基础上,增加自行设计的复数减、复数乘的两个子函数,适当补充
必需的语句(例如函数原型声明、主函数中的调用等)。提示:
// 求两个复数相减之差的函数
comp sub(comp k,comp h) { ……}
// 求两个复数相乘之积的函数
comp chengji(comp k,comp h){ …… }
再次调试运行程序。输入数据,记录结果,最后完成实验报告。
15
实习二 线性表
一、实验目的
1. 了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。
2. 重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;
并进一步学习结构化的程序设计方法。
二、实例
1. 线性表的顺序存储表示(结构)及实现。
阅读下列程序请注意几个问题:
(1)关于线性表的顺序存储结构的本质是:在逻辑上相邻的两个数据元素 a
i-1
, a
i
,
在存储地址中也是相邻的,既地址连续。不同的教材有不同的表示,有的直接采用一维数
组,这种方法有些过时。有的采用含‘动态分配’一维数组的结构体,这种方法过于灵活
抽象(对读者要求过高)。我们采用的是含‘静态’一维数组和线性表长的结构体:
typedef struct
{ ElemType a[MAXSIZE]; /* 一维数组 子域 */
int length; /* 表长度子域 */
}SqList; /* 顺序存储的结构体类型 */
(2)本程序是一个完整的、子函数较多的源程序。目的为学生提供一个示范,提供
顺序存储表示的资料,供学生参考。比如,主函数中简单“菜单设计”(do-while 循环内
嵌套一个 switch 结构)技术。在学习数据结构的初级阶段,并不强要求学生一定使用“菜
单设计”技术,同学们可以在 main()函数中直接写几个简单的调用语句,就象前面的复数
处理程序中的 main()一样。但是随着学习的深入,尽早学会使用“菜单设计”技术,会明
显提高编程和运行效率。
[源程序]
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20 /* 数组最大界限 */
typedef int ElemType; /* 数据元素类型 */
typedef struct
{ ElemType a[MAXSIZE]; /* 一维数组 子域 */
int length; /* 表长度子域 */
}SqList; /* 顺序存储的结构体类型 */
SqList a,b,c;
/* 函数声明 */
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L,int i,ElemType e);
16
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);
/* 主函数 */
main()
{ int i,k,loc; ElemType e,x; char ch;
do { printf("\n\n\n");
printf("\n 1. 建立线性表 " );
printf("\n 2. 在 i 位置插入元素 e");
printf("\n 3. 删除第 i 个元素,返回其值");
printf("\n 4. 查找值为 e 的元素");
printf("\n 6. 结束程序运行");
printf("\n======================================");
printf("\n 请输入您的选择(1,2,3,4,6)");
scanf("%d",&k);
switch(k)
{ case 1:{ creat_list(&a); out_list(a);
} break;
case 2:{ printf("\n i,e=?"); scanf("%d,%d",&i,&e);
insert_sq(&a,i,e); out_list(a);
} break;
case 3:{ printf("\n i=?"); scanf("%d",&i);
x=delete_sq(&a,i); out_list(a);
printf("\n x=%d",x);
} break;
case 4:{ printf("\n e=?"); scanf("%d",&e);
loc=locat_sq(a,e);
if (loc==-1) printf("\n 未找到 %d",loc);
else printf("\n 已找到,元素位置是 %d",loc);
} break;
} /* switch */
}while(k!=6);
printf("\n 再见!");
printf(“\n 打回车键,返回。“); ch=getch();
} /* main */
/* 建立线性表 */
void creat_list(SqList *L)
{ int i;
printf("\n n=?"); scanf("%d",&L->length);
for(i=0;i<L->length;i++){ printf("\n data %d=?",i);
17
scanf("%d",&(L->a[i]));
}
} /* creat_list */
/* 输出线性表 */
void out_list(SqList L)
{ int i; char ch;
printf("\n");
for(i=0;i<=L.length-1;i++) printf("%10d",L.a[i]);
printf("\n\n 打回车键,继续。“); ch=getch();
} /* out_list */
/* 在线性表的第 i 个位置插入元素 e */
void insert_sq(SqList *L,int i,ElemType e)
{ int j;
if (L->length==MAXSIZE) printf("\n overflow !");
else if(i<1||i>L->length+1) printf("\n erroe i !");
else { for(j=L->length-1; j>i-1; j--) L->a[j+1]=L->a[j];
/* 向后移动数据元素 */
L->a[i-1]=e; /* 插入元素 */
L->length++; /* 线性表长加 1 */
}
} /* insert_sq */
/* 删除第 i 个元素,返回其值 */
ElemType delete_sq(SqList *L, int i)
{ ElemType x; int j;
if( L->length==0) printf("\n 是空表。underflow !");
else if(i<1||i> L->length){ printf("\n error i !");
x=-1;}
else { x=L->a[i-1];
for(j=i; j<=L->length-1; j++) L->a[j-1]=L->a[j];
L->length--;
}
return(x);
} /* delete_sq */
/* 查找值为 e 的元素,返回它的位置 */
int locat_sq(SqList L, ElemType e)
{ int i=0;
while(i<=L.length-1 && L.a[i]!=e) i++;
if(i<=L.length-1) return(i+1);
else return(-1);
剩余82页未读,继续阅读
zzzzl333
- 粉丝: 759
- 资源: 7万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功