c++笔试题深度分析 第四波 下
2014-10-05 09:24
253 查看
10. 用 C/C++语言实现一个存储整形数据的栈数据结构。
要求实现以下功能:
(1) 入栈操作 push
(2) 出栈操作 pop
(3) 栈大小操作 size
(4) 栈中最小元素 min
11. 编程实现二叉树的相等比较,当二叉树每个结点中的值对应相等时,二叉树相等,否
则不相等。
二叉树每个结点由如下结构体表示:
struct BTreeNode
{
int v;
BTreeNode* left;
BTreeNode* right;
};
函数原型:
bool BTreeCompare(BTreeNode* b1, BTreeNode* b2);
要求实现以下功能:
(1) 入栈操作 push
(2) 出栈操作 pop
(3) 栈大小操作 size
(4) 栈中最小元素 min
#include <iostream> #include <list> using namespace std; class IntStack { private: list<int> m_stack; list<int> m_cmax; public: void push(int v); int pop(); int top(); int size(); int max(); }; void IntStack::push(int v) { m_stack.push_front(v); if( m_cmax.size() != 0 ) { if( v > m_cmax.front() ) { m_cmax.push_front(v); } else { m_cmax.push_front(m_cmax.front()); } } else { m_cmax.push_front(v); } } int IntStack::pop() { int ret = m_stack.front(); m_stack.pop_front(); m_cmax.pop_front(); return ret; } int IntStack::top() { return m_stack.front(); } int IntStack::size() { return m_stack.size(); } int IntStack::max() { return m_cmax.front(); } int main() { IntStack s; int array[] = {7, 2, 3, 1, 1, 4, 5}; for(int i=0; i<sizeof(array)/sizeof(*array); i++) { s.push(array[i]); } while( s.size() ) { cout<<s.top()<<endl; cout<<s.max()<<endl; s.pop(); cout<<endl; } }
11. 编程实现二叉树的相等比较,当二叉树每个结点中的值对应相等时,二叉树相等,否
则不相等。
二叉树每个结点由如下结构体表示:
struct BTreeNode
{
int v;
BTreeNode* left;
BTreeNode* right;
};
函数原型:
bool BTreeCompare(BTreeNode* b1, BTreeNode* b2);
#include <iostream> #include <list> using namespace std; struct BTreeNode { int v; BTreeNode* left; BTreeNode* right; }; bool BTreeCompare(BTreeNode* b1, BTreeNode* b2) { bool ret = false; if( b1 && b2 ) { ret = (b1->v == b2->v) && BTreeCompare(b1->left, b2->left) && BTreeCompare(b1->right, b2->right); } if( !b1 && !b2 ) { ret = true; } return ret; } bool BTreeCompareEx(BTreeNode* b1, BTreeNode* b2) { bool ret = true; list<BTreeNode*> l1; list<BTreeNode*> l2; l1.push_back(b1); l2.push_back(b2); while( ret && l1.size() && l2.size() ) { BTreeNode* n1 = l1.front(); BTreeNode* n2 = l2.front(); l1.pop_front(); l2.pop_front(); if( (n1 != NULL) && (n2 != NULL) ) { ret = (n1->v == n2->v); l1.push_back(n1->left); l1.push_back(n1->right); l2.push_back(n2->left); l2.push_back(n2->right); } else if( (n1 == NULL) && (n2 != NULL) ) { ret = false; } else if( (n1 != NULL) && (n2 == NULL) ) { ret = false; } } return ret && (l1.size() == 0) && (l2.size() == 0); } int main() { BTreeNode n1[10] = {0}; BTreeNode n2[10] = {0}; for(int i=0; i<10; i++) { n1[i].v = i; n2[i].v = i; } n1[0].left = &n1[1]; n1[0].right = &n1[2]; n1[1].left = &n1[3]; n1[1].right = &n1[4]; n1[2].left = &n1[5]; n1[2].right = &n1[6]; n1[3].left = &n1[7]; n1[3].right = &n1[8]; n1[4].left = &n1[9]; n2[0].left = &n2[1]; n2[0].right = &n2[2]; n2[1].left = &n2[3]; n2[1].right = &n2[4]; n2[2].left = &n2[5]; n2[2].right = &n2[6]; n2[3].left = &n2[7]; n2[3].right = &n2[8]; n2[4].left = &n2[9]; cout<<BTreeCompare(n1, n2)<<endl; cout<<BTreeCompareEx(n1, n2)<<endl; }
相关文章推荐
- C++笔试题深度分析 第四波 上
- C++笔试题深度分析 第三波 上
- C++笔试题深度分析 第二波 下
- C++笔试题深度分析 第五波 上
- C++笔试题深度分析 第一波 下
- C++笔试题深度分析 第三波 下
- C++笔试题深度分析 第五波 下
- C++笔试题深度分析 第二波 上
- C++笔试题深度分析第一波 上
- 反汇编->C++虚函数深度分析
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- C/C++深度分析
- 深度分析C++默认构造函数、拷贝构造函数
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- 【C++深度剖析教程16】智能指针的分析
- 【C++深度剖析教程18】逗号操作符的分析
- 迅雷2014C++研发笔试卷C解题分析
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析