C or C++实现静态栈:not thread safe
//stack.h
const int stackSize=256;
static int g_top=stackSize-1;
static int g_stack[stackSize];
bool push(int aData);
bool pop(int &aData);
//stack.cpp
#include "stack.h"
bool push(int aData)
{
if(g_top>=0)
{
g_stack[g_top--]=aData;
return true;
}
return false;
}
bool pop(int &aData)
{
if(g_top<stackSize-1)
{
aData=g_stack[++g_top];
return true;
}
return false;
}
实现动态栈:not thread safe
//stack_dynam.h
static int* g_stackArray;
static int g_top;
static int g_stackNum;
bool initialize_stack(int size);
bool push(int aData);
bool pop(int &aData);
void destory_stack();
//stack_dynam.cpp
bool initialize_stack(in size)
{
if(size>0)
{
g_stackArray=new int[size];
if(!g_stackArray)return false;
g_stackNum=size;
g_top=g_stackNum-1;
return true;
}
return false;
}
bool push(int aData)
{
if(g_top>=0)
{
g_stackArray[g_top--]=aData;
return true;
}
return false;
}
bool pop(int &aData)
{
if(g_top<g_stackNum-1)
{
aData=g_stackArray[--g_top];
return true;
}
return false;
}
void destory_stack()
{
if(g_stackArray)
delete[] g_stackArray;
g_stackArray=NULL;
}
定义二叉树:
typedef struct BTree
{
int data;
struct BTree* left;
struct BTree* right;
}*pBTree;
用二节点定义多叉树:
左子树为其节点的左儿子,右子树为该节点同层右相邻节点,可遍历多叉树
设计大型系统,需求为该系统 内部可存储20G,每天接受100K份文本的提交,每个文本500K至1兆,如果文件有类似,这及时判重忽略。
比较两个文件:判断类似(文件名不同,但内容相差仅多一行or多特殊字符,多几段重复等)
可用jude画组件图,系统初始化时开启监听/备份/索引线程等待触发。当文本请求到达,observer模式通知engine创建线程池,将数据库文件分n块提交给n线程扫描判重,有一个类似则立刻通知engine同步返回,无则直至扫描结束通知。
同时扫描两个文件,归并思想。