队列知识点

本文介绍了循环队列的概念,包括空队列、满队列和入队操作,并讨论了假溢出现象。同时,详细阐述了银行家算法,这是一种避免死锁的策略,通过计算资源分配的安全性来确保系统稳定性。文章还涉及了二叉树的相关类型,如完全二叉树和最优二叉树。
摘要由CSDN通过智能技术生成

循环队列:队列从0开始,假如有0、1、2、3、4、5、6、7、8区域,每个区域可能有自己的名字
   空循环队列:首指针和尾指针都指向0区域,尾部指针的区域有值
   满循环队列:首指针和尾指针都指向8区域,尾部指针的区域除满循环队列外都没有值
   
   入队:尾部指针+1
   
   循环队列判断是否满:rear 、front指向同一区域,且不为空
   
   循环队列计算大小
   
容量和队列长度


   假溢出:顺序存储有1、2、3、4、5其中前4个都有值,只有5是空区域,
           现在出队,1、2两个区域,在入队5、6,明明有1、2、5空但是6却没有地方
           这种现象就是假溢出
           
    循环队列为空的时候,Rear、Front不一定都是0,也可能都是1

---------------------------------------------------------------------

   著名的银行家算法,最早是由Dijkstra提出来的。它是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

    银行家算法最重要的就是判断是可用资源和仍需资源之间的关系,如果可用资源数大于人需资源数,那么我们认为这个进程就是可以执行的,也是安全的,反之,便是不安全的。所以重中之重的是找到各种资源数。

对进程的判断遵循以下步骤:

1.计算系统开始时所有的资源数,即开始的可用资源数;

2.在仍需资源数和可用资源数中作比较,找到符合条件的进程,最后修改进程执行完毕时系统的可用资源数;

3.继续比较剩余进程和可用资源数,找到下边可以执行的进程;

4.依次类推;

--------------------------------------------------------------

完全二叉树:如果缺少子结点,只能从最右下方开始缺
满二叉树:每个结点都是满的
线索二叉树:就是普通二叉数排序后的,已经线索化了,可以通过前序、中序、后序进行遍历
最优二叉树: 带权路径长度最小(即代价最小)的二叉树称为最优二叉树或哈夫曼树
  给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树。简单的认为就是叶子节点的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的优先队列是一种特殊的队列数据结构,其中每个元素都有一个与之关联的优先级。优先级高的元素先被处理,而优先级相同的元素按照它们被插入的顺序进行处理。 在C语言中,可以使用以下几种方式来实现优先队列: 1. 数组实现:使用数组来存储元素,并根据元素的优先级进行排序。插入元素时,需要按照优先级找到合适的位置进行插入;删除元素时,直接删除数组中的第一个元素即可。这种实现方式简单直观,但插入和删除操作的时间复杂度较高。 2. 堆实现:使用堆这种数据结构来实现优先队列。堆是一种完全二叉树,满足堆序性质:对于每个节点i,其父节点的值小于等于节点i的值。在C语言中,可以使用数组来表示堆。插入元素时,将元素插入到堆的末尾,并通过上浮操作将其调整到合适的位置;删除元素时,将堆顶元素与最后一个元素交换,并通过下沉操作将其调整到合适的位置。这种实现方式的插入和删除操作的时间复杂度为O(log n),效率较高。 3. 链表实现:使用链表来存储元素,并根据元素的优先级进行排序。插入元素时,需要按照优先级找到合适的位置进行插入;删除元素时,直接删除链表中的第一个元素即可。这种实现方式相对于数组实现来说,插入和删除操作的时间复杂度较低,但查找操作的时间复杂度较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值