数据结构&算法_堆、栈(堆栈)、队列、链表

堆:

①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

   ·堆中某个节点的值总是不大于或不小于其父节点的值;

   ·堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

②堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

③堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。

④堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。

堆的应用:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

#堆排序

def sift(li, left, right):

    i = left

    j = 2 * i + 1

    tmp = li[left]

    while j <= right:

        if j+1 <= right and li[j] < li[j+1]:

            j = j + 1

        if tmp < li[j]:

            li[i] = li[j]

            i = j

            j = 2 * i + 1

        else:

            break

    li[i] = tmp

 

 

 

def heap_sort(li):

    n = len(li)

    for in range(n//2-1, -1, -1): #建立堆

        sift(li, i, n-1)

 

    for in range(n-1, -1, -1):   #挨个出数

        li[0], li[i] = li[i],li[0]

        sift(li, 0, i-1)

 

li = [6,8,1,9,3,0,7,2,4,5]

heap_sort(li)

print(li)

  

栈:

栈(stack)又名堆栈,一个数据集合,可以理解为只能在一端进行插入或删除操作的列表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底

②栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来(先进后出)

③栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。

栈的基本操作:
  进栈(压栈):push
  出栈:pop
  取栈顶:gettop

用python实现堆栈

1

2

3

4

5

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来依次讲解一下堆栈队列、哈希、链表。 1. 堆栈(Stack) 堆栈是一种数据结构,它是一种先进后出(LIFO)的线性结构。堆栈有两个基本操作: 入(push)和出(pop)。入将一个元素加入到堆栈的顶部,出则是将堆栈顶部的元素弹出。堆栈可以用数组或链表实现。 堆栈的应用非常广泛,比如函数调用、表达式求值、浏览器的后退和前进等。 2. 队列(Queue) 队列是一种数据结构,它是一种先进先出(FIFO)的线性结构。队列有两个基本操作: 入队(enqueue)和出队(dequeue)。入队将一个元素加入到队列的尾部,出队则是将队列头部的元素弹出。队列也可以用数组或链表实现。 队列的应用也非常广泛,比如任务调度、消息队列、打印队列等。 3. 哈希(Hash) 哈希是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希函数可以将任意长度的数据映射为固定长度的数据,这个固定长度的数据就是哈希值。常见的哈希算法有MD5、SHA-1、SHA-256等。 哈希表是一种数据结构,它基于哈希函数实现。哈希表通过将关键字映射为哈希值,然后将哈希值作为数组的下标,将对应的数据存储在数组中。哈希表的查找和插入操作都非常快,时间复杂度为O(1)。 哈希表的应用非常广泛,比如字典、缓存、路由表等。 4. 链表(Linked List) 链表是一种数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。链表可以分为单向链表、双向链表和循环链表等。 链表的插入和删除操作非常快,时间复杂度为O(1)。但是链表的查找操作比较慢,时间复杂度为O(n)。 链表的应用也非常广泛,比如LRU缓存、高精度计算等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值