数据结构概述
(1)数据结构定义
侠义的定义:
数据结构是专门研究数据存储的问题;
数据的存储包含两方面:个体的存储 + 个体关系的存储。
广义的定义:
数据结构既包含数据的存储也包含数据的操作;
对数据存储的操作就是算法。
(2)算法——对数据的操作
通俗定义:解题的方法和步骤;
狭义定义:
对存储数据的操作; 对不同的存储结构,要完成某一个功能所执行的操作是不一样的。
广义定义:广义的算法也叫做泛型(无论数据是如何存储的,对数据的操作都一样)。
泛型:
利用某种技术达到的效果:不同的存储方式执行的操作是一样的。
综上:
狭义的算法是与数据的存储方式密切相关 广义的算法是与数据的存储方式无关(这就是泛型思想)
(3)数据的存储结构有几种
①线性
连续存储(数组)
优点:存储速度很快;
缺点:事先必须知道数组的长度,插入删除元素很慢,空间通常是有限制的,需要大块连续的内存块。
离散存储(链表)
优点:插入删除元素效率高,不需要一个连续的很大的内存;
缺点:查找某个位置的元素效率低
线性结构的应用——栈
线性结构的应用——队列
②非线性
树
图
(4)预备知识——typedef关键字
示例1:
#include <stdio.h>
typedef int ZHANGSAN; //为int重新多取一个名字,ZHANGSAN等价于int
int main(void)
{
int i = 10; //等价于 ZHANGSAN = 10;
ZHANGSAN j = 20;
printf("%d %d", i, j);
return 0;
}
输出结果:10 20
示例2:
#include <stdio.h>
typedef int ZHANGSAN; //为int重新多取一个名字,ZHANGSAN等价于int
typedef struct Student
{
int sid;
char name[100];
char sex;
}ST;
int main(void)
{
//struct Student std; //等价于 ST std;
//struct Student * ps = &std; //等价于 ST * ps = &std;
//两种方式都可以写
ST std;
std.sid = 90;
printf("%d", std.sid);
return 0;
}
输出结果:90
示例3:
#include <stdio.h>
typedef struct Student
{
int sid;
char name[100];
char sex;
}* PSTU, STU; //等价于STU代表了struct Student类型,PSTU代表了struct Student * 类型
int main(void)
{
STU st; //等价于struct Student st;
PSTU ps = &st; //等价于struct Student * ps = &st;
ps->sid = 90;
printf("%d", ps->sid);
return 0;
}