王道数据结构c语言中级阶段第一课

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逻辑结构

数据之间的逻辑关系 抽象的

分为集合结构 无关系

线性结构 一对一

树形结构 一对多

图形结构 多对多

image-20220522183037290

3.2存储结构

数据结构在计算机中的表示 具体的

顺序存储 顺序结构每个元素都是挨着的

链式存储 数据是跳跃的不是挨着的

索引存储

散列存储

计算机只存在顺序存储和链式存储

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值