一,术语
1)数据(Data)
1数据满足条件:①存储在某种介质上②可识别③物理符号
2数据要具备的要素:①类型(Type) ②值(Value)
3数据元素(Data Element)——识别信息的基本组成单位:
①若干个数据的集合。
②用来表示现实世界的一个完整信息。
2) 数据结构
包括:1逻辑结构2.物理(存储)结构
1)逻辑结构:数据集合中数据元素之间存在的逻辑关系。
A>集合式联系:数据元素之间是散列的——没有什么联系。
B>线性联系:数据元素之间存在线性联系。
C>非线性联系:①树状②图状
2)物理结构:数据元素的物理存储结构。
A>顺序存储:用连续的存储单元完成存储。(顺序表)
B>链式存储:用不连续的存储单元完成存储。
衡量标准:①逻辑结构:时间复杂度②物理结构:空间复杂度
二.线性表
1.线性表:表示数据集合中数据元素之间的逻辑关系。
表示:
①数据集合(有哪些数据元素,不讲次序)
②数据元素之间的逻辑次序
【例】:DataList={春,夏,冬,秋}
逻辑次序:
①图例:春-夏-秋-冬
②二元组:DataRelationship={<春,夏>,<夏,秋>,<秋,冬>}
线性表特点:<前驱元素,后继元素>
- 有且只有一个结点元素无前驱元素。
- 有且只有一个结点元素无后继元素。
- 除首尾结点外,其余结点只有一个前驱,一个后继。
首元素:线性表中没有前驱的线性元素。
尾元素:线性表中没有后继的线性元素。
非终端元素:线性表中有唯一前驱和唯一后继的元素。
三.顺序表(标准数据结构)
1.顺序表:用连续的存储单元(顺序存储)来存储线性表。
区分: ⑴顺序表是线性⑵顺序表用数组存储
2.实现顺序表:
- 有一个数据集合(逻辑)
- 有一个数组(连续的存储单元)
声明连续的存储单元(数组):
①定义一个数组:数据类型 数组名[元素个数]
★②声明一个动态数组
A>malloc函数: i> malloc(字节数)
[例] malloc(4) 问题①
返回值 - 分配成功:返回首字节地址。
- 分配失败:返回NULL。
★若单元分配成功,返回首字节地址,但该地址无类型(void * )。
解决:通过强制类型转换。
【例】在内存中分配4B的整型单元
int * p;
p=(int *)malloc(4); //强制类型转换 void*转换成int *
*p=10;
printf("%d",*p); //out:10
改进:
int *p;
p=(int *)malloc(sizeof(int));
*p=10;
printf("%d",*p); //out:10
[例]通过malloc分配有5个元素的整型数组
int * p;
p=(int *)malloc(5 *sizeof(int));
if(!p) {
printf("分配失败!\n");
}
else{
for(int i=o;i<5;++i){
p[i]=i+1;
}
}
for(int i=0;i<5;++i)
printf("%5d",p[i]);
free(p);
★用malloc分配的单元必须用free释放:free(指针);