在這裡插入**片
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...