挑戰資料結構和演算法——棧的push、pop序列
阿新 • • 發佈:2019-01-22
題目來源“資料結構與演算法面試題80道”。在此給出我的解法,如你有更好的解法,歡迎留言。
問題分析:本題考查棧的基本操作,棧是一種“先進後出”的資料結構。判斷一個序列是否是棧的pop序列是一種常見的問題,可以通過模擬push和pop的過程,push和pop總是成對出現的,如:
方法:
#define push 1
#define pop -1
bool judge_push_pop(int *a, int *b, int len_a, int len_b){
if (NULL == a || NULL == b || len_a != len_b) return false;
int *p_a = a;
int *p_b = b;
int *op = (int *)malloc(sizeof(int) * len_a * 2);
int index = 0;
int i = 0;
while(i < len_a){
op[index] = push;
index ++;
if (*p_a == *p_b){
p_b ++;
op[index] = pop;
index ++;
}
p_a ++;
i ++;
}
while (index < len_a * 2){
op[index++] = pop;
}
// judge
int start = 0;
int end = len_a * 2 - 1;
while(start < end){
if (op[start] + op[end] == 0){
start ++;
end --;
}else return false;
}
return true;
free(op);
}