数据结构--summary--c语言版

数据结构=个体+个体关系
算法=对存储数据的操作
算法:解题的方法和步骤

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

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

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

在这里插入图片描述

1.p保存i的值,p就指向i
2.修改p的值不影响i,修改i的值不影响p
3.*p就代表i

int j,*p;如果不写p=&i,
j=*p就代表一个不确定的单元,不能这么写
#include<stdio.h>
int main()
{
    int *p,i;
    i=10;
       p=&i;
    printf("%d %p",*p,p);
 }
 输出结果为10 0060FEF8
 第一个值*p=i=10;
 第二个值p在我的电脑上的存的i的地址

1.如果一个指针变量(假定为P)存放了某个普遍变量(假定为i)的地址,那我们就可以说“p指向i”,但p与i是两个不同的变量
2.修改p的值不影响i,修改i的值不影响p
3.*p等价于i,或者说 [*p]可以与i在任何地方互换
4.如果一个指针变量指向一个普通变量,则*指针变量就完全等价于该普通变量

注意:
1.指针变量也是变量,只不过他存放的只能是内存单元的地址,不能是内存单元的内容
2.普通变量前不能加*
3.常量和表达式不能加 &

#include<stdio.h>
void f(int i)
{
i=100;
}
int main()
{
 int i=9;
 f(i);
 printf("%d",i);
 }
 输出结果为9

so 如何通过被调函数修改主调函数中普通变量的值呢
#include<stdio.h>
void f(int *p) //第二步
{
  *p=100; //第三步
}
int main()
{
 int i=9;
 f(&i);  //第一步
 printf("%d",i);
}
输出结果为 100

so  way:
第一步:实参为相关变量的地址
第二步:形参为以该变量的类型为类型的指针变量
第三步:在被调函数中通过 *形参变量名  的方式可以修改主调函数
中的普通变量的值

在这里插入图片描述

指针和一维数组
一维数组名是个指针变量,它存放的是第一个元素的地址,它的值不能改变;
a[i]<==>*(a+i)
在这里插入图片描述

假设指针变量的名字为p
则p+i的值是p+i *
指针 变量的运算:
1.指针变量不能相加,不能相乘,不能相除
2.如果量指针变量属于同一数组,则可以相减
3.指针变量可以加减一整数,前提是结果不能超过指针

*(a+3)等价于a[0]+3
#include<stdio.h>
void show(int *p,int n)
{
p[0]=-1;//p[0]=*p; p[i]就是主函数的a[i],p[2]==*(p+2)==*(a+2)
}
int main()
{
int a[5]={1,2,3,4,5};
  show(a,5);  //a等价于取地址a[0],&a[0]本身就是 int *类型
    printf("%d\n",a[0]);
}
输出结果为  -1
so如何通过被调函数修改主调函数的中一维数组的值?
方法:
1.存放数组首元素的指针变量
2.存放数组元素长度的整形变量
 #include<stdio.h>
 {
 double *p;
    double x=66.6;
    p=&x;//x占8个字节,1个字节一个地址
    double arr[3]={1.1,2.2,3.3};
    double *q;
    q=&arr[0];
    printf("%p\n",q);
    q=&arr[1];
     printf("%p\n",q);
         q=&arr[2];
     printf("%p\n",q);    
}
输出结果:
0060FED8
0060FEE0
0060FEE8
地址之间差8
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值