常见数据结构的算法。总结一下现在遇到的常见的算法,也是给自己一个交待吧。
双向链表:
话不多说直接上代码。
头文件:
#ifndef _SHUANG_LINK_TABLE_
#define _SHUANG_LINK_TABLE_
#include "Head.h"
typedef struct ST_D_Link_Table
{
int data;
ST_D_Link_Table *_next_;
ST_D_Link_Table *_front_;
};
class D_Link_Table
{
public:
D_Link_Table();
~D_Link_Table();
void test();
bool CreateDLinkTable();
int D_Link_Table::GetLength();
bool CacheInsert(int data);
bool Insert(int pos, int data);
bool Delete();
protected:
private:
ST_D_Link_Table *head;
};
#endif
实现:
#include "shuanglianbiao.h"
D_Link_Table::D_Link_Table()
{
}
D_Link_Table::~D_Link_Table()
{
}
void D_Link_Table::test()
{
CreateDLinkTable();
CacheInsert(1);
CacheInsert(2);
CacheInsert(3);
CacheInsert(4);
CacheInsert(5);
}
bool D_Link_Table::CreateDLinkTable()
{
head = (ST_D_Link_Table*)malloc(sizeof(ST_D_Link_Table));
if (head == NULL)
{
return false;
}
memset(head, 0, sizeof(ST_D_Link_Table));
return true;
}
int D_Link_Table::GetLength()
{
ST_D_Link_Table* temp = head;
int len = 0;
while(temp != NULL)
{
temp = temp->_next_;
++len;
}
return len;
}
bool D_Link_Table::CacheInsert(int data)
{
int ret = false;
int depth = GetLength();
ret = Insert(depth - 1, data);
return ret;
}
bool D_Link_Table::Insert(int pos, int data)
{
if (pos < 0)
{
return false;
}
ST_D_Link_Table *temp = head;
ST_D_Link_Table *node = (ST_D_Link_Table *)malloc(sizeof(ST_D_Link_Table));
memset(node, 0, sizeof(ST_D_Link_Table));
if (pos == 0)
{
//head
temp->data = data;
temp->_next_ = node;
temp->_front_ = NULL;
}
else
{
//head-child
//find point *next is NULL
int i = 0;
while ((temp != NULL) && (i < pos - 1))
{
temp = temp->_next_;
++i;
}
if (temp == NULL)
{
//is tail
return false;
}
temp->_next_->data = data;
temp->_next_->_next_ = node;
temp->_next_->_front_ = temp;
}
return true;
}
bool D_Link_Table::Delete()
{
return true;
}