Documente Academic
Documente Profesional
Documente Cultură
DATA STRUCTURES
AND
ALGORITHMS
Lecture Notes 8
Stacks
Spring 2008
Carl
Barb push Carl ... Barb
Alex Alex
top
push
Stack
pop
public:
Palindrome_Finder(const std::string& str): input_string(str) {
fill_stack();
}
bool is_palindrome();
private:
void fill_stack();
std::string build_reverse();
std::string input_string;
std::stack<char> char_stack;
};
void Palindrome_Finder::fill_stack() {
for (size_t i = 0; i < input_string.size(); i++) {
char_stack.push(input_string[i]);
}
}
bool Palindrome_Finder::is_palindrome() {
string reverse = build_reverse();
return equal(input_string.begin(), input_string.end(),
reverse.begin(), Ci_Equal());
}
template<typename Item_Type>
Item_Type& stack<Item_Type>::top() {
return container.back();
}
template<typename Item_Type>
const Item_Type& stack<Item_Type>::top() const {
return container.back();
}
template<typename Item_Type>
bool stack<Item_Type>::empty() const {
return container.empty();
}
template<typename Item_Type>
size_t stack<Item_Type>::size() const {
return container.size();
}
template<typename Item_Type>
Item_Type& stack<Item_Type>::top() {
return top_of_stack->data;
}
template<typename Item_Type>
const Item_Type& stack<Item_Type>::top() const {
return top_of_stack->data;
}
template<typename Item_Type>
void stack<Item_Type>::pop() {
Node* old_top = top_of_stack;
top_of_stack = top_of_stack->next;
delete old_top;
}
template<typename Item_Type>
bool stack<Item_Type>::empty() const {
return top_of_stack == NULL;
}
4 * (7 + 2) 36
(4 * 7) - 20 8
3 + ((4 * 7) / 2) 17
const std::string
Postfix_Evaluator::OPERATORS = "+-*/";