if时间复杂度c++_数据结构:谈谈时间复杂度,以及cc++中的形参带&和*的区别...

马上期末考试,从头复习一下数据结构。

------------------------------------分割线-----------------------------------

基本概念

数据:输入计算机的一切,都可以看作是数据。

数据元素:数据的基本单位,数据元素比较复杂时,可以分割成很多数据项数据项是数据的最小不可再分单位。

数据结构:数据元素之间具有的某些关系。如,集合,线性表,树,图。

逻辑结构与物理结构:计算机里面的真实存储,就是物理结构(也叫映像)。逻辑结构包括顺序存储和链式存储

算法的性质:有穷性,可行性,确定性,输入,输出

构造算法:正确性,效率,可读性,健壮

时间复杂度

在算法中可以用循环最内层的语句,即语句频度来表示算法的复杂程度。T(n)=O(f(n)),

其中,T表示的语句频度,n表示算法的规模,f(n)是一个函数。

常见的f(n)函数的增长速率为:

O(1)<O(logn)<O(根号n)<O(nlogn)<O(2^n)<O(n!)<O(n^n)

72cc9d11c593010f721ce49e4131f474.png

&与*的区别

首先,我们来看一个经典例子,交换两个数的值。

// DataStructure LinearTable.cpp : 定义控制台应用程序的入口点。
//交换a,b值

#include "stdafx.h"
#include "stdio.h"
void  Test(int a, int b)
{
	int  temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a=1;
	int b=2;
	Test(a, b);
	printf("%d,%d", a, b);
    return 0;
}

结果为:1,2

dfd5e4ac9bf3a2d4a0dbcf442c76cf16.png

可见,实参的值并没有被改变。

这里顺便说一下:c/c++中,内存分为以下几个区:

1.栈区,存放参数,局部变量和数组等;

2.堆区:程序员可以控制的区域,记得用完要回收释放,否则越来越少;malloc函数进行分配

3.二进制数区:存放代码;

4.全局区:存放静态变量,以及全局变量;一部分存放初始化的变量,一部分存放未初始化的变量

5.常量区:存放常量

使用*

#include "stdafx.h"
#include "stdio.h"
void  Test(int *a, int *b)
{
	int  temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{
	int a=1;
	int b=2;
	Test(&a,&b);
	printf("%d,%d", a, b);
    return 0;
}

df6c53ae7448937860b6905df24e800b.png

可见,使用地址传值,交换成功。

使用&

#include "stdafx.h"
#include "stdio.h"
void  Test(int &a, int &b)
{
	int  temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a=1;
	int b=2;
	Test(a,b);
	printf("%d,%d", a, b);
    return 0;
}

5209a225d92027faea53622b28200019.png

可见,输出结果换向。

*与&的区别

*是进行取址,而&则是c++中引用的概念,就是说&+形参表示的是此变量是实参的一个别名,当调用该函数时,并没有给这个形参分配内存,而是直接使用的实参。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值