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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章