数据结构 一


读郝斌——数据结构笔记


/*

2012/4/5
*/
数据结构
1. 数据结构的定义
2. 预备知识
3. 模块一:线性结构(数组和链表,两种常见应用:队列和栈)
4. 专题:递归(递归和循环的转换、求阶乘、汉诺塔、走迷宫)
5. 模块二:非线性结构(树、图)
6. 模块三:查找和排序(折半、以及最常见的五种排序方法)


数据结构:
什么叫数据结构?
把实际问题转换为特定的数据类型,并且采用一种存储结构来组织这类大量的数据 保存在内存中,以及在此基础上为实现某个功能而编写的程序 就叫 数据结构
那么,为实现某个功能而编写的代码我们就成为算法

衡量算法的标准:
1. 时间复杂度——大概程序执行的次数
2. 空间复杂度——大概占用的最大内存
3. 算法的难易程度
4. 健壮性——非法输入

 

 

好了,上面就是让大家轻松轻松,我们来讲讲数据结构的预备知识
我们之前有学过C语言,其实这个数据结构的预备知识就是对C语言的复习

好,来C语言的复习
一、 指针
二、 结构体
三、 动态内存分配

指针
/*
基本类型的指针
*/
# include <stdio.h>
int main()
{
int i;
int  *j  =  &i ;    //定义一个 int * 类型(叫做int类型的指针)的变量 j 指向 i的地址
i = 5;
printf(“%d ”, *j);
return 0;
}

 


# include <stdio.h>
void f(int i)
{
    i = 100;
}

int main( void )
{
    int i = 9;
    f(i);
   
    printf("%d",i);
    return 0 ;

}

//f函数的i和main函数的i是用一个栈来压入的,所以不存在压的方式,所以不能够相互访问
地址的概念


# include <stdio.h>
void f(int* i)  //定义了一个形参,改形参名字是 i,类型 :int*
{
    i = 100;
}

int main( void )
{
    int i = 9;
    f( &i );   //把这个i的地址发送给另外一个i
   
    printf("%d",i);
    return 0 ;

}

 


CPU 只能访问内存,所以要先把硬盘的东西导入内存
通过 地址总线 、 控制线、 数据线 来访问 内存
地址线是确定是哪个单元
控制线是确定读还是写
数据线是和CPU进行交互

地址就是内存单元的编号
从0开始的非负整数
范围: 0 — FFFFFFFF 【0 - 4G-1】

指针:
     指针就是地址
     指针变量 是存放地址的变量
     指针的本质就是一个操作受限的非负整数//操作受限:不能加乘除,只能在某些情况下进行相减
    
    

/*
指针和一维数组的关系
*/

# include <stdio.h>
 
int main(void )
{
    int a[5] = {1,2,3,4,5};
    //一维数组名a 存放的是数组的第一个元素的地址
    //a 是一个指针常量! 一般我们说常量都是一开始就赋值了之后不可改变
   
   
    a[1] == *(a+1)
    a[3] == *(3+a)
    a是第一个,3是第三个, *就是本身
   
    p+i 的值是 p+i*字节数
   
   
   
   
    return 0;

}

#include <stdio.h>

//参数要写两个,第一写元素首地址,第二写数组元素个数
//void array(int a[],int n)
void array(int *p,int n)
{
   *(3+p) = -1;
   
}


int main(void)
{
   int a[5] = {1,2,3,4,5};
   array(a,5);
  
   printf("%d",a[3]);
   return 0;
}

 

posted @ 2012-04-10 19:52  喜欢阿亮的小水  阅读(331)  评论(0编辑  收藏  举报