棧(stack ;a pile of things)
只能在一端插入刪除;
「先進先出」「操作受限的線性表」
初始化(順序儲存):
int stack[maxsize];
int top = -1;
入棧:stack[++top] = e;
出棧:stack[top–] =e;
棧空:top == -1;
棧滿:top == maxsize - 1;
鏈棧:
初始化:
lnode* head = (lnode*)malloc(sizeof(lnode));
head->next = null;
lnode* top = null;
入棧:
top = (lnode*)malloc(sizeof(lnode));//top始終指向新插入的節點;
top->next = null;
top->data = 『a』;
top->next = head ->next;//頭插法;
head->next = top;
出棧:
x = top->data;
head->next = top->next;
free(top);
top = head->next;
棧滿:
考研中沒有棧滿;(記憶體無限大);
占空:
head->next == null;
佇列(the queue)
定義:只能在一端插入,另一端刪除;(先進先出的邏輯特性)
順序隊:
int queue[maxsize];
int front=0, rear=0;
入隊:
queue[++rear] = e;
出隊:
x = queue[++front];(元素殘留在佇列中)
……假溢位;
環狀佇列
入隊:rear = (rear+1)%maxsize;
queue[rear]=x;
出隊:front = (front+1)%maxsize;
x = queue[front];
隊空:
front = rear;
隊滿:
front = (rear+1)%maxsize;
鏈隊:
初始化:
入隊:
出隊:考點(非**)
考點1:由出棧序列判斷棧容量;(選擇題)
結論:若入:1,2, 3則無3,1,2;
卡特蘭數(catalan number):
cn = (2n)!/[(n+1)!n!] = 輸出序列的個數(n為入棧元素個數)
考點2:表示式轉換
中前字尾表示式:a+b/+ab/ab+
要會互相轉換
二叉樹轉換法
括號轉換法
考點3:棧用於求前中字尾表示式的值;
考點4:佇列的配置問題
1:計算元素的個數
(rear-front+maxsize)%maxsize = num;
非正常配置問題
第一種:front指向第乙個元素
rear指向最後乙個元素的後一位;
1:計算個數公式一樣,只是入隊出隊次序不同;
第二種:front指向第乙個元素,rear指向最後乙個元素;
隊空:front = (rear+1)%maxsize;
隊滿:front = (rear+2)%maxsize;
計算元素個數
=(rear-front+1+maxsize)%maxsize;
考點4:佇列擴充套件—雙端佇列
輸入/輸出受限的雙端佇列;考入隊出隊的次序問題;
考點5:棧的擴充套件
共享棧:共享同一塊儲存單元;
實現: int stack[maxsize];
int top1 = -1; top2 = maxsize;
(int top[2] = ;)//將兩個指標存在陣列裡
棧滿:top[0] +1 == top[1];
用棧來模擬佇列:(兩個同大小的棧)
入隊規則:
**若s1不空,則元素直接入s1;
**若s1滿,s2空,則將元素一次性移入s2;之後在入s1;
出隊規則:
**若s2不空,則從s2直接出棧;
**若s2空,則將s1元素入s2,然後在從s2出棧;
隊滿:s1滿且s2不空 ;
對空;s1空且s2空;
考點2(**部分)
利用棧求字尾表示式的值:從左向右掃瞄,遇到運算子就運算
棧求字首表示式:從右向左掃瞄,遇到運算子就計算
中綴表示式轉字尾表示式
中綴表示式轉字首表示式
括號匹配問題!
棧的計算
佇列與棧 知識點 面試考點
先進先出 一種操作受限的線性表資料結構 支援隊尾插入元素,在隊頭刪除元素。佇列的應用也非常廣泛如 迴圈佇列 阻塞佇列 併發佇列 優先順序佇列等。假越界只能使用一次 棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。後進先出 中綴表示式就是常見的運算表示式,如...
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
棧和佇列 佇列
佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...