简单数据结构

!!是markdown文件导入,存在格式问题,可直接看附件文档

数据结构导论

一种电脑存储和组织数据的方式,可以是其更高效。数据结构不光研究数据的操作、操作的实现,还研究分析操作的成本。

谈论数据结构的方式:

1)数学或逻辑模型

抽象数据类型(ADT):只定义要存储的数据,然后定义类型上可进行的操作,不讨论实现细节。

List(列表)—ADT(模型)

1)静态列表(列表中的元素数量不会更改)—Arrays

​ --存储一些给定数量、给定数据类型的元素

​ --根据在列表中的任意位置来读取写入、修改元素

​ --修改任意特定位置的元素

eg:

int A[10];
A[i] = 2;
print A[i];
2)动态列表 —动态数组(效率不高)、链表

​ --若列表中没有元素,会称列表为空、大小为零

​ --可以在任何位置插入、删除元素

​ --可以计算列表中的元素数

动态数组:

int A[MAXSIZE]; //虽是动态,但设有最大“尺寸”
INT end = -1; //设置结尾标识,可以用来判断是否为空,也可计算列表长度
insert(2); //0

​ 当超出所设最大范围时,要创建一个新数组,并复制原数组之前的数据存入新数组,并释放原数组空间,那创建新数组应增加多大呢?且所需创建、复制、移动、释放等操作繁琐,时间成本高。—所以一般新创数组空间为原数组的两倍。

​ (1)访问(access): O(1) (2)插入(insert): O(n)

​ (3)移动(remove): O(n) (4)增加(add): O(n)

------所以引出链表

2)实现

不同语言实现相同的ADT

数据类型的具体实现:

Arrays(数组)符合静态List(动态也可)所要的操作
Linked List(链表)符合动态列表所要的操作
Stack(栈)
Queue(队列)
Tree(树)
Grapth…

研究这些数据结构可以为我们提供哪些操作

链表

struct Node
{
   
    int data; //4 bytes
    Node* next; //4 bytes
}

数据(data)or(value)+下一节点地址组成一个节点(node),每个节点有两个字段,每个节点指向下一节点, 表尾节点指针域为(NULL), 第一个节点称为头节点(head)

保持列表信息唯一性,所以头节点或第一个节点的地址可以让人访问到完整列表,表尾节点指针域为空或零,表示其不指向任何其他节点。

遍历链表唯一方法:从头开始,一个一个遍历

逻辑视图:

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值