数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。
主要研究数据(特别是非数值型数据) 的组织、存储和运算方法的课程。
计算机科学中的一门综合性的专业基础课。
学会分析数据对象的特征,掌握数据的组织方法和计算机的表示方法,以便为应用所涉及的数据选择适当的逻辑结 构、存储结构及相应算法,初步掌握算法时间及空间分析的 技巧,培养良好的程序设计技能。
学习方法:
学习数据结构,必须经过大量的实践,在实践中体会构 造性思维方法,掌握数据组织与程序设计的技术。
编程没有捷径–“练、练、练”。
数据结构
概括:
为在计算机上解决具体问题,应如何对所需的数据/信息及其关系进行组 织,以及如何对它们进行基本操作。
简言之,就是研究数据的组织 方式(结构)及相应的抽象操作。
包含三方面内容:数据的逻辑结构、数据的存储结构、数据的运算
①集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。
②线性结构:结构中的数据元素之间存在着一对一的线性关系。
③树形结构:结构中的数据元素之间存在着一对多的层次关系。
④图状结构.结构中的数据元素之间存在着多对多的任意关系。
顺序存储 链式存储
一般采用类语言描述算法
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称为算法的“时间复杂度”。
O的数学含义是,若存在两个常量C和n0,当n>n0时,
|T(n)|<=C|f(n)|
则记作
T(n)=O(f(n))
算法语句 对应的语句频度
for(i=0;i<n;i++) n+l
for(j=0;j<n;j++) n(n+1)
{
c[i][j]=0; n*n
for (k=0;k<n;k++) n*n*(n+1)
c[i][j] =c[i][j] +a[i] [k]*b[k][j];(原操作) n*n*n
}
空间复杂度是指算法在计算机内执行时所需存储空间的度量,记作
S(n)=O(f(n))
算法执行期间所需要的存储空间包括三部分。
①算法程序所占的空间。
②输入的初始数据所占的存储空间。
③算法执行过程中所需要的额外空间。
若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅 助变量所占的额外空间。
若所需额外空间相对于输人数据量来说是常数,则称此算法为“原地工作”。
若所需存储量依赖于特定的输人,则通常按最坏情况考虑。
i=1;k=0;
while(i<=n-1)
{
k=k+10*i;
i++;
}
(2)
i=1;j=0;
while(i+j<=n)
{
if(i>j) j++
else i++;
}
(3)
x=n;y=0;/*n>1*/
while(x>=(y+1)*(y+1))
y++;
(4)
x=91;y=100;
while(y>0)
{
if(x>100)
{
x=x-10;
y--;
}
else x++;
}
(1)
i=1;k=0;
while(i<=n-1)
{
k=k+10*i;
i++;
}
T(n)=O(n)
(2)
i=1;j=0;
while(i+j<=n)
{
if(i>j) j++
else i++;
}
T(n)=O(n)
(3)
x=n;y=0;/*n>1*/
while(x>=(y+1)*(y+1))
y++;
T(n)=O(n^(1/2))
(4)
x=91;y=100;
while(y>0)
{
if(x>100)
{
x=x-10;
y--;
}
else x++;
}
T(n)=O(1)
9.1
typedef int Type;
int find(Tyde A[],int len Type K){
//len等于题中的n+1
A[0]=K;
for(i=n;i>-1;i--){
if(A[i]==K){
return i;
}
}
T(n)=O(n)
9.2
typedef int Type;
void find(Type A[],int len,Type *max1,Type *max2){
//*max1表示最大值,*max2表示次大值//len等于题中的n+1
if(A[1]>=A[2]){
*max1=A[1];
*max2=A[2];
}else{
*max1=A[2];
*max2=A[1];
}
for(i=3;i<n+1;i++){
if(A[i]>*max1){
*max2=*max1;
*max1=A[i];
}else if(A[i]>*max2){
*max2=A[i];
}
}
}
T(n)=O(n)