1. 程式人生 > >挑戰資料結構和演算法——棧的push、pop序列

挑戰資料結構和演算法——棧的push、pop序列

題目來源“資料結構與演算法面試題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); }