君子美美与共和而不同
文章目录
术语
数据(Date)
-
存储在某种介质上
-
可以被识别
-
物理符号
-
要素:
- 型(Type)
- 值(Value)
数据元素(Date Element)
识别信息的基本组成单位
- 若干个数据的集合
- 用来表示现实世界的一个完整信息
数据结构
逻辑结构
数据集合中数据元素之间存在的逻辑联系
- 集合式:数据元素之间是散列的
- 线性:数据元素之间构成的一种线性联系
- 非线性
- 树状 (网络通信)
- 图状
物理结构
数据元素的物理存储结构
- 顺序存储
- 链式存储
衡量标准
- 逻辑结构:时间复杂度 (运行效率的复杂程度)
- 物理结构:空间复杂度
线性表
定义:表示数据集合中数据的逻辑关系
表示
- 数据集合
- 数据元素之间的逻辑次序
举例
DateList = { 春、夏、冬、秋 }
逻辑次序
- 图例:
- 二元组 DateRelationship={<春,夏>,<夏,秋>,<秋,冬>}
特点:非终端元素
- <前驱元素,后继元素>
- 首元素:线性表中没有前驱的结点元素
- 尾元素:线性表中无后继的结点元素
- 非终端元素:
- 除首尾结点外,其余结点只有一个前驱,只有一个后继
顺序表(线性表的顺序存储结构)
定义
用连续的存储单元(顺序存储)存储线性表
- 顺序表是线性表
- 顺序表用数组存储
实现顺序表
- 有一个数据集合(逻辑)
- 有一个数组(连续存储单元)
声明连续的存储单元(数组)
- 定义一个数组
- 声明一个动态数组
动态数组
-
malloc 函数
- 使用: malloc(字节数)
- malloc(n*sizeof(type))
- 返回值
- 分配成功:返回首字节地址
- 分配失败:NULL
-
若单元分配成功,返回首字节地址,但该地址元素型为 ( void *)
-
解决:通过强制类型转换
int * p;
p = (int *)malloc(sizeof(int));
*p = 10;
printf("%d\n", *p); // 10
if (!p)
printf("分配失败");
else
printf("分配成功");
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * p;
p = (int*)malloc(5*sizeof(int));
if (!p)
printf("分配失败");
else
{
for(int i = 0; i <5; i ++)
{
p[i] = i + 1;
}
}
for(int i = 0; i <5; i ++)
printf("%d ", p[i]);
free(p);
return 0;
}
用malloc分配的单元必须用 free 释放