数据结构与算法(一)概论

1.定义:数据结构是一门研究非数值计算的程序设计问题中,操作对象以及他们之间关系和操作的学科。简单来说就是关系,就是数据元素相互之间存在一种或者多种特定关系的集合。
2.分类:逻辑结构和物理结构
逻辑结构:数据对象中数据元素之间的相互关系。
物理结构:是指数据的逻辑结构在计算机中的存储形式。
逻辑结构的分类:
a).集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系。
b).线性结构:线性结构中的数据元素之间是一对一的关系。
c).树形结构:树形结构中的元素之间存在一对多的层次关系。
d).图形结构:图形结构的数据元素是多对多的关系。
物理结构:
根据物理结构的定义,实际是研究如何把数据元素存储到计算机的存储器中。存储器主要是针对内存而言。
数据元素的存储结构有两种:顺序存储结构和链式存储结构。
顺序存储结构:
把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的,就如同编程中使用的数组。
链式存储结构:
在实际中由于顺序结构构造较为死板,不灵活。选用链式存储结构,是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。由于元素存储时是任意的,所以链式存储结构不能反映其逻辑关系,此时就需要用一个指针来存储数据元素的地址,这样就可以通过地址来找到相关的数据元素位置。
算法引入:
首先先看一下,通过使用for循环和直接计算结果所耗费时间:

DateTime now = DateTime.Now;      
            int a = 0;
            string Time = now.ToString("yyyy-MM-dd HH:mm:ss");
            double span1 =now.Second*1000 + now.Millisecond;
            for (int i = 0; i < 500000000; i++)
            {
                a = a + 1;
            }
            DateTime now1 = DateTime.Now;
            double span2= now1.Second * 1000 + now1.Millisecond;
            Console.WriteLine("使用for连加所用时间{0},所计算结果为{1}",span2-span1,a);
            DateTime now2 = DateTime.Now;
            double b = 0;
            b = 100000*5000;
            DateTime now3 = DateTime.Now;
            double span3 = now2.Second * 1000 + now2.Millisecond;
            double span4 = now3.Second * 1000 + now3.Millisecond;
            Console.WriteLine("直接计算所用时间{0},所计算结果为{1}",span4 -span3,b);

数据结构与算法(一)概论_第1张图片
实现同样的结果,用不同的方法他们所用的时间不同,所耗费的资源也不同。
算法是解决特定问题求解步骤的描述,在计算机中表示有限序列的指令,每条指令代表一个或者多个操作。不同的问题需要不同的算法,算法没有最好只有最适合。
算法的五个基本特征:输入(具有0个或者多个输入)、输出(至少有一个或多个输出)、有穷性(算法在执行有限的操作步骤后,自动结束而不会无限循环,需要在有限的周期内完成)、确定性(算法的每一个步骤都具有确定的含义,在一定条件下只有一条执行路径)、可行性(算法的每一步都必须是可行的,需在有限的时间周期内完成)。
算法设计的要求:
算法不是唯一的,同一个问题可以有多个算法:
1.正确性:具有输入、输出,能正确得到问题答案。有以下四个层次:
a).算法程序没有语法错误;
b).算法程序对于合法输入能够给出满足要求的输出;
c).算法结构对于非法输入能够给出满足规格的说明;
d).对于其他故意刁难的测试输入都有满足要求的输出结果;
2.可读性:能够便于其他开发人员理解和修改;
3.健壮性:当输入数据不合法时,算法也能做出相关处理,而不是异常奔溃。
4.时间效率高和存储量低:好的算法需要具备时间效率高和存储量低的特点。

你可能感兴趣的:(数据结构与算法,数据结构与算法)