一、数据类型
1、基本数据类型
int、long、unsigned int、unsigned long、long long
char
float、double
int a,b,c;
a = 1;
b= 2;
c = a+b;
char s;
s = 'a';
float f;
f = 3.1415;
2、结构体类型,struct关键字
struct Student
{
int num;
char name[20];
float score;
}
struct Student s1;
s1.num = 1;
3、typedef方式
typedef struct Student
{
int num;
char name[20];
float score;
}Student;
Student s1;
s1.num = 1;
4、变量指针*
保存变量指针的变量称为“变量指针”;
int *a;
int b = 2;
a = &b;
*a = 3; //b= 3;
char *s;
char d = 'str';
s = &d;
*s = 'ssss'; //d = 'ssss'
Student *s1_p;
Student s2;
s1_p = &s2;
s2.num = 11;
(*s1_p).score = 100;
//等同于
*s1_p->score = 200;
5、函数,及参数会不会被修改,使用&就改变,数组也会改变
void fun(int num)
{
num++;
}
int a = 1;
fun(a);
printf("%d", a) //a=1不改变
//改变
void fun2(int &num)
{
num++;
}
//改变
void fun3(int a[])
{
a[0]++;
}
int a[10];
a[0] = 0;
func3(a) //a[0] = 1;
三、动态分配内存
1、使用malloc函数分配空间
函数原型: void *malloc(unsigned int size);
函数作用:在内存的动态存储区中分配一个长度为size的连续空间,并返回所分配的第一个字节的地址。
float *f = (float *)malloc(4);
char *s = (char *)malloc(1);
Student *s1_p = (Student *)mallo(??); //此时计算不出内存长度
使用sizeof配合malloc函数分配空间。
sizeof定义:是测量类型或者变量长度的运算符。
float *f = (float *)malloc(sizeof(float));
char *s = (char *)malloc(sizeof(char));
Student *s1_p = (Student *)mallo(sizeof(Student));
//
int num1 = sizeof(float); //4
int num2 = sizeof(char); //1
int num3 = sizeof(Student); //代码运行后会得到数字
2、使用free函数释放空间
函数原型: void free(void *p);
函数作用:释放指针p所指向的动态空间,使这部分空间可以被其他变量使用。
float *f = (float *)malloc(sizeof(float));
char *c = (char *)malloc(sizeof(char));
Student *s1_p = (Student *)malloc(sizeof(Student));
free(*f);
free(*c);
free(*s1_p);
四、数据结构中常见代码段实例
例如:单链表结点描述与初始化
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LNode *node1 ; // 等同 LinkList node1;
int InitLinkList(LinkList &L)
{
L = (LNode *)malloc(sizeof(LNode));
if(L!==NULL)
{
return 1;
}else{
return 0;
}
}
LinkList L;
if(InitLinkList(L)==0)
{
printf("error");
}else {
....
}
4、数据结构的概念与三要素
一、数据结构:一个值的集合以及定义在此集合上的一组操作的总称。
1、原子类型:其值不可再分的数据类型,(例如整型、字符型)
2、结构类型:由若干成分按某种结构组成的,其值可被拆分(例如Student、Frog);
3、抽象数据类型:抽象数据组织与之相关的操作。
抽象数据类型(Abstract Data Type):ADT指一个数学模型以及定义在该模型上的一组操作。通常使用数据对象、数据关系、基本操作集三元祖表示。
二、数据结构的三要素:
1、数据的逻辑结构。指数据元素之间的逻辑关系。与数据的存储无关。分为线性结构和非线性结构。
线性结构:线性表、栈、队列、串、数组、广义表。
非线性结构:树、图、集合。
2、数据的存储结构。指数据在计算机中的表示,也称物理结构。存储结构是逻辑结构在计算机中的实现。
分为4类:顺序存储、链式存储、索引存储、散列存储(也称hash存储)。
3、数据的运算。施加在数据上的运算(包括定义、实现)。包含增删改查排序。
运算的定义是针对逻辑结构。
运算的实现是针对物理结构。
五、算法和时间复杂度
定义:对特定问题求解步骤的一种描述,是指令的有限序列。
算法的5个基本特征:有穷性、确定性、可行性、输入、输出。
好的算法应考虑的目标:正确性、可读性。
1、算法的效率度量:时间复杂度、空间复杂度。
时间复杂度:一个语句的频度指语句在算法中被重复执行的次数。
算法中所有语句的频度之和记作T(n).
通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度
T(N)=O(f(n));
空间复杂度:算法所耗费的存储空间g(n).S(n)=O(g(n))