为什么要用typedef
关键字typedef的使用
#include<stdio.h>
typedef struct student {
int num;
char name[20];
char sex;
}stu, * pstu;//stu=struct student,用于定义结构体变量;pstu=struct student*,用于定义结构体指针变量
typedef int INTEGER;//对int起别名,为了代码即注释
int main() {
//定义结构体变量并初始化
stu s = { 2019,"shuaishuai",'m' };
//定义结构体指针变量
pstu p;//pstu=struct student*
p = &s;//对结构体s取地址,赋值给p
INTEGER i = 10;//等于int i0;
printf("%d %d %s %c", i, p->num, p->name, p->sex);
return 0;
}
C++的引用
用于在子函数修改主函数的值,使用比较方便。
//C++引用
#include<stdio.h>
void modifynum(int& a) {
//把&写到形参的位置是C++的语法,称为引用。
//在子函数操作a和在主函数操作a是等价的。
a = a / 2;
}
void modifypointer(int*& p) {
//在子函数中操作一级指针和在主函数中操作是一样的
p = (int*)malloc(20);//p指向20个字节的空间
p[0] = 6;
}
int main() {
int a = 10;
modifynum(a);//调用modifynum函数
printf("%d", a);
modifypointer(p);
return 0;
}
//C语言实现在子函数中操作主函数中某一变量的值
#include<stdio.h>
void modifynum(int* a) {
//a为指针变量,存放的是地址,*a表示对a取值
(*a) = (*a) / 2;
}
void modifypointer(int** p) {
**p += 2;//二级指针
}
int main() {
int a = 10;
modifynum(&a);//调用modifynum函数
printf("%d", a);
modifypointer(&p);
return 0;
}
作业:在主函数定义字符指针 char *p,然后在子函数内malloc申请空间,通过fgets读取字符串,然后在主函数中进行输出;要求子函数使用C++的引用,注意在C++中从标准输入读取字符串,需要使用fgets(p,100,stdin)。
#include<stdio.h>
#include<stdlib.h>
void red(char*& p) {
p = (char*)malloc(100);//申请100个字节的空间
fgets(p, 100, stdin);//标准读入
}
int main() {
char* p = NULL;//定义指针变量
red(p);//调用子函数
puts(p);//输出读取的内容
return 0;
}
逻辑结构与存储结构
逻辑结构: 数据元素之间的逻辑关系—抽象的。包括集合结构(无关系)、线性结构(一对一)、树形结构(一对多)、图形结构(多对多)。对人友好。
优点:1.可以实现随机存储。2.每个元素占用最少的空间。缺点:只能使用整块的存储单元,会产生较多的碎片。
存储结构: 数据结构在计算机中的表示—具体的。包括顺序存储(数组)、链式存储、索引存储、散列存储。对计算机友好。
优点:充分利用所有的存储单元,不会出现碎片现象。缺点:1.需要额外的存储空间来存放下一结点的指针。2.只能实现顺序存取。
算法
定义:对特定问题求解步骤的描述
特性:有穷、确定、可行、输入、输出
时间复杂度:指算法中所有语句的频度(执行次数)之和。
空间复杂度:指算法在运行过程中所使用的辅助空间的大小。
算法原地工作是指算法所需的辅助空间是常量,即O(1)。