棧的應用案例 就近匹配

2021-10-20 20:04:27 字數 2770 閱讀 2815

在這裡插入**片

stack.h

#pragma once

#define _crt_secure_no_warnings

#include

#include

#define max 1024

//棧:注意和動態陣列的區別:

//動態陣列這裡用的指標是二級指標因為陣列的大小無法提前確定,並且使用者陣列型別無法確定,要用void*一級指標來接收

//所以要在堆區動態開闢陣列存放void*型別資料要用二級指標來接收

//這裡的棧已經知道陣列的最大長度,因此不需要再用在堆區再次開闢一塊記憶體來用二級指標指向

struct sstack

;//隱藏資料,不讓使用者能夠得到操作結構體的介面

//類似c++類中的private屬性

typedef

void

* seqstack;

//初始化棧----返回棧的結構體,為了隱藏資料用萬能指標作為返回值

seqstack init_stack()

;//入棧

void

push_stack

(seqstack stack,

void

* data)

;//出棧:尾刪

void

pop_stack

(seqstack stack)

;//返回棧頂元素

seqstack top_stack

(seqstack stack)

;//返回棧的大小

intsize_stack

(seqstack stack)

;//判斷棧是否為空

bool empty_stack

(seqstack stack)

;//銷毀棧

void

destroy_stack

(seqstack stack)

;

stack.cpp

#include

"stack.h"

//初始化棧----返回棧的結構體,為了隱藏資料用萬能指標作為返回值

seqstack init_stack()

//初始化陣列--清空陣列,一開陣列裡面會有隨機值

memset

(stack->data,

null

,sizeof

(void*)

* max)

;//長度初始哈

stack->size =0;

//返回棧的結構體

return stack;

}//入棧

void

push_stack

(seqstack stack,

void

* data)

//下面從陣列尾部開始插入

mystack->data[mystack->size]

= data;

//長度加一

mystack->size++;}

//出棧:尾刪

void

pop_stack

(seqstack stack)

//返回棧頂元素

seqstack top_stack

(seqstack stack)

//返回棧的大小

intsize_stack

(seqstack stack)

//判斷棧是否為空

bool empty_stack

(seqstack stack)

//銷毀棧

void

destroy_stack

(seqstack stack)

main.cpp

#define _crt_secure_no_warnings

#include

#include

"stack.h"

bool isleft

(char ch)

return false;

}bool isright

(char ch)

return false;

}void

printerror

(const

char

* p,

const

char

* str,

char

* p1)

intmain()

//如果是右括號if(

isright

(*p1)

)else

} p1++;}

//遍歷結束,判斷是否有左括號沒有匹配到右括號

while(1

)else

}//銷毀棧

destroy_stack

(stack)

; stack =

null

;return0;

}

棧的應用 就近匹配

鏈式儲存棧的api詳情參看我的博文 棧的鏈式儲存 api實現 就近匹配 幾乎所有的編譯器都具有檢測括號是否匹配的能力 如何實現編譯器中的符號成對檢測?include int main return ret int isright char c ret 1 break default break re...

棧的應用 就近匹配

下面來簡單實現棧的應用小案例 就近匹配,上次我發的文獻,已封裝好鏈式棧liststack.h和liststack.cpp檔案,你可以引進你到的專案中加以使用。include liststack.h using namespace std typedef struct person person in...

棧的應用 就近匹配問題

就近匹配是棧最典型的應用,最常見的就是括號匹配。思路 遇到乙個左括號就壓棧 遇到乙個右括號就先看棧是否為空,不為空就彈棧,為空就輸出不匹配 遍歷一遍後檢查下棧是否為空,若不為空,輸出不匹配。include include include using namespace std typedef str...