马上期末考试,从头复习一下数据结构。
------------------------------------分割线-----------------------------------
基本概念
数据:输入计算机的一切,都可以看作是数据。
数据元素:数据的基本单位,数据元素比较复杂时,可以分割成很多数据项,数据项是数据的最小不可再分单位。
数据结构:数据元素之间具有的某些关系。如,集合,线性表,树,图。
逻辑结构与物理结构:计算机里面的真实存储,就是物理结构(也叫映像)。逻辑结构包括顺序存储和链式存储
算法的性质:有穷性,可行性,确定性,输入,输出
构造算法:正确性,效率,可读性,健壮
时间复杂度
在算法中可以用循环最内层的语句,即语句频度来表示算法的复杂程度。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)
&与*的区别
首先,我们来看一个经典例子,交换两个数的值。
// 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
可见,实参的值并没有被改变。
这里顺便说一下: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;
}
可见,使用地址传值,交换成功。
使用&
#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;
}
可见,输出结果换向。
*与&的区别
*是进行取址,而&则是c++中引用的概念,就是说&+形参表示的是此变量是实参的一个别名,当调用该函数时,并没有给这个形参分配内存,而是直接使用的实参。