zoukankan      html  css  js  c++  java
  • 数据结构学习 第一章数组和稀疏矩阵

    结构化程序设计的核心就是“自上而下设计”与模块化设计:将整个程序需求从上而下,由大到小分解成小的单元和模块,分别开发。


    OO程序设计三个重要的特性:继承,封装,多态;


    例如 for i=1 to n  do

                   j<-i;

    for k=j+1 to n do

    x=x+1;

    请问 x=x+!执行次数的时间复杂度O(n*n);

    先分析内层的循环一共执行1 至n-1次;即为∑(n-i)=∑n-∑i=n*n-n*(n-1)/2=n*(n-1)/2


    计算二维数组在内存中的位置(以列为主是java c/c++ pascal语言的数组存放方式,以行为主是Fortran语言存放方式)

    数组A(m,n),假设a为数组A在内存中的起始位j置,d为单位空间,那么数组元素A(i,j)在内存的位置:

    1)以列为主:Loc(A(i,j))=a+n*(i)*d+(j)*d(存储顺序为 a(0,0),a(0,1)a(0,2),a(1,0).....)

    a(0,0) a(1,0) a(2,0)
    a(0,1) a(1,1) a(2,1)
    a(0,2) a(1,2) a(2,2)

    2)以行为主 :loc(A(i,j))=a+i*d+m*(j)*d(存储顺序为a(0,0,)a(1,0),a(2,0)...)

    a(0,0) a(0,1) a(0,2)
    a(1,0) a(1,1) a(1,2)
    a(2,0) a(2,1) a(2,2)


    范例: 若A(1,1)在位置2,A(2,3)在位置18,A(3,2)在位置28,试求A(4,5)的位置?(此处设矩阵都是按第一个元素为A(1,1))

    解析:由LocA(3,2)的位置大于LocA(2,3)可知A数组是按列方式存储;且a=LocA(1,1)=2

    由按列保存的公式的:

    a+n*(2-1)*d+(3-1)*d=18

    a+n*(3-1)*d+(2-1)*d=28

       解之d=2,n=6

    LocA(4,5)=2+6*(4-1)*2+(5-1)*2=46



    范例: 二维数组A(1:5,1:6),如果以列存放,则A(3,3)在此数组中的第几个位置(a=0,d=1)

    LocA(3,3)=0+6*(3-1)*1+(3-1)*1=14,所以在数组的第14个位置;






  • 相关阅读:
    [软件工程基础]第 1 次个人作业
    [软件工程基础]个人项目 数独
    [2017BUAA软件工程]第0次个人作业
    [2017BUAA软工]第零次作业
    NoSQL-流式数据处理与Spark
    C、JAVA存储管理不同点
    数据库之一窥数据库系统
    Java单元测试-覆盖率分析报告自动生成
    Java单元测试-快速上手Junit(进阶)
    Java单元测试-快速上手Junit
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/5303254.html
Copyright © 2011-2022 走看看