第一范文网 - 专业文章范例文档资料分享平台

郝斌数据结构自学笔记--知识点+程序源代码

来源:用户分享 时间:2025/5/17 5:07:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

郝斌数据结构自学笔记

--知识点+程序源代码

2015.12 By-HZM

1_什么叫做数据结构 数据结构概述 定义

我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法。

数据结构=个体的存储+个体的关系存储 算法=对存储数据的操作

2_衡量算法的标准 算法

解题的方法和步骤

衡量算法的标准

1)时间复杂度:大概程序执行的次数,而非执行的时间 2)空间复杂度:算法执行过程中大概所占用的最大内存 3)难易程度 4)健壮性

3_数据结构的特点 数据结构的地位

数据结构是软件中最核心的课程

程序=数据的存储+数据的操作+可以被计算机执行的语言

4_预备知识_指针_1 5_预备知识_指针_2 指针的重要性:

指针是C语言的灵魂 定义: 地址:

地址是内存单元的编号,从0开始的非负整数,范围:0-FFFFFFFF【0-4G-1】 CPU=====地址线,控制线,数据线=====内存 指针:

指针就是地址,地址就是指针。

指针变量是存放内存单元地址的变量。 指针的本质是一个操作受限的非负整数。

分类:

1.基本类型的指针 2.指针和数组的关系

变量并不一定连续分配,随机分配内存。

内存:

内存是多字节组成的线性一维存储空间。 内存的基本划分单位是字节。

每个字节含有8位,每一位存放1个0或1个1. 内存和编号是一一对应的。

软件在运行前需要向操作系统申请存储空间。在软件运行期间,该软件所占空间不再分配给其他软件。当软件运行完毕后,操作系统将回收该内存空间(操作系统并不清空该内存空间中遗留下来的数据)。

NOTE:1)指针变量也是变量,普通变量前不能加*,常亮和表达式前不能加&。

2)局部变量只在本函数内部使用。

如何通过被调函数修改主调函数中普通变量的值。

1)实参为相关变量的地址;

2)形参为以该变量的类型为类型的指针变量;

3)在被调函数中通过 *形参变量名的形式的形式就可以修改主函数。 CASE 1

#include

int main(void) { //

int *p; //p是个变量名字,int*表示该p变量只能存储int类型变量的地址 int i=10; int j; j=*p;

//error,p未指定

// printf(\

// char ch='A';

// p=&ch; //error,类型不一致 p=&i; //p保存i的地址,p指向i;修改p的值不影响i的值,修改i的值不影响p的值;任何场合下,*p和i可以互换。*p等价于i。 //p=10; //error j=*p;//等价于j=i; printf(\ return 0;

}

CASE 2

#include

void f(int * i)//不是定义了一个名字叫做*i的形参,而是定义了一个形参,该形参名字叫做i,它的类型是int* { *i=100; }

int main(void) { int i=9; f(&i); //局部变量只在本函数内部使用。 printf(\}

指针和数字

数组名:一维数组名是个指针变量,它存放的是一维数组第一个元素的地址,它的值不能被改变,一维数组名指向的是数组的第一个元素。 CASE 1

a[3]==*(3+a); 3[a] ==*(a+3)==*(3+a); int a[5]={1,2,3,4,5};

Show_Aarry(a,5);//a等价于&a[0],&a[0]本身就是int*类型

void Show_Array(int * p,int len) { Int I; //P[2]=-1;// p[0]=*p ; p[2]==*(p+2)==*(a+2)==a[2] ; p[i]就是主函数的a[i]

for (i=0;i

指针变量的运算

指针变量不能相加,不能相乘,不能相除。 如果两指针变量属于同一数组,则可以相减。

指针变量可以加减一整数,前提是最终结果不能超过指针变量 p+i的值是p+i*(p所指向的变量所占的字节数) p-i的值是p-i*(p所指向的变量所占的字节数) p++<==>p+1 p--<==>P-1

6_所有的指针变量只占4个子节用第一个字节的地址表示整个变量的地址 CASE 1 double *p;

double x=66.6; //一个double占8个字节

p=&x;//x占8个字节,1个字节是8位,1个字节一个地址,p内只存放了一个地址,通常是字节的首地址

double arr[3]={1.1,2.2,3.3}; double *q; q=&arr[0];

printf(“%p\\n”,q); //%p实际就是以十六进制输出 q=&arr[1];

q=printf(“%p\\n”,q); //p,q相差8

无论指针指向的变量占多少个字节,指针变量统一都只占4个字节

7_如何通过函数修改实参的值 发送地址

CASE 1 修改指针变量的值,只能修改地址 void f(int **); int main(void) { int i=9; int *p=&i;// *p;p=&i; printf(“%p\\n”,p); f(&p);

printf(“%p\\n”,p); return 0; }

//void f(int *q) //{

// q=(int *)0xffffffff; //错误,不会改变p的值 //}

void f(int ** q) { *q=(int *)0xffffffff; }

8_结构体的使用概述 结构体

为什么会出现结构体:

为了表示一些复杂的数据,而普通的基本类型变量无法满足要求 什么叫做结构体:

结构体是用户根据实际需要自己定义的复合数据类型 如何使用结构体:

两种方式——

郝斌数据结构自学笔记--知识点+程序源代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7yat22o54u5nrao1skn8_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top