一、教材学习内容总结:
1.周一的课上复习了
冯·诺依曼模型:输入设备,输出设备(IO设备),存储器,运算器,控制器(CPU)。
计算机由硬件(裸机)和软件(系统软件与应用软件)组成(软件是程序、数据以及有关文档资料的集合,是(可运行的)思想和内容的数字化。思想:算法、规律、方法(程序)内容:图形、图像、数据、声音、文字等(数据))
程序:是使计算机完成某种任务的一组有序命令(指令语句)的集合。
程序设计语言发展的三个阶段:机器语言→汇编语言→高级语言。
语言翻译:
翻译程序:是把甲种语言程序翻译为等价的乙种语言程序的程序。其中,甲种语言称为源语言。乙种语言称为目标语言。
汇编程序:若源语言是汇编语言,目标语言是机器语言,则该翻译程序被称为汇编程序。
编译程序:若源语言是高级语言,目标语言是汇编语言或机器语言,则该翻译程序被称为编译程序。
解释程序:是翻译程序的另一种形式,它对源程序的语句边解释边执行,不产生目标程序。
计算机求解问题的过程:(重点在分析和设计)
设计红路灯管理系统:
信号灯问题的抽象——>着色问题,求解的方法:穷举法,贪心法。
2.周四的课上复习了
数据结构:研究数据的组织形式,包括数据的逻辑结构、存储结构以及在该数据结构上所施加的操作。
研究数据元素之间的客观联系(逻辑结构)
研究数据在计算机内部的存储方法(存储结构)
研究如何在数据的各种结构(逻辑的和物理的)上实施有效的操作或处理(算法)
数据:信息的载体,是描述客观事物的数、字符以及所有能输入到计算机中、被计算机程序识别和处理的符号的集合。(数值性数据、非数值性数据)
数据(data):客观事物的符号表示。
数据元素(data element):数据的基本单位,在程序中通常作为一个整体进行考虑和处理。
数据项(data item) :数据元素的某一属性。数据元素可以由若干数据项组成,数据项可以由若干更小的款项(组合项、原子项)组成。数据项又称域、字段。
数据对象(data object):性质相同的数据元素的集合。
数据结构(data structure):相互之间存在一种或多种特定关系的数据元素的集合。
定义:数据结构是一个二元组
B = <D, R>
其中,D是数据元素的有限集(即数据对象)。R是D上关系的有限集。
前后件关系(前驱与后继关系):数据元素之间的一个基本关系,但前后件关系所表示的实际意义是随具体对象的不同而不同。一般来说,数据元素之间的任何关系都可以用前后件关系来描述。数据的逻辑结构反映了数据元素之间的逻辑关系,即各数据元素之间的前后件关系。
数据结构是一个二元组:
D是数据元素的有限集(即数据对象)。
R是D上关系的有限集。
为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。
设a与b是D中的两个数据元素,则二元组<a,b>表示a是b的前件,b是a的后件。
数据节点:数据集合D中的每一个数据元素用中间标有元素值的方框表示(数据结点,结点)用一条有向线段从前件结点指向后件结点。
数据的逻辑结构:从数据的逻辑关系上描述数据,与数据的存储无关,与数据元素本身的具体形式、内容无关。数据的逻辑结构可以看作是从具体问题抽象出来的数据模型。
数据的存储结构:所要解决的基本问题是各种逻辑结构在计算机中的存储或者表示,主要包括结点的表示和关系的表示。(顺序存储(多用),链式存储(多用),散列(或哈希)存储,索引存储)
数据类型:指一个值的集合以及在这些值上定义的一组操作的总称。
抽象数据类型(Abstract Data Type, ADT):指抽象数据组织和与之相关的操作。每一个操作由它的输入和输出定义。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内的表示和实现无关。
抽象数据类型可以定义为:(D,R,P)D表示数据对象;R是D上的关系集;P是对D的基本操作集。
C没有为ADT提供专门支持,但可通过程序技术模拟
.h 文件定义数据表示(定义类型)和操作原型
.c 文件实现操作
使用.h文件中定义的类型的文件应包含语句#include “ **.h”
实例:构造一个
二、教材学习中的问题与解决过程
暂无
三、代码调试中的问题和解决过程
1.多项式函数值的计算(直接法语秦九韶算法)
原码:
#include <stdio.h>
#include <time.h>
#include<math.h>
clock_t start,stop;/*clock_t是clock()函数返回的变量类型*/
double duration;/*记录被测函数运行时间,以秒为单位*/
#define MAXN 10/*多项式的最大项数,即多项式阶数+1*/
#define MAXK 1e7/*被测函数最大重复调用次数*/
double f1(int n,double a[],double x)
{
int i;
double p=a[0];
for(i=1;i<=n;i++)
p+=(a[i-1]*pow(x,i));
return p;
}
double f2(int n,double a[],double x)
{
int i;
double p=a[n];
for(i=n;i>0;i--)
p=a[i-1]+x*p;
return p;
}
void run(double (*f)(int, double*,double),double a[],int case_n)
{/*此函数用于测试被测函数(*f)的运行时间,并且根据case_n输出相应的结果*/
/*case_n是输出的函数编号,1代表函数f1,2代表函数2*/
int i;
/*不在测试范围内的准备工作写在clock()调用之前*/
start=clock();/*开始计时*/
for(i=0;i<MAXK;i++)/*重复调用函数以获得充分多的时间打点数*/
(*f)(MAXN-1,a,1.1);/*被测函数放在这里*/
stop=clock();/*停止计时*/
duration=((double)(stop-start))/CLK_TCK/MAXK;/*计算运行时间*/
/*注意CLK_TCK是机器时钟每秒所走的时钟打点数*/
/*在某些IDE下也可能叫CLOCK_PER_SEC。*/
/*其他不在测试范围内的处理写在后面,例如输出duration的值*/
printf("ticks%d=%f\n",case_n,(double)(stop-start));
printf("duration%d=%6.2e\n",case_n,duration);
}
int main()
{
int i;
double a[MAXN];/*储存多项式的系数*/
/*为本题的多项式系数赋值。即a[i]=i*/
for(i=0;i<MAXN;i++)
a[i]=(double)i;
run(f1,a,1);
run(f2,a,2);
return 0;
}
结果截图:
四、其他(思考、感悟)
五、学习进度条
博客量(新增/累计) | 代码行数(新增/累计) | 学习时间(新增/累计) | 重要成长 | |
---|---|---|---|---|
第一周 | 1/28 | 100/3950 | 10/225 | 数据结构基本认识 |