總結一下數據結構的部分內容,簡單的概念介紹,不做精細研究
各種數據結構的代碼實現
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);
}