线性表

君子美美与共和而不同

术语

数据(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 释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值