这里写自定义目录标题
1、递归
第一步找公式,第二步写结束条件
#include<stdio.h>
//上楼梯问题
int step(int n)
{
if (n == 1 || n == 2)
{
return n;
}
return step(n-1) + step(n - 2);
}
int main() {
int n;
scanf_s("%d", &n);
step(n);
return 0;
}
2、结构体结构体指针
2.1、声明一个结构体类型的一般形式
struct 结构体名 {
成员列表;
}
#include<stdio.h>
#include<stdlib.h>
//结构题的类型
struct student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};//结构体声明,注意最后一定要加分号
//结构体的大小68个字节
//cpu取地址不满4对齐
//对齐的目的是使提高cpu访问内存的效率
int mian()
{
struct student s = { 1001,"lele",'m',19,98.5,"shenzhen" };// 初始化操作
struct student sarr[3];//结构体数组
int i;
printf("%d %s %c %d %5.2f %s\n", s.num, s.name, s.sex, s.score, s.addr);
for(i = 0; i < 3;i++)
{
scanf("%d %s %c %d %f %s",&sarr[i].num,sarr[i].name,sarr[i].addr);//直接写成数组
}
return 0;
}
2.2、结构体指针的使用
#include<stdio.h>
#include<stdlib.h>
//结构题的类型
struct student {
int num;
char name[20];
char sex;
};
int main()
{
struct student s = { 1001,"wangle",'M' };
struct student* p;//不用用点 因为指针优先级低于.
p = &s;
printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex);
printf("%d %s %c \n", p->num, p->name, p->sex);
return 0;
}
2.3 typedef 的使用
起别名
typedef struct student{
int num;
char name[20];
char sex;
}stu,*pstu; //可以起两个别名
对int 起别名,为了做到代码既注释
#include <stdio.h>
typedef struct student {
int num;
char name[20];
char sex;
}stu, * pstu; //可以起两个别名,叫stu 结构体指针的名称叫pstu;
typedef int INTEGER;
int main() {
stu s = { 1001,"wangle",'M' };
pstu p; //stu*p1 ,那p1也是一个结构体指针
INTEGER i = 10;
p = &s;
printf("i=%d,p->num=%d\n", i, p->num);
}
2.3 c++的引用
int a;
void modifynum(int &b){
++b;
}
把&写到形参的位置是c++的语法,称为引用
#include<stdio.h>
void modifynum(int& b)
{
b = b + 1;
}
int main()
{
int a = 10;
modifynum(a);
printf("a=%d\n", a);
return 0;
}
//把&写到形参的位置是c++的语法,被称为引用,这时候操作b在主函数里面使用和a等价的
出现不能将 void 类型的值分配到int型 说明要强制类型转换
#include<stdio.h>
#include<stdlib.h>
void modifynum(int& b)
{
b = b + 1;
}
void modify_pointer(int*& p)//相当于二级指针吧
{
p = (int*)malloc(20);
p[0]=5;
}
int main()
{
int a = 10;
modifynum(a);
printf("a=%d\n", a);
int* p = NULL;
modify_pointer(p);
return 0;
}
*int &P 相当于二级指针
3、逻辑结构与存储结构
3.1逻辑结构
数据之间的逻辑关系 抽象的
分为集合结构 无关系
线性结构 一对一
树形结构 一对多
图形结构 多对多
3.2存储结构
数据结构在计算机中的表示 具体的
顺序存储 顺序结构每个元素都是挨着的
链式存储 数据是跳跃的不是挨着的
索引存储
散列存储
计算机只存在顺序存储和链式存储