void preKmp(char *x, int m, int kmpNext[])
while (j > -1 && x[i] != x[j])
void KMP(char *x, int m, char *y, int n)
{//x为模式串,m为其长度,y为主串,n为其长度
int i, j, kmpNext[MAXSIZE];//kmpNext数组存放next函数值
while (i > -1 && x[i] != y[j])
struct BiTNode *lchild,*rchild;
BiTree find(BiTree root,KeyType key)
{ //在二叉排序树中查找其关键字等于给定值的结点是否存在,并输出相应信息
if (p==NULL) return NULL;
else if (p->data.key==key) return p;
else if (key<p->data.key) return find(p->lchild,key);
else return find(p->rchild,key);
void Insert(BiTree *p,BiTree t){ //在二叉排序树中插入一个新结点
else if(t->data.key<(*p)->data.key) Insert(&((*p)->lchild),t);
else if(t->data.key>(*p)->data.key) Insert(&((*p)->rchild),t);
void inorder(BiTree p){ //中序遍历所建二叉排序树,将得到一个按关键字有序的元素序列
printf("%5d",(p->data).key);
printf("Please input datas (9999:end):\n");//建立一棵二叉排序树,元素值从键盘输入,直到输入关键字等于9999为止
s=(BiTree)malloc(sizeof(BiTNode));
s->lchild=s->rchild=NULL;
printf("Create is completed\n");
inorder(p); //中序遍历已建立的二叉排序树
do{ //二叉排序树的查找,可多次查找,并输出查找的结果
printf("Input the key you want to search:");
if (s!=NULL) printf("success,the value is %4d ",s->data.key);
else printf("unsuccess");
printf("\ncontinue?y:n\n");getchar();
}while(ch=='y'||ch=='Y');
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/09/24/513017.html,如需转载请自行联系原作者,如需转载请自行联系原作者