主頁 >  其他 > 【詳細圖解】學習佇列,看這一篇就夠了!

【詳細圖解】學習佇列,看這一篇就夠了!

2021-04-07 07:58:42 其他

提要鉤玄:本文主要介紹佇列的結構、基本原理及操作,涉及到兩種實作:順序佇列和鏈佇列,

1. 什么是佇列?

先舉一個日常例子,排隊買飯,

排隊買飯

大家按先來后到的順序,在視窗前排隊買飯,先到先得,買完之后走開,輪到下一位買,新來的人排在隊尾,不能插隊,

可見,上面的“隊”的特點是只允許從一端進入,從另一端離開

這樣的一個隊,放在資料結構中就是“佇列”,

首先,佇列是一個線性表,所以它具有線性表的基本特點,

其次,佇列是一個受限的線性表,受限之處為:只允許從一端進入佇列,從另一端離開,

根據以上特點,可以畫出示意圖:

佇列示意圖

出隊元素 1,入隊元素 4 之后:

下面是幾個相關名詞:

  • 入隊:進入佇列,即向佇列中插入元素
  • 出隊:離開佇列,即從佇列中洗掉元素
  • 隊頭:允許出隊(洗掉)的一端
  • 隊尾:允許入隊(插入)的一端
  • 隊頭元素:佇列中最先入堆疊的元素
  • 隊尾元素:佇列中最后入堆疊的元素

我們可以直接將隊頭元素看作隊頭,隊尾元素看作隊尾,(這些名詞概念,有所理解即可,不必細究)

佇列的重要特性是在隊尾進行入隊操作,在隊頭進行出隊操作,所以上圖元素的入隊順序為:1、2、3,出隊順序為:1、2、3,也即,先入隊的先出隊(First In First Out, FIFO),后入隊的后出隊(Last In Last Out, LILO).

總結一下,佇列是一種只允許在一端進行插入操作,在另一端進行洗掉操作的先入先出的受限的線性表,

2. 佇列的實作思路

和堆疊一樣,佇列也可以有兩種實作方式:陣列實作的順序佇列和鏈表實作的鏈佇列

2.1. 陣列實作——順序佇列

一個用陣列實作的順序佇列如下圖所示:

順序佇列

可以看到,要實作一個順序佇列,我們需要以下結構:

  • 存盤資料的陣列 —— data[]
  • 表示佇列的最大容量的值 —— MAXSIZE
  • 標識隊頭端的隊頭下標 —— front
  • 標識隊尾端的隊尾下標 —— rear

frontrear 會隨著入隊和出隊操作而變化,為了方便起見,我們規定在非空佇列中,隊尾下標是隊尾元素的下一個元素的下標

了解了結構之后,我們可以很容易使用 C 語言的結構體實作它:

#define MAXSIZE 5 //順序佇列的最大存盤容量
/*順序佇列的結構體*/
typedef struct {
    int data[MAXSIZE];
    int front; //隊頭下標
    int rear; //隊尾下標
} QueueArray;

2.2. 鏈表實作——鏈佇列

我們使用帶頭節點的單鏈表來實作佇列,如下圖所示:

鏈佇列

可以看到,要實作一個鏈佇列,需要以下結構:

  • 單鏈表的基本單元結點 —— QueueNode
    • 存盤資料的資料域 —— data
    • 指向下一個結點的指標域 —— next
  • 指向鏈表的頭指標 —— head
  • 標識隊頭端的隊頭指標 —— front
  • 標識隊尾端的隊尾指標 —— rear

其中,頭指標 head 和隊頭指標 front 都指向了單鏈表的第一個結點,所以這個指標可以合二為一,隊頭指標即頭指標,

如此一來,我們可以借助鏈表的尾插法實作佇列的入隊操作,借助鏈表的頭刪法實作佇列的出隊操作,

搞清了結構,用結構體實作如下:

/*單鏈表的結點的結構體*/
typedef struct QueueNode {
    int data; //資料域
    struct QueueNode *next; //指標域
} QueueNode;

/*鏈佇列的結構體*/
typedef struct {
    QueueNode *front; //隊頭指標
    QueueNode *rear; //隊尾指標
} QueueLink;

3. 佇列的狀態

3.1. 順序佇列(問題版)

【空佇列】:空佇列中沒有元素,此時,隊頭下標和隊尾下標均為 0,即front = rear = 0

空佇列

【非空非滿佇列】:佇列不是空佇列且有剩余空間:

非空非滿佇列

【滿佇列】:順序佇列分配的固定空間用盡,沒有多余空間,不能再插入元素,此時 front = 0rear = MAXSIZE

滿佇列

從上圖中可以看出,非空佇列的隊尾下標 rear 始終是隊尾元素的下一個元素的下標,

3.2. 假滿佇列

以上是用陣列實作的順序佇列的三種狀態,但上圖中三種佇列是存在問題的,那就是佇列的存盤問題

先再次明確佇列的兩條重要特性:

  • 佇列只允許在隊頭洗掉元素,在隊尾插入元素
  • 我們規定:front 是隊頭元素的下標,rear 是隊尾元素的下標,二者會隨著出隊和入隊操作而變化

由于上面的三幅圖中 front 都在下標 0 處,所以不容易看出問題,請看下面的程序圖:

入隊出隊程序圖

簡單用文字描述以下上述程序:

圖1:空佇列

圖2:進隊 3 個元素:1、2、3

圖3:出隊 2 個元素:1、2

圖4:入隊 2 個元素:4、5

到此為止,一切正常,

圖5:入隊 1 個元素,但在圖4中 rear = 5已經超出陣列的最大范圍,所以圖5入隊一個元素會報錯,這個佇列不能再插入元素了,

圖5的佇列滿了嗎?沒滿!能繼續插入元素嗎?不能!有剩余空間卻不能用,這就好比有空房的酒店不讓客戶入住,這叫不會做生意,

滿佇列的是空間用盡,不能再插入元素的佇列,雖然圖5的佇列也不能繼續插入元素了,但它還有剩余空間,所以這樣的佇列還不能稱之為滿佇列,可稱之為假滿佇列

之所以假滿佇列存在問題,是因為順序佇列的空間是有限的,通過若干入隊操作之后,我們的 rear “跑”到陣列外從而導致越界了,

假滿佇列

明明才存盤了一個元素,卻因為假滿,整個佇列不能再存盤了,這樣的佇列肯定不是合格的資料結構,

怎么解決呢?報錯是 rear 越界導致,而佇列的前大部分都是空閑的,所以當 rear 越界時,我們可不可以將其移動到下標 0 處呢?

顯然是可以的,這樣就構成了一個“回圈”,我們稱這種 frontrear可以回圈利用的佇列為回圈佇列

3.3. 回圈佇列

為了突出“回圈”二字,我們將這種順序佇列畫成一個圓:

回圈佇列

回圈佇列的 rearfront 能夠在佇列中一圈一圈地轉,像鐘表的時針和分針一樣,不會再出現不能利用的空間了,

順序佇列的形式從“直的”變成這種可回圈的之后,對于狀態的判斷也改變了,

【空佇列】:佇列中沒有元素,如上圖,

請注意,空佇列的條件并不是 front = rear = 0,比如一個空佇列經過 3 次入隊和 3 次出隊操作后仍為空佇列:

空佇列

所以,回圈佇列為空佇列時,條件應該為 front = rear

【滿佇列】:佇列中沒有空閑空間

滿佇列

上圖是一個最大容量為 8 的空佇列,入隊 7 個元素后,佇列中還剩 1 個空閑位置,如果此時我們再入隊 1 個元素:

是滿佇列嗎?

此時佇列中確實沒有空閑空間了,但注意,此時佇列滿足了 rear = front ,但滿足 rear = front的佇列不應該是空佇列嗎?

這就產生誤會了,

不如我們退一步海闊天空,少用一個元素,借此來消除誤會,如下圖,規定這樣是一個滿佇列,

滿佇列

我們規定,front 出現在 rear 的下一個位置時,佇列為滿佇列

比如在上圖的滿佇列中, front = 3rear = 2 的下一個位置,

所以佇列為滿佇列的判定條件為:rear + 1 = front,但這的條件是不準確的

因為回圈佇列中的 frontrear 都是回圈使用的,就像鐘表的時針一樣,所以我們僅根據下標的大小來判斷位置是不合理的,下面兩個均是滿佇列,右圖不滿足rear + 1 = front

就像鐘表的時針滿 12 歸零一樣,frontrear 也應該滿某個數后歸零,這個數就是 MAXSIZE

比如 rear = 7 時,如果按平常做法來 ,下一步應該是 rear = 8,但在這里,我們讓其歸零,所以下一步應該是 rear = 0

用數學公式來表示上面的歸零程序就是:rear % MAXSIZE

所以滿佇列的判斷條件應該為:(rear + 1) % MAXSIZE = front

【非空非滿佇列】很好理解,不再贅述,

3.4. 鏈佇列

我們使用帶頭結點的單鏈表來實作鏈佇列,

【空佇列】:即一個空鏈表,此時隊頭指標(兼鏈表頭指標)和隊尾指標均指向頭結點,

空佇列

【非空佇列】:不像順序佇列那樣有空間的限制,鏈佇列的空間是不受限制的(只要你的記憶體足夠大),所以自然不存在“滿佇列”“回圈佇列”的概念,

4. 初始化

在進行佇列的操作前,應該先將其初始化出來,即初始化一個空佇列出來,

4.1. 順序佇列

將佇列的隊頭下標和隊尾下標置為 0 即可,

/**
 * 初始化順序佇列:將隊頭下標和隊尾下標置為0
 * queue: 指向佇列的指標
 */
void init(QueueArray *queue)
{
    queue->front = 0;
    queue->rear = 0;
}

4.2. 鏈佇列

創造出頭結點,然后將隊頭指標和隊尾指標均指向頭結點即可,

/**
 * 初始化鏈佇列:將隊頭指標和隊尾指標指向頭結點
 */
void init(QueueLink *queue)
{
    //創造頭結點
    QueueNode *head_node = create_node(0);
    //隊頭指標 隊尾指標指向頭結點
    queue->front = head_node;
    queue->rear = head_node;
}

5. 入隊操作

入隊操作只允許元素從隊尾進,

5.1. 順序佇列

前面我們規定,順序佇列的隊尾下標為隊尾元素的下一個元素,所以直接將待入隊元素放入隊尾下標處,然后隊尾下標“加一”,(注意:回圈佇列中的加一要對 MAXSIZE 取模)

入隊程序

/**
 * 入隊操作
 * queue: 指向佇列的指標
 * elem: 入隊的資料
 * return: 0失敗,1成功
 */
int en_queue(QueueArray *queue, int elem)
{
    //判斷佇列是否已滿
    if ((queue->rear + 1) % MAXSIZE == queue->front) {
        printf("佇列已滿,無法繼續入隊,\n");
        return 0;
    }
    //元素入隊
    queue->data[queue->rear] = elem;
    //隊尾下標加一
    queue->rear = (queue->rear + 1) % MAXSIZE;
    return 1;
}

5.2. 鏈佇列

鏈佇列的入隊操作本質是單鏈表的尾插法:

/** * 入隊操作
 * queue: 指向佇列的指標
 * elem: 入隊的資料
 */
void en_queue(QueueLink *queue, int elem)
{
    //創造新結點
    QueueNode *new = create_node(elem);
    //入隊(尾插法)
    queue->rear->next = new;
    queue->rear = new;
}

6. 出隊操作

出隊操作只允許元素從隊頭出,

6.1. 順序佇列

將隊頭下標處的元素出隊,然后將隊頭下標“加一”(對 MAXSIZE 取模),

出隊程序

/**
 * 出隊操作
 * queue: 指向佇列的指標
 * elem: 指向保存出隊資料的變數
 * return: 0失敗,1成功
 */
int de_queue(QueueArray *queue, int *elem)
{
    //判讀佇列是否為空
    if (queue->front == queue->rear) {
        printf("佇列空,無元素可出,\n");
        return 0;
    }
    //元素出隊
    *elem = queue->data[queue->front];
    //隊頭下標加一
    queue->front = (queue->front + 1) % MAXSIZE;
    return 1;
}

6.2. 鏈佇列

鏈佇列的出隊操作本質上是單鏈表的頭刪法,注意,如果出隊的是佇列中最后一個元素,需要在出隊后,將隊尾指標重新指向頭結點,重新形成空佇列,

/**
 * 出隊操作
 * queue: 指向佇列的指標
 * elem: 指向保存變數的指標
 * return: 0失敗,1成功
 */
int de_queue(QueueLink *queue, int *elem)
{
    //判讀佇列是否為空
    if (queue->front == queue->rear) {
        printf("佇列空,無元素可出,\n");
        return 0;
    }
    QueueNode *front_node = queue->front->next; //隊頭元素
    //保存資料
    *elem = front_node->data;
    //隊頭元素出隊(頭刪法)
    queue->front->next = front_node->next;
    //如果元素出完,隊尾指標重新指向頭結點
    if (front_node == queue->rear)
        queue->rear = queue->front;
    free(front_node);
}

7. 遍歷操作

這里以列印整個佇列為例,介紹如何遍歷佇列,

順序佇列有隊頭下標和隊尾下標,鏈佇列有隊頭指標和隊尾指標,我們要做的就是借助一個臨時變數,從隊頭下標逐個遍歷到隊尾下標即可,

7.1. 順序佇列

借助臨時變數 i,從隊頭下標開始逐個“加一”直到隊尾下標結束,

開始標志為:i = front

加一操作為:i = (i + 1) % MAXSIZE

結束標志為:i % MAXSIZE = rear

/**
 * 列印佇列
 */
void output(QueueArray queue)
{
    int i = queue.front;
    while (i % MAXSIZE != queue.rear) {
        printf("%d ", queue.data[i]);
        i = (i + 1) % MAXSIZE;
    }
    printf("\n");
}

如何計算順序佇列的長度?當然你可以遍歷佇列然后借助計數變數來存盤長度,這樣比較麻煩,因為順序佇列是使用陣列實作的,所以順序佇列的長度我們可以直接根據下標計算出來,

如果是一個非回圈佇列,那很簡單,直接 rear - front 就是佇列的長度了,

但回圈佇列不能這樣直接減了,因為 rearfront 之間的位置關系是不確定的,

左圖 rear < front,我們可以將其長度看成兩部分組成:

  • 下標 0 到 rear,長度為 rear - 0
  • 下標 MAXSIZE - 1rear,長度為 MAXSIZE - front

所以長度為 rear - front + MAXSIZE

為了滿足右圖 rear > front 的情況,如果按照上式,則此時多加了一個 MAXSIZE,所以需要對其再對 MAXIZE 取余,

所以回圈佇列的長度為 (rear - front + MAXSIZE) % MAXSIZE(空佇列也滿足),

7.2. 鏈佇列

借助指標 p 從隊頭元素遍歷至隊尾元素即可,

/**
 * 列印佇列
 */
void output(QueueLink *queue)
{
    QueueNode *p = queue->front->next; //p指向隊頭元素
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

以上就是佇列的基本原理及操作,

完整代碼請移步至 GitHub | Gitee 獲取

如有錯誤,還請指正,

如果覺得寫的不錯,可以點個贊和關注,后續會有更多資料結構和演算法相關文章,

【推薦閱讀】

  • 【資料結構】用詳細圖文把「堆疊」搞明白(原理篇)
  • 詳解 | 寫完這篇文章我終于搞懂鏈表了
  • 如何掌握 C 語言的一大利器——指標?
  • 用圖和代碼讓你搞懂順序結構線性表

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273156.html

標籤:其他

上一篇:即時訊息技術剖析與實戰

下一篇:Z-score模型

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more