5.8 训练日志

      总结一下数据结构的部分内容,简单的概念介绍,不做精细研究
      各种数据结构的代码实现

1 .栈
#ifndef ARRAY_STACK_HXX
#define ARRAY_STACK_HXX

#include
#include “ArrayStack.h”
using namespace std;

template class ArrayStack{
public:
ArrayStack();
~ArrayStack();

    void push(T t);
    T peek();
    T pop();
    int size();
    int isEmpty();
private:
    T *arr;
    int count;

};

// 创建“栈”,默认大小是12
template
ArrayStack::ArrayStack()
{
arr = new T[12];
if (!arr)
{
cout<<“arr malloc error!”<<endl;
}
}

// 销毁“栈”
template
ArrayStack::~ArrayStack()
{
if (arr)
{
delete[] arr;
arr = NULL;
}
}

// 将val添加到栈中
template
void ArrayStack::push(T t)
{
//arr[count++] = val;
arr[count++] = t;
}

// 返回“栈顶元素值”
template
T ArrayStack::peek()
{
return arr[count-1];
}

// 返回“栈顶元素值”,并删除“栈顶元素”
template
T ArrayStack::pop()
{
int ret = arr[count-1];
count–;
return ret;
}

// 返回“栈”的大小
template
int ArrayStack::size()
{
return count;
}

// 返回“栈”是否为空
template
int ArrayStack::isEmpty()
{
return size()==0;
}

#endif
2.队列
#ifndef ARRAY_QUEUE_HXX
#define ARRAY_QUEUE_HXX

#include
using namespace std;

template class ArrayQueue{
public:
ArrayQueue();
~ArrayQueue();

    void add(T t);
    T front();
    T pop();
    int size();
    int is_empty();

private:
    T *arr;
    int count;

};

// 创建“队列”,默认大小是12
template
ArrayQueue::ArrayQueue()
{
arr = new T[12];
if (!arr)
{
cout<<“arr malloc error!”<<endl;
}
}

// 销毁“队列”
template
ArrayQueue::~ArrayQueue()
{
if (arr)
{
delete[] arr;
arr = NULL;
}
}

// 将val添加到队列的末尾
template
void ArrayQueue::add(T t)
{
arr[count++] = t;
}

// 返回“队列开头元素”
template
T ArrayQueue::front()
{
return arr[0];
}

// 返回并删除“队列末尾的元素”
template
T ArrayQueue::pop()
{
int i = 0;;
T ret = arr[0];

count--;
while (i++<count)
    arr[i-1] = arr[i];

return ret;

}

// 返回“队列”的大小
template
int ArrayQueue::size()
{
return count;
}

// 返回“队列”是否为空
template
int ArrayQueue::is_empty()
{
return count==0;
}

#endif
3.二叉树
(1)二叉查找树节点
template
class BSTNode{
public:
T key; // 关键字(键值)
BSTNode *left; // 左孩子
BSTNode *right; // 右孩子
BSTNode *parent;// 父结点

    BSTNode(T value, BSTNode *p, BSTNode *l, BSTNode *r):
        key(value),parent(),left(l),right(r) {}

};
(2)前序遍历
template
void BSTree::preOrder(BSTNode* tree) const
{
if(tree != NULL)
{
cout<< tree->key << " " ;
preOrder(tree->left);
preOrder(tree->right);
}
}

template
void BSTree::preOrder()
{
preOrder(mRoot);
}
(3)中序遍历
template
void BSTree::inOrder(BSTNode* tree) const
{
if(tree != NULL)
{
inOrder(tree->left);
cout<< tree->key << " " ;
inOrder(tree->right);
}
}

template
void BSTree::inOrder()
{
inOrder(mRoot);
}
(4)后序遍历
template
void BSTree::postOrder(BSTNode* tree) const
{
if(tree != NULL)
{
postOrder(tree->left);
postOrder(tree->right);
cout<< tree->key << " " ;
}
}

template
void BSTree::postOrder()
{
postOrder(mRoot);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值