数据结构 前言
2015-09-13 22:16
357 查看
# 数据结构 前言
一直想好好学学数据结构,但一直也没怎么静下心的钻研。以前为了找工作,看了郝斌老师的数
据结构的视频,也照着视频上的
代码自己敲了一遍,一年过去了,忘记的差不多了,想抽空再好好的复习一下,结合郝斌老师的
视频和高一凡老师的《数据结构》算法实现及解析尽量多敲一点代码。废话不多说,开始正题。
1. 数据结构
什么是数据结构,数据结构是我们如何把现实中问题抽象成特定的数据类型并用某种存储结构存
储在内存中 ,在此基础上运用合适的算法解决问题。说白了,数据结构就是提供用一种能正确表
达实际问题的方法把数据存储在内存中。
数据结构 = 个体 + 个体的关系
2. 算法
算法是解决问题的方法和步骤
衡量算法的标准
a 时间复杂度
大概执行的次数
b 空间复杂度
算法执行过程中大概所占用的最大内存
c 难易程度
d 健壮性
算法 = 对存储数据的操作
3.C语言知识预备
习C语言,所以我觉得差多了就行了,哈哈。。。
a 地址
地址就是内存单元的编号 范围是0-2的32次方(0-FFFFFFFF)
b 指针
指针保存了某个变量的地址,而指针本身其实也是一个变量,它也有自身的地址, 而指针的
内容是某个变量的地址,指针变量是存放内存单元地址的变量。
内存是有地址的,就像每个具体的地方都对应了唯一一个地址一样。通俗的讲,指针就是地址,地址就是指针。
c 结构体
结构体是为了表示一些复杂的数据,普通的基本类型无法满足的,后面会讲到链表,当中就
能用到结构体。
结构体是一种数据类型,跟char,int等基础类型差不多,都是修饰数据类型的,不同的是
结构体是基础类型的杂交,是复合数据类型。
d 动态分配内存
动态内存分配和释放(动态分配的内存一定要手动释放,否则造成内存泄露。)
一直想好好学学数据结构,但一直也没怎么静下心的钻研。以前为了找工作,看了郝斌老师的数
据结构的视频,也照着视频上的
代码自己敲了一遍,一年过去了,忘记的差不多了,想抽空再好好的复习一下,结合郝斌老师的
视频和高一凡老师的《数据结构》算法实现及解析尽量多敲一点代码。废话不多说,开始正题。
1. 数据结构
什么是数据结构,数据结构是我们如何把现实中问题抽象成特定的数据类型并用某种存储结构存
储在内存中 ,在此基础上运用合适的算法解决问题。说白了,数据结构就是提供用一种能正确表
达实际问题的方法把数据存储在内存中。
数据结构 = 个体 + 个体的关系
2. 算法
算法是解决问题的方法和步骤
衡量算法的标准
a 时间复杂度
大概执行的次数
b 空间复杂度
算法执行过程中大概所占用的最大内存
c 难易程度
d 健壮性
算法 = 对存储数据的操作
3.C语言知识预备
因为郝斌老师讲数据结构课程中用的是C实现的,如果没有C语言的基础,可以看看他的[《郝斌C语言详细笔记(附源码)》](http://download.csdn.net/detail/wangjinxiang1/9103297),我学习数据结构的目的是锻炼一下自己的程序思维,并不是为了学
习C语言,所以我觉得差多了就行了,哈哈。。。
a 地址
地址就是内存单元的编号 范围是0-2的32次方(0-FFFFFFFF)
b 指针
指针保存了某个变量的地址,而指针本身其实也是一个变量,它也有自身的地址, 而指针的
内容是某个变量的地址,指针变量是存放内存单元地址的变量。
内存是有地址的,就像每个具体的地方都对应了唯一一个地址一样。通俗的讲,指针就是地址,地址就是指针。
#inclued<stdio.h> void showArray(int *p,int len){ } int main(void){ int a[5]={1,2,3,4,5}; showArray(a,5); //a等价于&a[0],也就是表示a数据的第一个值得地址,&a[0]本身的类型是int *类型 return 0; }
c 结构体
结构体是为了表示一些复杂的数据,普通的基本类型无法满足的,后面会讲到链表,当中就
能用到结构体。
结构体是一种数据类型,跟char,int等基础类型差不多,都是修饰数据类型的,不同的是
结构体是基础类型的杂交,是复合数据类型。
#include <string.h> # include <stdio.h> #include<windows.h> //避免一闪而过 //申明struct Student类型 struct Student { int sid; char name[200]; int age; }; int main(void) { struct Student st = {1000,"zhangsan",20}; printf("%d,%s,%d\n",st.sid,st.name,st.age); st.age=25; st.sid=100000; strcpy(st.name,"list"); printf("%d,%s,%d\n",st.sid,st.name,st.age); system("pause"); //避免一闪而过 return 0; }
d 动态分配内存
动态内存分配和释放(动态分配的内存一定要手动释放,否则造成内存泄露。)
#include <stdio.h> #include <malloc.h> #include <windows.h> int main(void) { int len; printf("请输入您需要分配数组的个数!"); scanf("%d",&len); int *pArr = (int*)malloc(sizeof(int)*len); *pArr = 4; //等同于pArr[0]=4 pArr[1]= 5; printf("%d,%d\n",*pArr,pArr[1]); free(pArr); system("pause"); //避免一闪而过 return 0; }
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- qqwry.dat的数据结构图文解释第1/2页
- JavaScript中数据结构与算法(五):经典KMP算法