-------第一讲----第一节-------------- 1 基本概念-----------------什么是数据结构--------------

数据结构(date structure)是计算机中储存,组织数据的方式.通常情况下,精心选择的数据结构可以带来最优效率(短小精悍)的算法.---------------------数据结构和算法是紧密相关的.

例一:  怎样在书架上放置一些书籍(给了你一些数据和一些储存空间你应该怎样将这些数据储存起来)?

思考时间:----------------------------------------------------------;

放置图书需要注意的问题:

操作1:新书怎么插入?

操作2:怎么找到一本特定的书?

--------------------------------------下面是我的想法------------------------------------

1:按照数据从小到大的顺序以数组的方式(在物理地址上连续的储存).(物理结构)

2:按照数据从小到大的顺序以链表的方式储存.

-----------讲解----------------------放置图书----------------------------------------------------

1:随便放.

操作1:那里有空放哪里.....

操作2:  累成哮天犬........

2按照书名拼音顺序摆放...

操作1:缺点:适用于不经常变动的有序表...插入和删除比较困难.

操作2:二分查找   优点:速度快.比较的次数少. 0

3:将书架划分成几块区域,每块区域指定摆放某一类图书.(对第二种方法的优化)

问题:

    1:空间怎么分 ?     每一类多大的区域 ?  防止浪费...防止不断加书柜.

    2:类别分多细 ?    太细的话...太粗略的话.....

----------------------------参考咱们学校的方法--------------------------------

可以先进行大类的分类,然后按字母顺序排列,最后将索书号一一编辑放入一个软件中,将其信息填入软件(哪个馆区、哪一排、那一层…

=========================我是大分割线=====================================

写程序实现一个函数print,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数.

//循环实现
#include<stdio.h>
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("%d\n",i);
    }
    return 0;
}
//我输入100000的时候程序崩了.
#include<stdio.h>
int print(int n);
int main()
{
    int n,i;
    scanf("%d",&n);
    print(n);
    return 0;
}
int print(int n)
{
    if(n)
    {
        print((n-1));
        printf("%d\n",n);
    }
}

作为人类你喜欢写递归程序,但是计算机特别不想跑递归.(递归占用空间吓死人.)

-----------------------------------------上面的递归为什么崩了?---------------------------------------

上面的递归占用空间太多,以至于在空间吃完之后还想吃空间导致自己爆了.

---------------------------------------------------------------------------------------------------------

==========================我是大分隔符==================================

写程序 计算给定多项式在定点X处的值.

F(x)=a0+a1*x+a2*x+~~~~~~~~+a n-1 *x ^n-1  +a n x^n;

//很人性化,简单易懂.....但是蠢的要死.
//其思想是   一个一个相加得出最后的结果
#include<stdio.h>
#include<math.h>
int main()
{
    int a[11111],x,n,j,b,c,p,i;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        scanf("%d",&x);
        for(p=a[0],i=1;i<=n;i++)
        {
            p=p+a[i]*pow(x,i);
        }
        printf("%d\n",p);
    }
    return 0;
}

--------------------------------------几千年前 秦九韶  就想出来了一个更好的算法下面附上代码---------------------

#include<stdio.h>
#include<math.h>
int main()
{
    int a[11111],x,n,j,b,c,p,i;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        scanf("%d",&x);
        for(p=a[n],i=n;i>0;i--)
        {
            p=a[i-1]+x*p;
        }
        printf("%d\n",p);
    }
    return 0;
}

利用了结合律........

-------为什么说第二个函数实现的比较好,第一个函数就应该受到鄙视呢?-----下面给出原因-----------

在程序的运行过程中发现当给的数值比较大的时候    第二个的时间复杂度远远低于第一个函数.

 

#include<stdio.h>
#include<time.h>
clock_t start ,stop;//clock_t是clock()函数返回的变量类型.
double duration;//记录被测函数运行时间,以秒为单位
int main()
{
    start=clock();//开始计时.
    myfunction();
    stop=clock();//结束计时
    duration=((double)(stop-start)/CLK_TCK);
    //其余的不再计时范围内......
    return 0;
}

 

具体代码自己下去实现...........(如果处理的东西比较少的话系统是捕捉不到时间的   那时候时间就是0.所以你要输入足够多的数字....)

最后结果显示他们错了一个数量级.第二个程序大概比第一个快10倍.由此可以看出  解决问题的效率和算法的巧妙度有关

 

-------------------------------------------------------------------------------------------------------

所以说了半天 到底啥是数据结构..呵呵 ..自己体会吧....

 

 

 

 

 

 

 

 

汗.还是回来补充一下吧.......

数据结构

1:数据结构是数据对象在计算机中的组织方式(类似于上述所讲的  书在图书馆中的存放方式.)

2:数据对象必定与一系列夹在其上的操作相关联.

   /////完成这些操作所用的方法就叫做算法.

posted @ 2015-12-27 13:47  X-POWER  阅读(318)  评论(0编辑  收藏  举报