您的位置:首页 > 编程语言 > C语言/C++

c++笔试题深度分析 第四波 下

2014-10-05 09:24 253 查看
10. 用 C/C++语言实现一个存储整形数据的栈数据结构。

要求实现以下功能:

(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: