数据结构
就是能够用一根线串起来的数据结构
数组 (列表)
- 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件?
- 答:内存必须有一块连续的内存空间
int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型。 int a[7] = array(1,2,3,4,5,6,7)
- 问:如何申请内存?
- 答:C,C++语言,申请:mallco (28)。释放:free(28)
问:int a[7] = [1,2,3,4,5,6,7] a[3] = 4?
答:a[3] = 首地址(1000) + 索引(3) * 类型长度(4) = 1012 --- 1015
- 问:数组首地址从哪获取?
- 答:数组首地址保存在数组名中
链表
(约瑟夫,丢手绢问题)
data 为自定义的数据,next 为下一个节点的地址。
class Hero():
def __init__(self, no=None, name=None, nickname=None, pNext=None):
self.no = no
self.name = name
self.nickname = nickname
self.pNext = pNext
def add(head, hero):
#### head 节点不能动,因此需要第三方的临时变量帮助head去遍历
cur = head
while cur.pNext != None:
### 把下一个节点的内存地址付给 cur ,那此时cur就指向下一个节点
cur = cur.pNext
### 当退出上述循环的时候偶,cur就已经指向尾节点
cur.pNext = hero
def getAll(head):
cur = head
while cur.pNext != None:
cur = cur.pNext
print('编号是:%s, 名称是:%s, 外号是:%s' % (cur.no, cur.name, cur.nickname))
def delHero(head, no):
cur = head
while cur.pNext != None:
if cur.pNext.no == no:
break
cur = cur.pNext
cur.pNext = cur.pNext.pNext
head = Hero()
h1 = Hero(1, '宋江', '及时雨')
add(head, h1)
h2 = Hero(2, '卢俊义', 'xxx')
add(head, h2)
h3 = Hero(3, '西门庆', 'dsadsad')
add(head, h3)
getAll(head)
树
-
一般树
- 任意一个节点的子节点的个数不受限制
-
二叉树
- 定义:任意一个节点的子节点的个数最多是两个,且子节点的位置不可更改
- 满二叉树
- 定义:在不增加层数的前提下,无法再多添加一个节点的二叉树
- 完全二叉树
- 定义:只是删除了满二叉树最底层最右边连续的若干个节点
- 一般二叉树
-
森林