it必备的数据结构基础知识

数据结构

什么是数据结构

是指相互之间具有(存在)一定联系(关系)的数据元素的集合。

数据结构的存储方式

**顺序存储结构:**用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结
构(关系)。
链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针
(pointer ),用该指针来表示数据元素之间的逻辑结构(关系)。

逻辑结构和物理结构

四种基本类型
集合:结构中的数据元素除了“同属于一个集合”外,没有其它关系。
线性结构:结构中的数据元素之间存在一对一的关系。
树型结构:结构中的数据元素之间存在一对多的关系。
图状结构或网状结构:结构中的数据元素之间存在多对多的关系

线性表

1 线性结构
是最常用,最简单的一种结构
① 存在一个唯一的被称为“第一个”的数据元素;
② 存在一个唯一的被称为“最后一个”的数据元素;
③ 除第一个元素外,每个元素均有唯一一个直接前驱;
④ 除最后一个元素外,每个元素均有唯一一个直接后继。

双向列表

双向链表(Double Linked List) 指的是构成链表的每个结点中设立两个指针域,一个指向其直接前趋的指针域 prior,一个指向其直接后继的指针域 next。这样形成的链表中有两个方向不同的链,故称为双向链表

栈的基本概念

栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出 FILO (First In Last Out)线性表。
栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指
示栈顶元素。
栈底(Bottom):是固定端,又称为表头。
空栈:当表中没有元素时称为空栈

树型结构是一类非常重要的非线性结构。
树(Tree)是 n(n≧0)个结点的有限集合 T,若 n=0 时称为空树,否则:
有且只有一个特殊的称为树的根(Root)结点;
若 n>1 时,其余的结点被分为 m(m>0)个互不相交的子集 T1, T2, T3…Tm,其中每
个子集本身又是一棵树,称其为根的子树(Subtree)

二叉树

性质 1:在非空二叉树中,第 i 层上至多有 2i 个结点(i≧1)。
性质 2:深度为 k 的二叉树至多有 2k-1 个结点(k≧1) 。
性质 3:对任何一棵二叉树,若其叶子结点数为 n0,度为 2 的结点数为 n2,则
n0=n2+1。

满二叉树

所有的支点上都有左,右子数

完全二叉树

完全二叉树的图例

查找算法

顺序查找
#顺序查找
def fun(list,elemt):
    for i in range(len(list)):
        if elemt == list[i]:
            print(list[i])
            print(i)
list1 = [1,2,3,4,5,7]
fun(list1,3)#3 2
二分法查找
#二分查找
def fun(star,stop,list,elemt):
    mid = (star+stop)//2
    if star > stop :
        return -1
    if list[mid] == elemt:
        return mid
    elif list[mid] > elemt:
        return fun(star,mid-1,list,elemt)
    else:
        return fun(mid+1,stop,list,elemt)
list1 = [1,2,3,4,5]
print(fun(0,len(list1),list1,4))#3

排序

冒泡排序
#冒泡排序(递归)
def fun(list):
    for i in range(len(list)-1):
        for j in range(len(list)-i-1):
            if list[j] < list[j+1]:
                list[j],list[j+1] = list[j+1],list[j]
    print(list)
list1 = [1,3,5,2,7,5,4,9]
fun(list1)#[9, 7, 5, 5, 4, 3, 2, 1]
设计排序
#设计排序
def fun(list):
    list1 = []
    list2 = []
    a = max(list)
    b = min(list)
    for i in range(a-b+1):
        list1.append([])
    for h in range(len(list)):
        list1[list[h]-b].append(list[h])
    for j in list1:
        for b in j:
            list2.append(b)
    print(list2)
list5 = [2,3,4,7,8,5,6,4,5]
fun(list5)#[2, 3, 4, 4, 5, 5, 6, 7, 8]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值