【青岛大学·王卓】第3章_栈和队列

news2025/1/12 20:00:05

【青岛大学·王卓】第3章_栈和队列

20221107-20221119

3.1 栈和队列的定义和特点

普通线性表插入和删除可以是线性表中的任意为位置;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHdBjl1z-1671859394968)(assets/image-20221112110524355.png)]

3.1.1 栈

  • 栈的概念

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSQf5i8Q-1671859394969)(assets/image-20221112143453078.png)]

栈和队列是两种常用的、重要的数据结构。栈和队列是限定插入和删除只能在表的端点进行的线性表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qpjeHBlk-1671859394970)(assets/image-20221112110736115.png)]

  • 栈特点

后进先出

  • 栈的应用:

由于栈的操作具有后进先出的固有特性;使栈成为程序设计中有用的工具。另外,如果问题求解的过程具有后进先出的天然特性的话,求解的算法中必然需要利用栈。

  • 常见问题
    • 数制转换
    • 表达式求值
    • 括号匹配的检验
    • 八皇后问题
    • 行编辑程序
    • 函数调用
    • 迷宫求解
    • 递归调用实现
  • 栈的特点

栈(Stack)是特殊的一种线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表;

又称**后进先出(Last In First Out)**的线性表,LIFO

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCiR5uCu-1671859394972)(assets/image-20221112142249491.png)]

  • 栈的相关概念

栈是仅在表尾进行插入和删除操作的线性表;

表尾 a n a_{n} an称为栈顶Top,表头 a 1 a_{1} a1称为栈底Base。例如栈: s = ( a 1 , a 2 , . . . , a n − 1 , a n ) s=(a_{1},a_{2},...,a_{n-1},a_{n}) s=(a1,a2,...,an1,an)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZXZj4JTu-1671859394973)(assets/image-20221112142835863.png)]

插入元素到栈顶(表尾)的操作,叫做入栈

从栈顶(表尾)删除最后一个元素的操作,叫做出栈

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LE9bGSRc-1671859394973)(assets/image-20221112143012509.png)]

  • 栈示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-keoFOmtd-1671859394974)(assets/image-20221112143201318.png)]

  • 入栈操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hzotn4xL-1671859394975)(assets/image-20221112143214617.png)]

  • 出栈操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dugc9r2R-1671859394976)(assets/image-20221112143247542.png)]

  • 思考

假设有3个元素a,b,c入栈顺序abc则出栈顺序有几种可能??

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9HcNn6n-1671859394977)(assets/image-20221112143317756.png)]

  • 栈和一般线性表区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l6ScD4ej-1671859394977)(assets/image-20221112143526388.png)]

3.1.2 队列

  • 队列的概念

队列是一种先进先出的线性表。在表一端插入(表尾),在另一端(表头)删除。

Q = ( a 1 , a 2 , . . . , a n ) Q = (a_{1},a_{2},...,a_{n}) Q=(a1,a2,...,an)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cn74uI40-1671859394978)(assets/image-20221112143832083.png)]

  • 队列相关概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UxpF8U3m-1671859394979)(assets/image-20221112143854086.png)]

  • 队列特点

    先进先出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfm8f3LN-1671859394979)(assets/image-20221112141445863.png)]

  • 队列的常见应用

    由于队列具有操作先进先出的特性,使得队列成为程序设计中求解类似排队问题的有效工具;

    • 脱机打印
    • 多用户系统中,多个用户排成队,分时循环使用CPU和主存;
    • 按用户的优先级排成多个队,每个优先级一个队列;
    • 实时控制系统,信号按接收的先后顺序依次处理;
    • 网络电文传输,按到达的时间先后顺序依次处理;

栈和队列是线性表的子集,是插入和删除位置受限的线性表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LJ3eMbcY-1671859394980)(assets/image-20221112141923278.png)]

  • 栈的特点

3.2 案例引入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qRZh58FE-1671859394981)(assets/image-20221112143915671.png)]

3.3 栈的表示和操作的实现

3.3.1 栈的抽象数据类型定义

ADT Stack{
    数据对象:
        D = {ai|ai∈ElemSet,i=1,2,3,..,n,n≥0}
    数据关系:
        R1 = {<ai-1,ai>|ai-1,ai∈D,i=1,2,3,..,n}
    	约定an端为栈顶,a1端为栈低。
    基本操作:初始化,进栈、出栈、取栈顶元素等。
}ADT Stack;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fFZGQufF-1671859394982)(assets/image-20221112144454930.png)]

3.3.2 栈的表示

由于栈本身是线性表,于是栈也有顺序存储和链式存储两种方式。

栈的顺序存储-- 顺序栈

栈的链式存储–链栈;

  • 存储方式

存储方式:同一般线性表的顺序存储结构完全相同;

利用一组地址的连续的存储单元依次存放自栈底到栈顶的数据元素。栈底一般在低地址端。

设top指针,指示栈顶元素在顺序栈中的位置;

设base指针,指示栈底元素在顺序栈中的位置。

但是,为了方便操作通常设置top指示真正的位置的栈顶元素之上的下标地址。

另外,用stacksize表示栈可以使用的最大容量;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jkNgSlTc-1671859394983)(assets/image-20221112145513194.png)]

3.4 栈与递归

3.4.1 递归

递归:若一个对象部分地包含它自己,或者它自己给自己定义,则称为这个对象是递归的;

若一个过程间接地或间接地调用自己,称为这个过程是递归的过程。

long Fact(long n){
    if(n==0){
        return 1;
    }
    else {
        return n*Fact(n-1);
    }
}

什么情况使用递归方法:

  • 递归定义的数学函数:N阶乘,2阶的Fibonaci数列
  • 具有递归特性的数据结构:二叉树
  • 可递归求解的问题;迷宫问题

递归问题-- 分治法求解

分治法:对于一个较为复杂的问题,能够分解成几个相对简单的且解法相同的或者类似的子问题来求解;

必备条件:

能将一个问题转变一个新的一个问题,而新问题与原问题的解法相同或类同,不同的仅是处理的对象,且这些处理对象是变化且有规律的。

  1. 可以通过上述转化而使问题简化。
  2. 必须有一个明确的递归出口,称为递归的边界.
void p(参数){
    if (递归结束条件) 可直接求解的步骤 // 基本项
	else{
        p;// 归纳项
    }
}

long Fact(long n){
    if (n==0){ //基本项
        return 1;
    }
    else{
        return n*Fact(n-1); // 归纳项
    }
}
  • 递归过程

    • 调用前,系统完成
    1. 将实参和返回地址等传递给被调用函数;
    2. 为被调用函数的局部变量分配存储区;
    3. 将控制转移到被调用函数的入口;
    • 调用后,系统完成
    1. 保存被调用函数的计算结果;
    2. 释放被调用函数的数据区;
    3. 依照被调用函数保存的返回地址将控制转移到调用函数;
  • 递归实例

    • 实例1,多个函数嵌套调用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XU9fjoph-1671859394983)(assets/image-20221119160426325.png)]

    • 实例2:n!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJJyGb9j-1671859394988)(assets/image-20221119160548345.png)]

  • 递归优缺点

    • 优点

      结构清晰,程序易读;

    • 缺点

    每次调用都要成圣工作记录,保存状态信息,入栈;返回时要出栈,恢复状态信息。时间开销大。

  • 替代递归的方法

    • 尾递归、单项递归 -->循环结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Onz0bOgv-1671859394988)(assets/image-20221119161030807.png)]

    • 栈模拟

​			[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygA8BFem-1671859394989)(assets/image-20221119161224976.png)]

3.5 队列的表示和操作的实现

3.5.1 队列基础

  • 队列示意

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eX5ei563-1671859394989)(assets/image-20221119161629230.png)]

  • 相关术语

    • 队列(Queue)是仅在表尾进行插入操作,在表头进行删除操作的线性表。
    • 表尾即 a n a_{n} an称为队尾,表头即 a 1 a_{1} a1,称为队头;
    • 它是一种先进先出(FIFO)的线性表。例如

    Q = ( a 1 , a 2 , . . . , a n ) Q = (a_{1},a_{2},...,a_{n}) Q=(a1,a2,...,an)

    插入元素称为入队,删除元素称为出队.

    队列的存储结构为链队、顺序队

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1UuKGDnX-1671859394990)(assets/image-20221119162624481.png)]

  • 常见的队列应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWwU84dH-1671859394991)(assets/image-20221119162724638.png)]

3.5.2 队列抽象数据类型

ADT Queue{
    数据对象 D = {ai|ai∈ElemSet,i=1,2,3,...,n,n≥0}
    数据关系 R = {<ai-1,ai>|ai-1,ai ∈D i=2,3...,n}
    基本操作:
    	InitQueue(&Q); 构造空队列
        DestroyQueue(&Q); 条件队列Q存在,队列Q销毁
    	ClearQueue(&Q);条件队列Q存在,队列Q清空
    	QueueLength(&Q);条件队列Q存在,返回队列元素个数
	    GetHead(Q,&e);条件队列Q存在,获取Q队头元素e
       	EnQueue(&Q,e);条件队列Q存在,插入e元素
        DeQueue(&Q,&e);条件队列Q存在,删除e元素
}ADT Queue;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xd8JrvuO-1671859394991)(assets/image-20221119164810331.png)]

3.5.3 循环队列-队列实现

  • 队列物理存储可以用顺序存储结构,可以用链式存储结构。

    队列存储的两种方式:顺序队列和链式队列;

// ----- 队列的顺序存储结构-----
#define MAXQSIZE 100  // 队列最大长度
typedef struct 
{ 
    QElemType *base; // 存储空间基地址
    int front; // 头指针
    int rear; // 尾指针
) SqQueue;
  • 假溢出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KJihoS6t-1671859394992)(assets/image-20221119165214350.png)]

解决队列假溢出:

  1. 将队列元素一次向队头移动。

    缺点是:浪费时间,每移动一次队中元素都要移动。

  2. 将队空间设想成循环的表,即分配给队列的m个存储单元可以循环使用。当rear为maxqsize时,若向量的开始端空着,可以从头使用空着的空间,当front为maxqsize时也是一样。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1K6aqBtZ-1671859394992)(assets/image-20221119165617410.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbpnymOj-1671859394993)(assets/image-20221119165609284.png)]

  1. 循环队列解决队满时判断方法:a)少用一个元素空间。b) 设置队列满的标志位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDbVHFjc-1671859394993)(assets/image-20221119165731439.png)]

  • 循环队列的类型定义
# define MAXQSIZE 100 // 队列最大长度
Typedef struct{
    QElemType *base; // 初始化的动态分配存储空间
    int front; // 头指针
    int rear;	// 尾指针
}SqQueue;
  • 循环队列操作—队列初始化
Status InitQueue (SqQueue &Q) 
{//构造一个空队列Q
    Q.base=new QElemType[MAXQSIZE]; //为队列分配一个最大容扯为 MAXSIZE 的数组空间
    if(!Q.base) exit(OVERFLOW); //存储分配失败
    Q.front=Q.rear=O; //头指针和尾指针置为零, 队列为空
    return OK;
}
  • 循环队列操作—求队列长度
int QueueLength(SqQueue Q)// 返回Q的元素个数, 即队列的长度
	return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
  • 循环队列操作—循环队列入队
Status EnQueue (SqQueue &Q, QElemType e) 
{// 插入元素 e 为 Q 的新的队尾元素
    if ((Q. rear+l) %MAXQSIZE==Q. front){ //尾指针在循环意义上加1后等于头指针, 表明队满
    	return ERROR;         
    }
    Q.base[Q.rear]=e; //新元素插入队尾
    Q.rear=(Q.rear+l)%MAXQSIZE; //队尾指针加1
    return OK;      
 }
  • 循环队列操作—循环队列出队

出队操作是将队头元素删除。

Status DeQueue (SqQueue &Q, QElemType &e) 
{ // 删除Q的队头元素, 用 e 返回其值
    if (Q.front==Q. rear) return ERROR; // 队空
    e=Q.base[Q.front]; // 保存队头元素
    Q.front=(Q.front+l)%MAXQSIZE; // 队头指针加1
    return OK;
}
  • 循环队列操作—取队头元素

当队列非空时, 此操作返回当前队头元素的值, 队头指针保持不变。

SElemType GetHead(SqQueue Q) 
{// 返回Q的队头元素,不修改队头指针
	if (Q. front! =Q. rear)  //队列非空
		return Q.base[Q.front); // 返回队头元素的值,队头指针不变
}

3.5.4 链队表示和实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzZRXRU8-1671859394994)(assets/image-20221119175434716.png)]

在这里插入图片描述

  • 链队列的类型定义
# define MAXQSIZE 100 // 队列最大长度
Typedef struct Qnode{
    QElemType data; 
	struct Qnode *next;
}QNode,*QueuePtr;

typedef struct{
    QueuePtr front; // 队头指针
    QueuePtr rear; //队尾指针
}LinkQueue;
  • 链队指针变化

在这里插入图片描述

  • 链队的初始化

在这里插入图片描述

Status InitQueue(LinkQueue &Q){
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    if(!Q.front){
        exit (OVERFLOW);
    }
    Q.front->next = NULL;
    return ok;
}
  • 销毁链队列

  • 链队列 元素入队

和循环队列的入队操作不同的是,链队在入队前不需要判断队是否满,需要为入队元素动态分配一个结点空间,

  1. 为入队元素分配节点空间,用指针p指向;
  2. 将新结点数据域置位e;
  3. 将新结点插入队尾;
  4. 修改队尾指针为p;
Status EnQueue (LinkQueue &Q, QElemType e) 
{//插入元素e为Q的新的队尾元素
    p=new QNode; //为人队元素分配结点空间,用指针p指向
    p->data=e; // 将新结点数据域置为e
    p->next=NULL; Q.rear->next=p; // 将新结点插入到队尾
    Q.rear=p; // 修改队尾指针
    return OK;
}
  • 链队列 元素出队

    和循环队列一样,链队在出队前也需要判断队列是否为空,不同的是,链队在出队后需要释放出队头元素的所占空间.

    Status DeQueue(LinkQueue &Q,QElemType &e) 
    {// 删除Q的队头元素, 用e返回其值
        if(Q.front==Q.rear) return ERROR; // 若队列空, 则返回 ERROR
        p=Q.front->next; //p指向队头元素
        e=p->data; //e保存队头元素的值
        Q.front->next=p->next;//修改头指针
        if(Q.rear==p) Q.rear=Q.front; //最后一个元素被删, 队尾指针指向头结点
        delete p; //释放原队头元素的空间
        return OK;
    }    
    
  • 链队列 求队头元素

SElemType GetHead{LinkQueue Q) 
{//返回Q的队头元素, 不修改队头指针
    if(Q.front!=Q.rear) // 队列非空
    	return Q.front->next->data; // 返回队头元素的值,队头指针不变
}    

3.6 案例分析与实现

3.7 脑图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9lS90Wyn-1671859394995)(assets/第05周 栈和队列.png)]

3.8 感谢

感谢王卓老师请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Anki学习之路

【常规操作】&#xff1a; 【自定义卡片进度】&#xff1a; [右键单击] -> [重设学习进度] //选择放到哪一个队列中&#xff08; 新卡片队列 / 复习队列 &#xff09;。 【重新学一遍】&#xff1a; //然后再进行上面的操作步骤。 【牌组齿轮按钮】&#xff1a; 【每日新…

Web前端105天-day62-HTML5_CORE

HTML5CORE02 目录 前言 一、复习 二、拖拽 三、上传服务器 四、Canvas 五、地图 总结 前言 HTML5CORE02学习开始 一、复习 跨域 浏览器的同源策略导致在网页中, 通过 AJAX 发送网络请求时, 默认只能向同源的服务器请求同源: 协议 端口号 域名 三者都相同产生跨域的原因…

杰华特科创板上市:市值227亿 华为英特尔联想是股东

雷递网 雷建平 12月23日杰华特微电子股份有限公司&#xff08;简称&#xff1a;“杰华特”&#xff0c;股票代码为&#xff1a;“688141” &#xff09;今日在科创板上市&#xff0c;发行价为38.26元。杰华特此次发行5808万股&#xff0c;发行价为38.26元&#xff0c;募资总额为…

32天高效突击:开源框架+性能优化+微服务架构+分布式,面阿里获P7(脑图、笔记、面试考点全都有)

今年的大环境不佳&#xff0c;所以大部分的人在今年的招聘旺季都没有收获到好的结果。 但不要着急&#xff0c;今天分享的内容则是由 一位阿里P7的面试心得&#xff0c;通过32天的高效突击训练&#xff0c;成功拿下offer的学习方法。 篇章分为三大章节&#xff0c;可以根据自…

【TypeScript】类型兼容性与交叉类型讲解

目录 类型兼容性 对象类型兼容性 接口类型兼容性 函数类型兼容性 交叉类型 类型兼容性 在TS中&#xff0c;类型采用的是结构化类型系统&#xff0c;也叫做 duck typing&#xff08;鸭子类型&#xff09;&#xff0c;类型检查关注的是值所具有的形状。也就是说&#xff0c…

C. Building a Fence(范围判定)

Problem - 1469C - Codeforces 你想建造一个由n个相等部分组成的栅栏。所有部分的宽度都等于1&#xff0c;高度都等于k。 不幸的是&#xff0c;篱笆下面的地面并不平坦。为了简单起见&#xff0c;你可以认为第i节下面的地面等于hi。 你应该遵循几个规则来建造围栏。 连续的部…

C++知识总结

1.C面向对象三大特征&#xff1a;继承、封装、多态。其中多态分为静态多态和动态多态。静态多态&#xff1a;重载&#xff0c;参数模板 动态多态&#xff1a;虚函数&#xff0c;强制转换。 2.static类型的变量存在静态存储区&#xff0c;初始值为0或者null 3.char *p“PCGAME”…

kubekey初期尝试安装 KubeSphere单机和多机避坑指南

kubekey初期尝试安装 KubeSphere单机和多机避坑指南 准备工作 请注意开始前工作确定各个软件版本情况&#xff0c;本文章要想阅读比较舒服请还得有些Go开发经验 CentOS 7.9 KubeKey v1.21 KubeSphere v3.2.1 Docker 和 Kubernetes 根据支持进行选择&#xff1a; 获取支持可以通…

【复盘】2022年度复盘

年度总结 今年的年度总结比之前写早了一点&#xff0c;主要在因为居家办公时间太久&#xff0c;正好有空就找点时间提前写一下总结复盘计划&#xff0c;说实话要是每月都写一次&#xff0c;我自己也做不到。今年这一年如果用两个字来形容的话&#xff0c;应该是坚定 工作篇 …

用树莓派4B安装gitlab,亲测可用~

最近成功在CentOS7上安装了gitlab&#xff0c;忽然想到是不是可以把吃灰的树莓派4B也装上gitlab&#xff0c;于是研究了一下&#xff0c;做个分享。 树莓派是4B 8G版本。本身装的是官方的64位系统。之前可能还装过一些乱七八糟的东西&#xff0c;这里就不提了。 上gitlab官网…

m基于GRNN广义回归神经网络的飞机发动机剩余寿命预测matlab仿真,训练集采用C-MAPSS数据集

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 GRNN建立在非参数核回归基础上&#xff0c;以样本数据为后验条件&#xff0c;通过执行诸如Parzen非参数估计&#xff0c;从观测样本里求得自变量和因变量之间的联结概率密度函数之后&#xff0c;…

mysql查询某字符串是否在某字段中精确查找是否存在和case when语法规则使用说明

mysql中函数find_in_set可以对字符串在某个字段中是否存在&#xff0c;如果存在则返回含有该查询项的所有记录 SELECT count(1) FROM contingency_plan_team_role WHERE find_in_set( 36, preview_task_ids); 查询结果&#xff1a; case when 进行分组判断 cas…

【数据结构与算法基础】青岛大学王卓老师

【数据结构与算法基础】 1. 学习笔记参考 《数据结构与算法基础》教学视频目录87师兄-B站课程《数据结构与算法基础》脑图 2. 学习章节 【青岛大学王卓】第1章_前言【青岛大学王卓】第2章_线性表【青岛大学王卓】第3章_栈和队列【青岛大学王卓】第4章_串、数组和广义表【青岛…

Python爬虫入门——BeautifulSoup库

一、前言 这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据。 update on 2016-12-28&#xff1a;之前忘记给BeautifulSoup的官网了&#xff0c;今天补上&#xff0c;顺便再补点BeautifulSoup的用法。 update on 2017-08-16&#xff1a;很多网友留言说U…

搜索(5):迭代加深、双向dfs

活动 - AcWing 算法竞赛进阶指南 一、迭代加深概述 dfs每次选定一个分支&#xff0c;直到抵达递归边界才回溯&#xff0c;这种策略有一定缺陷。当搜索树的某个分支情况非常多&#xff0c;并且问题的答案在一个较浅的分支上时&#xff0c;如果一开始就选错了分支&#xff0…

在宜宾,看见未来中国的产融平台样本

在被验证的京东西南数字化产融协同平台背后&#xff0c;恰证明着在京东这样的新型实体企业支持下&#xff0c;中国的区域产业经济已经出现星星之火&#xff0c;而这些星星之火正在帮助成千上万的企业走出固有的销售渠道和销售模型&#xff0c;成为新时代数字经济和产业经济的一…

单芯片快速以太网MAC控制器DM9000介绍

DM9000简介 DM9000是一款完全集成的和符合成本效益单芯片快速以太网MAC控制器与一般处理接口&#xff0c;一个10/100M 自适应的PHY 和4K DWORD 值的SRAM。它的目的是在低功耗和高性能进程的3.3V与5V的支持宽容。 DM9000 还提供了介质无关的接口&#xff0c;来连接所有提供支持介…

javaee之spring2

基于注解的IOC配置 一、先来说一下放在对象上面的注解 Component: * 作用&#xff1a;用于把当前类对象存入spring容器中 * 属性&#xff1a; * value&#xff1a;用于指定bean的id。当我们不写时&#xff0c;它的默认值是当前类名&#xf…

RabbitMQ 第一天 基础 5 Spring 整合RabbitMQ 5.2 Spring 整合 RabbitMQ【消费者】 5.3 小结

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础5 Spring 整合RabbitMQ5.2 Spring 整合 RabbitMQ【消费者】5.2.1 消费者5.3 小结第一天 基础 5 Spring 整合RabbitMQ 5.2 Spring 整合 RabbitMQ【消费者】 5.2.1…

白话说Java虚拟机原理系列【第五章】:内存结构之堆详解

文章目录堆(Heap)对象在堆中的存储结构垃圾收集器详解对象存活判断算法引用的种类对象最终判定死亡之两次标记规则方法区的垃圾回收原则垃圾收集算法分代收集模型垃圾收集器对象分配原则垃圾收集触发方式垃圾收集器的参数异常前导说明&#xff1a; 本文基于《深入理解Java虚拟机…