总结一下数据结构的部分内容,简单的概念介绍,不做精细研究
各种数据结构的代码实现
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);
}