国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)

本文是算法與數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)筆記第四篇,將持續(xù)更新,歡迎小伙伴們閱讀學(xué)習(xí) 。有不懂的或錯(cuò)誤的地方,歡迎交流

棧是一種線性數(shù)據(jù)結(jié)構(gòu),其只允許在固定的一端進(jìn)行插入和刪除元素操作。進(jìn)行數(shù)據(jù)插入和刪除操作的一端稱為棧頂 (Top), 另一端稱為棧底 (Bottom)。棧中的數(shù)據(jù)元素遵守后進(jìn)先出 LIFO(Last In First Out)的原則,即最后進(jìn)入的元素最先被訪問。

壓棧(push):棧的插入操作叫做進(jìn)棧/壓棧/入棧,入數(shù)據(jù)在棧頂。
出棧(pop):棧的刪除操作叫做出棧,出數(shù)據(jù)也在棧頂。

下面的動(dòng)圖可以更直觀的理解棧的出入棧

數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)

棧的特點(diǎn)

  1. 后進(jìn)先出(LIFO):最后進(jìn)入棧的元素最先被訪問,而最先進(jìn)入棧的元素最后被訪問。
  2. 只允許在一端進(jìn)行插入和刪除操作:棧通常只允許在棧頂進(jìn)行插入和刪除操作,而不允許在其他位置進(jìn)行操作。
  3. 棧頂指針:棧頂指針指向棧頂元素,它隨著元素的插入和刪除而改變。

棧的應(yīng)用

  1. 函數(shù)調(diào)用:編程語(yǔ)言中的函數(shù)調(diào)用過程使用棧來(lái)保存函數(shù)的返回地址、參數(shù)和局部變量等信息。每當(dāng)一個(gè)函數(shù)被調(diào)用,其相關(guān)信息被壓入棧中;當(dāng)函數(shù)執(zhí)行完畢,這些信息被彈出棧,控制權(quán)回到調(diào)用函數(shù)。
  2. 表達(dá)式求值:棧在表達(dá)式求值中起到重要作用。通過將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式,并使用棧來(lái)存儲(chǔ)操作數(shù)和運(yùn)算符,可以實(shí)現(xiàn)對(duì)表達(dá)式的求值。
  3. 括號(hào)匹配:棧常用于檢查表達(dá)式中括號(hào)是否匹配的問題。遍歷表達(dá)式時(shí),遇到左括號(hào)就將其壓入棧中,遇到右括號(hào)時(shí)與棧頂元素進(jìn)行匹配,如果匹配則彈出棧頂元素,繼續(xù)遍歷;如果不匹配,則括號(hào)不匹配。
  4. 撤銷操作:在文本編輯器或圖形處理軟件中,??捎糜趯?shí)現(xiàn)撤銷操作。每次執(zhí)行操作時(shí),相關(guān)信息被壓入棧中,當(dāng)用戶需要撤銷操作時(shí),將棧頂元素彈出,回退到上一個(gè)狀態(tài)。
  5. 中斷處理和現(xiàn)場(chǎng)保護(hù):中斷是計(jì)算機(jī)系統(tǒng)中常見的事件,例如硬件故障、外部設(shè)備請(qǐng)求等。當(dāng)系統(tǒng)發(fā)生中斷時(shí),當(dāng)前正在執(zhí)行的程序需要被暫停,轉(zhuǎn)而處理中斷事件。棧在中斷處理中扮演著重要角色,用于保存和恢復(fù)程序的執(zhí)行現(xiàn)場(chǎng)。當(dāng)發(fā)生中斷時(shí),系統(tǒng)會(huì)自動(dòng)將當(dāng)前程序的執(zhí)行現(xiàn)場(chǎng)(包括程序計(jì)數(shù)器、寄存器等狀態(tài)信息)保存到棧中。然后,中斷服務(wù)程序(Interrupt Service Routine,ISR)被執(zhí)行,處理中斷事件。處理完成后,系統(tǒng)從棧中恢復(fù)之前保存的執(zhí)行現(xiàn)場(chǎng),繼續(xù)原來(lái)被中斷的程序的執(zhí)行。通過棧的保存和恢復(fù)操作,確保中斷處理的流程正確且不會(huì)破壞原有的程序執(zhí)行。

棧的基本操作

  1. 初始化棧。
  2. 壓棧,往棧中添加一個(gè)元素。
  3. 出棧,從棧頂刪除一個(gè)元素。
  4. 獲取棧頂元素。
  5. 判斷棧是否為空、是否滿棧。
  6. 棧的銷毀。

注意:在操作棧時(shí),要避免“上溢”和“下溢”
上溢:指棧已滿,若繼續(xù)存數(shù)據(jù),則會(huì)上溢,出現(xiàn)報(bào)錯(cuò)(棧滿再存出現(xiàn)上溢)
下溢:指棧已空,若繼續(xù)取數(shù)據(jù),則會(huì)下溢,出現(xiàn)報(bào)錯(cuò)(??赵偃〕霈F(xiàn)下溢)

C 語(yǔ)言

棧有兩種實(shí)現(xiàn)方式,一種是使用數(shù)組來(lái)實(shí)現(xiàn),另一種是使用鏈表來(lái)實(shí)現(xiàn)。下面是總結(jié)的用數(shù)組和鏈表實(shí)現(xiàn)的優(yōu)缺點(diǎn)。

用數(shù)組實(shí)現(xiàn)的優(yōu)點(diǎn)
1 . 數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,因此訪問元素時(shí)速度較快。CPU高速緩存命中率會(huì)更高。
2. 下標(biāo)的隨機(jī)訪問。尾插尾刪效率不錯(cuò).
3. 數(shù)組實(shí)現(xiàn)相對(duì)簡(jiǎn)單,不需要額外的指針來(lái)維護(hù)元素之間的關(guān)系。
數(shù)組實(shí)現(xiàn)的缺點(diǎn)
1 . 數(shù)組的大小是固定的,因此在棧空間不足時(shí)需要進(jìn)行擴(kuò)容操作,這可能會(huì)導(dǎo)致性能下降。
2 . 在刪除元素時(shí),需要移動(dòng)數(shù)組中的其他元素,這也可能會(huì)導(dǎo)致性能下降。

用鏈表實(shí)現(xiàn)的優(yōu)點(diǎn)
1 .鏈表的大小可以動(dòng)態(tài)調(diào)整,因此可以更好地利用空間。
2 . 任意位置插入刪除O(1) ,鏈表的性能較高,因?yàn)椴恍枰苿?dòng)其他元素。
鏈表實(shí)現(xiàn)的缺點(diǎn)
1 . CPU高速緩存命中率會(huì)更低,不是連續(xù)存儲(chǔ)的,因此訪問元素時(shí)速度較慢。
2. 不支持下標(biāo)的隨機(jī)訪問.

用鏈表還是用數(shù)組結(jié)構(gòu)實(shí)現(xiàn),這個(gè)問題的答案取決于具體的應(yīng)用場(chǎng)景和需求,下面我們給出了數(shù)組棧和鏈表?xiàng)5?C 語(yǔ)言實(shí)現(xiàn)。

數(shù)組棧

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100

// 定義棧結(jié)構(gòu)
typedef struct {
    int data[MAX_SIZE]; // 用數(shù)組存儲(chǔ)棧的元素
    int top; // 棧頂指針
} Stack;

// 初始化棧
void init(Stack *stack) {
    stack->top = -1; // 初始化棧頂指針為-1,表示棧為空
}

// 判斷棧是否為空
int isEmpty(Stack *stack) {
    return stack->top == -1;
}

// 判斷棧是否已滿
int isFull(Stack *stack) {
    return stack->top == MAX_SIZE - 1;
}

// 入棧操作
void push(Stack *stack, int item) {
    if (isFull(stack)) {
        printf("Stack overflow\n");
        return;
    }
    stack->top++; // 棧頂指針加1
    stack->data[stack->top] = item; // 將元素入棧
}

// 出棧操作
int pop(Stack *stack) {
    int item;
    if (isEmpty(stack)) {
        printf("Stack underflow\n");
        return -1;
    }
    item = stack->data[stack->top]; // 獲取棧頂元素
    stack->top--; // 棧頂指針減1
    return item;
}

// 獲取棧頂元素
int peek(Stack *stack) {
    if (isEmpty(stack)) {
        printf("Stack is empty\n");
        return -1;
    }
    return stack->data[stack->top];
}

// 銷毀棧
void destroy(Stack *stack) {
    stack->top = -1; // 將棧頂指針重置為-1,表示棧為空
}

int main() {
    Stack stack;
    init(&stack);

    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);

    printf("Top element: %d\n", peek(&stack));

    printf("Popped element: %d\n", pop(&stack));
    printf("Popped element: %d\n", pop(&stack));

    printf("Top element: %d\n", peek(&stack));

    destroy(&stack);

    return 0;
}

鏈表?xiàng)?/h4>
#include <stdio.h>
#include <stdlib.h>

// 定義鏈表節(jié)點(diǎn)
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 定義棧結(jié)構(gòu)
typedef struct {
    Node* top; // 棧頂指針
} Stack;

// 初始化棧
void init(Stack* stack) {
    stack->top = NULL; // 初始化棧頂指針為空
}

// 判斷棧是否為空
int isEmpty(Stack* stack) {
    return stack->top == NULL;
}

/* 由于鏈表實(shí)現(xiàn)的棧理論上沒有大小限制,因此不存在“棧滿”的情況。在入棧操作時(shí)只需要?jiǎng)?chuàng)建新節(jié)點(diǎn),并將其插入到鏈表頭部即可。
如需限制棧的大小,可以通過設(shè)置一個(gè)變量來(lái)記錄當(dāng)前棧中存儲(chǔ)的元素個(gè)數(shù),然后在入棧時(shí)進(jìn)行判斷,若已滿則不允許再次入棧。*/

// 入棧操作
void push(Stack* stack, int item) {
    Node* newNode = (Node*)malloc(sizeof(Node)); // 創(chuàng)建新節(jié)點(diǎn)
    if (newNode == NULL) {
        printf("Memory allocation failed\n");
        return;
    }
    newNode->data = item; // 設(shè)置新節(jié)點(diǎn)的數(shù)據(jù)為要入棧的元素
    newNode->next = stack->top; // 將新節(jié)點(diǎn)插入到棧頂
    stack->top = newNode; // 更新棧頂指針
}

// 出棧操作
int pop(Stack* stack) {
    if (isEmpty(stack)) {
        printf("Stack underflow\n");
        return -1;
    }
    Node* topNode = stack->top; // 獲取棧頂節(jié)點(diǎn)
    int item = topNode->data; // 獲取棧頂元素
    stack->top = topNode->next; // 更新棧頂指針
    free(topNode); // 釋放棧頂節(jié)點(diǎn)的內(nèi)存
    return item;
}

// 獲取棧頂元素
int peek(Stack* stack) {
    if (isEmpty(stack)) {
        printf("Stack is empty\n");
        return -1;
    }
    return stack->top->data;
}

// 銷毀棧
void destroy(Stack* stack) {
    while (!isEmpty(stack)) {
        pop(stack);
    }
}

int main() {
    Stack stack;
    init(&stack);

    push(&stack, 1);
    push(&stack, 2);
    push(&stack, 3);

    printf("Top element: %d\n", peek(&stack));

    printf("Popped element: %d\n", pop(&stack));
    printf("Popped element: %d\n", pop(&stack));

    printf("Top element: %d\n", peek(&stack));

    destroy(&stack);

    return 0;
}

隊(duì)列

隊(duì)列是棧的兄弟結(jié)構(gòu),是只允許在一端進(jìn)行插入元素操作,在另一端進(jìn)行刪除元素操作的線性數(shù)據(jù)結(jié)構(gòu)。進(jìn)行插入操作的一端稱為隊(duì)尾,進(jìn)行刪除操作的一端稱為隊(duì)頭。隊(duì)列中的數(shù)據(jù)元素遵守先進(jìn)先出 FIFO(First In First Out)的原則,即最先進(jìn)入的元素最先被訪問。

數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)

隊(duì)列的特點(diǎn)

  1. 先進(jìn)先出(FIFO):第一個(gè)插入的元素是第一個(gè)被刪除的元素,因此表現(xiàn)為先進(jìn)先出的順序。
  2. 元素只能從隊(duì)尾插入(入隊(duì))和從隊(duì)頭刪除(出隊(duì))。

隊(duì)列的應(yīng)用

  1. 消息傳遞:在消息傳遞模型中,消息被發(fā)送到隊(duì)列中等待接收方進(jìn)行處理。發(fā)送方可以通過入隊(duì)操作向隊(duì)列發(fā)送消息,而接收方則通過出隊(duì)操作從隊(duì)列中獲取消息。
  2. 緩存區(qū)管理:在網(wǎng)絡(luò)通信、磁盤I/O等場(chǎng)景中,隊(duì)列被用于管理數(shù)據(jù)的緩沖區(qū)。接收到的數(shù)據(jù)被放入隊(duì)列中,然后按照一定的規(guī)則從隊(duì)列中取出,保證數(shù)據(jù)按照順序傳輸。
  3. 任務(wù)調(diào)度:操作系統(tǒng)中的任務(wù)調(diào)度通常使用隊(duì)列來(lái)管理待執(zhí)行的任務(wù),按照先來(lái)先服務(wù)(First-Come-First-Served,F(xiàn)CFS)的原則進(jìn)行調(diào)度。
  4. 廣度優(yōu)先搜索:圖的廣度優(yōu)先搜索算法(BFS)使用隊(duì)列來(lái)保存待訪問的節(jié)點(diǎn)。從起始節(jié)點(diǎn)開始,將其放入隊(duì)列中,然后不斷從隊(duì)列中取出節(jié)點(diǎn),并將其鄰接節(jié)點(diǎn)放入隊(duì)列,直到隊(duì)列為空。

隊(duì)列的基本操作

  1. 入隊(duì)(enqueue):將元素插入到隊(duì)列的末尾。
  2. 出隊(duì)(dequeue):從隊(duì)列的頭部刪除一個(gè)元素并返回。
  3. 獲取隊(duì)列頭部元素的值。
  4. 獲取隊(duì)列中元素的個(gè)數(shù)。
  5. 判斷隊(duì)列是否為空、是否已滿。
  6. 隊(duì)列的銷毀

C 語(yǔ)言

隊(duì)列有兩種實(shí)現(xiàn)方式,一種是使用數(shù)組來(lái)實(shí)現(xiàn),另一種是使用鏈表來(lái)實(shí)現(xiàn)。下面是總結(jié)的用數(shù)組和鏈表實(shí)現(xiàn)的優(yōu)缺點(diǎn)。

用數(shù)組實(shí)現(xiàn)的優(yōu)點(diǎn)
1 . 數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,因此訪問元素時(shí)速度較快。CPU高速緩存命中率會(huì)更高。
2 . 數(shù)組實(shí)現(xiàn)相對(duì)簡(jiǎn)單,不需要額外的指針來(lái)維護(hù)元素之間的關(guān)系。
數(shù)組實(shí)現(xiàn)的缺點(diǎn)
1 . 需要事先確定隊(duì)列的最大長(zhǎng)度,這可能會(huì)導(dǎo)致性能下降。
2 . 需要移動(dòng)元素來(lái)保持隊(duì)列的順序。

用鏈表實(shí)現(xiàn)的優(yōu)點(diǎn)
1 . 不需要事先確定隊(duì)列的最大長(zhǎng)度,可以動(dòng)態(tài)擴(kuò)展。
2 . 插入和刪除操作只需要修改指針,不需要移動(dòng)元素。
3 . 可以實(shí)現(xiàn)多個(gè)隊(duì)列共享一個(gè)鏈表。
鏈表實(shí)現(xiàn)的缺點(diǎn)
1 . CPU高速緩存命中率會(huì)更低,不是連續(xù)存儲(chǔ)的,因此訪問元素時(shí)速度較慢。
2 .實(shí)現(xiàn)相對(duì)復(fù)雜。

用鏈表還是用數(shù)組結(jié)構(gòu)實(shí)現(xiàn),這個(gè)問題的答案取決于具體的應(yīng)用場(chǎng)景和需求,下面我們給出了數(shù)組隊(duì)列和鏈表隊(duì)列的 C 語(yǔ)言實(shí)現(xiàn)。

數(shù)組隊(duì)列

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100 // 隊(duì)列的最大大小

// 定義隊(duì)列結(jié)構(gòu)體
struct queue {
    int* arr; // 數(shù)組指針
    int front; // 隊(duì)首位置
    int rear; // 隊(duì)尾位置
    int size; // 當(dāng)前隊(duì)列中存儲(chǔ)的元素個(gè)數(shù)
};

// 初始化隊(duì)列
struct queue* init() {
    struct queue* q = (struct queue*)malloc(sizeof(struct queue));
    q->arr = (int*)malloc(MAX_SIZE * sizeof(int));
    q->front = 0;
    q->rear = -1;
    q->size = 0;
    return q;
}

// 判斷隊(duì)列是否為空
int is_empty(struct queue* q) {
    return q->size == 0;
}

// 判斷隊(duì)列是否已滿
int is_full(struct queue* q) {
    return q->size == MAX_SIZE;
}

// 入隊(duì)
void enqueue(struct queue* q, int value) {
    if (is_full(q)) {
        printf("Queue Overflow\n");
        return;
    }
    q->rear = (q->rear + 1) % MAX_SIZE;
    q->arr[q->rear] = value;
    q->size++;
}

// 出隊(duì)
int dequeue(struct queue* q) {
    if (is_empty(q)) {
        printf("Queue Underflow\n");
        return -1;
    }
    int value = q->arr[q->front];
    q->front = (q->front + 1) % MAX_SIZE;
    q->size--;
    return value;
}

// 獲取隊(duì)首元素
int front(struct queue* q) {
    if (is_empty(q)) {
        printf("Queue Underflow\n");
        return -1;
    }
    return q->arr[q->front];
}

// 獲取隊(duì)列長(zhǎng)度
int size(struct queue* q) {
    return q->size;
}

// 銷毀隊(duì)列
void destroy(struct queue* q) {
    free(q->arr);
    free(q);
}

int main() {
    struct queue* q = init();
    enqueue(q, 10);
    enqueue(q, 20);
    enqueue(q, 30);
    printf("%d\n", dequeue(q)); // 輸出10
    printf("%d\n", front(q)); // 輸出20
    enqueue(q, 40);
    printf("%d\n", dequeue(q)); // 輸出20
    printf("%d\n", dequeue(q)); // 輸出30
    printf("%d\n", dequeue(q)); // 輸出40
    printf("%d\n", dequeue(q)); // 輸出Queue Underflow
    destroy(q); // 銷毀隊(duì)列
    return 0;
}

鏈表隊(duì)列

#include <stdio.h>
#include <stdlib.h>

// 定義隊(duì)列節(jié)點(diǎn)結(jié)構(gòu)體
struct queue_node {
    int data;
    struct queue_node* next;
};

// 定義隊(duì)列結(jié)構(gòu)體
struct queue {
    struct queue_node* front; // 隊(duì)首指針
    struct queue_node* rear; // 隊(duì)尾指針
    int size; // 當(dāng)前隊(duì)列中存儲(chǔ)的元素個(gè)數(shù)
};

// 初始化隊(duì)列
struct queue* init() {
    struct queue* q = (struct queue*)malloc(sizeof(struct queue));
    q->front = NULL;
    q->rear = NULL;
    q->size = 0;
    return q;
}

// 判斷隊(duì)列是否為空
int is_empty(struct queue* q) {
    return q->size == 0;
}

// 同鏈表?xiàng)?,鏈表?duì)列沒有固定的大小限制,因此不需要判斷隊(duì)列是否已滿

// 入隊(duì)
void enqueue(struct queue* q, int value) {
    // 創(chuàng)建新節(jié)點(diǎn)
    struct queue_node* new_node = (struct queue_node*)malloc(sizeof(struct queue_node));
    new_node->data = value;
    new_node->next = NULL;

    if (is_empty(q)) {
        q->front = new_node;
        q->rear = new_node;
    } else {
        q->rear->next = new_node;
        q->rear = new_node;
    }

    q->size++;
}

// 出隊(duì)
int dequeue(struct queue* q) {
    if (is_empty(q)) {
        printf("Queue Underflow\n");
        return -1;
    }

    struct queue_node* temp = q->front;
    int value = temp->data;

    if (q->front == q->rear) {
        q->front = NULL;
        q->rear = NULL;
    } else {
        q->front = q->front->next;
    }

    free(temp);
    q->size--;

    return value;
}

// 獲取隊(duì)首元素
int front(struct queue* q) {
    if (is_empty(q)) {
        printf("Queue Underflow\n");
        return -1;
    }
    return q->front->data;
}

// 獲取隊(duì)列長(zhǎng)度
int size(struct queue* q) {
    return q->size;
}

// 銷毀隊(duì)列
void destroy(struct queue* q) {
    while (!is_empty(q)) {
        dequeue(q);
    }
    free(q);
}

int main() {
    struct queue* q = init();
    enqueue(q, 10);
    enqueue(q, 20);
    enqueue(q, 30);
    printf("%d\n", dequeue(q)); // 輸出10
    printf("%d\n", front(q)); // 輸出20
    enqueue(q, 40);
    printf("%d\n", dequeue(q)); // 輸出20
    printf("%d\n", dequeue(q)); // 輸出30
    printf("%d\n", dequeue(q)); // 輸出40
    printf("%d\n", dequeue(q)); // 輸出Queue Underflow
    destroy(q); // 銷毀隊(duì)列
    return 0;
}

結(jié)論

棧和隊(duì)列作為常見的數(shù)據(jù)結(jié)構(gòu),在算法和程序設(shè)計(jì)中扮演著重要的角色。本文總結(jié)了棧和隊(duì)列的特點(diǎn)、應(yīng)用場(chǎng)景以及C語(yǔ)言實(shí)現(xiàn)。通過深入理解它們的原理和應(yīng)用,可以更好地解決問題和優(yōu)化算法。希望本文能夠?qū)ψx者對(duì)棧和隊(duì)列的學(xué)習(xí)和應(yīng)用提供幫助。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474034.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(四)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)奇妙旅程之棧和隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)奇妙旅程之棧和隊(duì)列

    ??????? write in front???????? ?????????大家好,我是xiaoxie.希望你看完之后,有不足之處請(qǐng)多多諒解,讓我們一起共同進(jìn)步????? . ?? ?xiaoxie?????????—CSDN博客 本文由xiaoxie??????????原創(chuàng) CSDN?如需轉(zhuǎn)載還請(qǐng)通知???? 個(gè)人主頁(yè):xiaoxie??

    2024年02月04日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)分享之棧和隊(duì)列詳解

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)分享之棧和隊(duì)列詳解

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專欄分類:數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)分享? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你了解更多數(shù)據(jù)結(jié)構(gòu)的知識(shí) ? ???? 這一節(jié)要分享的是一個(gè)全新的結(jié)構(gòu)–棧和隊(duì)列,棧和隊(duì)列總是會(huì)一起出現(xiàn),因?yàn)樗鼈兊拇鎯?chǔ)方式剛好相反,一個(gè)先進(jìn)先出一

    2024年02月03日
    瀏覽(39)
  • Java------數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列(簡(jiǎn)單講解)

    Java------數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列(簡(jiǎn)單講解)

    本篇碎碎念 :時(shí)隔n個(gè)月,繼續(xù)寫博客,假期落下的進(jìn)度,在開學(xué)后努力追趕, 假期不努力,開學(xué)徒傷悲啊,此時(shí)此刻真想對(duì)自己說一句,活該啊~~~~ 欠下的鏈表練習(xí)題講解會(huì)在下次更新~~~~ 今日份勵(lì)志文案: ?萬(wàn)物皆有裂痕,那是光照進(jìn)來(lái)的地方 棧:一種特殊的線性表,其只允

    2024年04月14日
    瀏覽(21)
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)——線性表之棧和隊(duì)列

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)——線性表之棧和隊(duì)列

    為什么會(huì)定義棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu)呢? 原因在于: 之所以會(huì)定義棧和隊(duì)列這樣的數(shù)據(jù)結(jié)構(gòu) 是因?yàn)樗麄冇袃纱筇匦?: 第一: 他們可以保存程序運(yùn)行路徑中各個(gè)點(diǎn)的信息,以便用于回溯操作或其他需要訪問已經(jīng)訪問過的節(jié)點(diǎn)信息的操作。 比如: 棧用于解決迷宮問題,就

    2023年04月11日
    瀏覽(95)
  • 數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列的實(shí)現(xiàn)與詳細(xì)解析

    個(gè)人主頁(yè):點(diǎn)我進(jìn)入主頁(yè) 專欄分類:C語(yǔ)言初階? ? ??C語(yǔ)言程序設(shè)計(jì)————KTV? ? ? ?C語(yǔ)言小游戲? ? ?C語(yǔ)言進(jìn)階 C語(yǔ)言刷題? ? ? ?數(shù)據(jù)結(jié)構(gòu)初階 歡迎大家點(diǎn)贊,評(píng)論,收藏。 一起努力,一起奔赴大廠。 目錄 1.前言 2.棧 2.1棧的概念與性質(zhì) 2.2棧的實(shí)現(xiàn) 3.隊(duì)列 3.1隊(duì)列的概

    2024年02月05日
    瀏覽(27)
  • Java 數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列(頭歌平臺(tái),詳細(xì)注釋)

    Java 數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列(頭歌平臺(tái),詳細(xì)注釋)

    目錄 第1關(guān):實(shí)現(xiàn)基于數(shù)組的 任務(wù)描述 相關(guān)知識(shí) 棧 棧的數(shù)組表示 Java 泛型簡(jiǎn)介 泛型方法 泛型類應(yīng)用場(chǎng)景示例 代碼:? 第2關(guān):實(shí)現(xiàn)基于鏈表的棧 任務(wù)描述 相關(guān)知識(shí) 棧的鏈?zhǔn)酱鎯?chǔ) 入棧 出棧 代碼:? 第3關(guān):基于數(shù)組的隊(duì)列 任務(wù)描述 相關(guān)知識(shí) 隊(duì)列 隊(duì)列的數(shù)組實(shí)現(xiàn) 循環(huán)隊(duì)列

    2024年04月25日
    瀏覽(46)
  • 高效學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列篇(五千字超詳細(xì)教程)

    高效學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列篇(五千字超詳細(xì)教程)

    大家好呀我是小生??????今天我們來(lái)學(xué)習(xí) 數(shù)據(jù)結(jié)構(gòu)的棧和隊(duì)列 ,小生為了方便大家理解特意附上了 許多圖片和源碼 一起加油吧 ?????? ? 下面是我們今天要學(xué)習(xí)的內(nèi)容 ?????? ?一.棧 ? ? ? ? ?1.??棧的基本概念 ?2.??棧的結(jié)構(gòu)選擇 ??順序表和鏈表的優(yōu)缺點(diǎn)對(duì)比:

    2023年04月08日
    瀏覽(24)
  • 《數(shù)據(jù)結(jié)構(gòu)與算法》之棧結(jié)構(gòu)

    《數(shù)據(jù)結(jié)構(gòu)與算法》之棧結(jié)構(gòu)

    在計(jì)算機(jī)發(fā)明之初是為了計(jì)算,所以叫計(jì)算機(jī),對(duì)我們給定的一個(gè)算式,然后給定的一套規(guī)則 加,減,乘,除,等,它就可以自己進(jìn)行計(jì)算了,然后返回一個(gè)結(jié)果給我們 對(duì)于一般的算式 : 2+3+4 很顯然,從左往右依次掃描,依次相加很簡(jiǎn)單的計(jì)算出來(lái),因?yàn)樗鼈兪峭?jí)運(yùn)算,

    2024年02月06日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列 - 超詳細(xì)的教程,手把手教你認(rèn)識(shí)并運(yùn)用棧和隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列 - 超詳細(xì)的教程,手把手教你認(rèn)識(shí)并運(yùn)用棧和隊(duì)列

    棧:后進(jìn)先出 隊(duì)列:先進(jìn)先出 棧:是一種特殊的 線性表 , 只允許在固定的一端插入或者刪除元素 ,一個(gè)棧包含了棧頂和棧底。只能在棧頂插入或者刪除元素。 棧的底層 是由 數(shù)組 實(shí)現(xiàn)的。 棧遵循先入后出原則,也就是先插入的元素得到后面才能刪除,后面插入的元素比

    2024年02月07日
    瀏覽(89)
  • 數(shù)據(jù)結(jié)構(gòu)之堆——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(六)

    數(shù)據(jù)結(jié)構(gòu)之堆——算法與數(shù)據(jù)結(jié)構(gòu)入門筆記(六)

    本文是算法與數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)筆記第六篇,將持續(xù)更新,歡迎小伙伴們閱讀學(xué)習(xí)。有不懂的或錯(cuò)誤的地方,歡迎交流 當(dāng)涉及到高效的數(shù)據(jù)存儲(chǔ)和檢索時(shí),堆(Heap)是一種常用的數(shù)據(jù)結(jié)構(gòu)。上一篇文章中介紹了樹和完全二叉樹,堆就是一個(gè)完全二叉樹,可以分為最大堆和最小

    2024年02月11日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包