-------第一讲----第一节-------------- 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:数据对象必定与一系列夹在其上的操作相关联.
/////完成这些操作所用的方法就叫做算法.