数据结构复习笔记(5)

1,KMP算法

数据结构复习笔记(5) void  preKmp( char   * x,  int  m,  int  kmpNext[])
数据结构复习笔记(5) 
{
数据结构复习笔记(5)
数据结构复习笔记(5)   
int i, j;
数据结构复习笔记(5)   i 
= 0;
数据结构复习笔记(5)   j 
= kmpNext[0= -1;
数据结构复习笔记(5)
数据结构复习笔记(5)   
while (i < m) {
数据结构复习笔记(5)      
while (j > -1 && x[i] != x[j])
数据结构复习笔记(5)         j 
= kmpNext[j];
数据结构复习笔记(5)      i
++;
数据结构复习笔记(5)      j
++;
数据结构复习笔记(5)      
if (x[i] == x[j])
数据结构复习笔记(5)         kmpNext[i] 
= kmpNext[j];
数据结构复习笔记(5)      
else
数据结构复习笔记(5)         kmpNext[i] 
= j;
数据结构复习笔记(5)   }

数据结构复习笔记(5)}

数据结构复习笔记(5)
数据结构复习笔记(5)
数据结构复习笔记(5)
void  KMP( char   * x,  int  m,  char   * y,  int  n) 
数据结构复习笔记(5)
{//x为模式串,m为其长度,y为主串,n为其长度
数据结构复习笔记(5)

数据结构复习笔记(5)   
int i, j, kmpNext[MAXSIZE];//kmpNext数组存放next函数值
数据结构复习笔记(5)

数据结构复习笔记(5)   
/* Preprocessing */
数据结构复习笔记(5)   preKmp(x, m, kmpNext);
数据结构复习笔记(5)
数据结构复习笔记(5)   
/* Searching */
数据结构复习笔记(5)   i 
= j = 0;
数据结构复习笔记(5)   
while (j < n) {
数据结构复习笔记(5)      
while (i > -1 && x[i] != y[j])
数据结构复习笔记(5)         i 
= kmpNext[i];
数据结构复习笔记(5)      i
++;
数据结构复习笔记(5)      j
++;
数据结构复习笔记(5)      
if (i >= m) {
数据结构复习笔记(5)         OUTPUT(j 
- i);
数据结构复习笔记(5)         i 
= kmpNext[i];
数据结构复习笔记(5)      }

数据结构复习笔记(5)   }

数据结构复习笔记(5)}

数据结构复习笔记(5)

2二叉排序树的建立及查找算法

数据结构复习笔记(5) #include  < stdlib.h >
数据结构复习笔记(5)#include 
< stdio.h >
数据结构复习笔记(5)
#define  NULL 0
数据结构复习笔记(5)typedef 
int  KeyType;
数据结构复习笔记(5)typedef 
struct
数据结构复习笔记(5)
{
数据结构复习笔记(5)    KeyType key;
数据结构复习笔记(5)}
ElemType;    // 元素类型
数据结构复习笔记(5)
typedef  struct  BiTNode
数据结构复习笔记(5)
{
数据结构复习笔记(5) ElemType data;
数据结构复习笔记(5)    
struct BiTNode *lchild,*rchild;
数据结构复习笔记(5)}
BiTNode, * BiTree;
数据结构复习笔记(5)BiTree find(BiTree root,KeyType key)
数据结构复习笔记(5)
{  //在二叉排序树中查找其关键字等于给定值的结点是否存在,并输出相应信息
数据结构复习笔记(5)
BiTNode *p;
数据结构复习笔记(5) p
=root;
数据结构复习笔记(5) 
if (p==NULL) return NULL;
数据结构复习笔记(5)    
else if (p->data.key==key) return p;
数据结构复习笔记(5)    
else if (key<p->data.key) return find(p->lchild,key);
数据结构复习笔记(5)    
else return find(p->rchild,key);
数据结构复习笔记(5)}

数据结构复习笔记(5)
void  Insert(BiTree  * p,BiTree t) {               //在二叉排序树中插入一个新结点
数据结构复习笔记(5)
 if (*p==NULL) *p=t;
数据结构复习笔记(5)    
else if(t->data.key<(*p)->data.key) Insert(&((*p)->lchild),t);
数据结构复习笔记(5)    
else if(t->data.key>(*p)->data.key) Insert(&((*p)->rchild),t);
数据结构复习笔记(5)}

数据结构复习笔记(5)
void  inorder(BiTree p) {  //中序遍历所建二叉排序树,将得到一个按关键字有序的元素序列
数据结构复习笔记(5)
 if(p!=NULL){
数据结构复习笔记(5) inorder(p
->lchild);
数据结构复习笔记(5) printf(
"%5d",(p->data).key);
数据结构复习笔记(5) inorder(p
->rchild);
数据结构复习笔记(5) }

数据结构复习笔记(5)}

数据结构复习笔记(5)
void  main() {
数据结构复习笔记(5) 
char ch;
数据结构复习笔记(5) KeyType key;
数据结构复习笔记(5) BiTree p,s;
数据结构复习笔记(5) 
int i=0;
数据结构复习笔记(5) printf(
"Please input datas (9999:end):\n");//建立一棵二叉排序树,元素值从键盘输入,直到输入关键字等于9999为止
数据结构复习笔记(5)
 scanf("%4d",&key);
数据结构复习笔记(5) p
=NULL;
数据结构复习笔记(5) 
while(key!=9999){    
数据结构复习笔记(5)  s
=(BiTree)malloc(sizeof(BiTNode));
数据结构复习笔记(5)  (s
->data).key=key;
数据结构复习笔记(5)  s
->lchild=s->rchild=NULL;
数据结构复习笔记(5)  Insert(
&p,s);
数据结构复习笔记(5)  scanf(
"%d",&key);
数据结构复习笔记(5) }

数据结构复习笔记(5) printf(
"Create is completed\n");
数据结构复习笔记(5) inorder(p);   
//中序遍历已建立的二叉排序树
数据结构复习笔记(5)
 printf("\n");
数据结构复习笔记(5) 
do{    //二叉排序树的查找,可多次查找,并输出查找的结果
数据结构复习笔记(5)
 printf("Input the key you want to search:");
数据结构复习笔记(5) scanf(
"%4d",&key);
数据结构复习笔记(5) s
=find(p,key);
数据结构复习笔记(5) 
if (s!=NULL) printf("success,the value is %4d ",s->data.key);
数据结构复习笔记(5) 
else         printf("unsuccess");
数据结构复习笔记(5) printf(
"\ncontinue?y:n\n");getchar();
数据结构复习笔记(5) ch
=getchar();
数据结构复习笔记(5) }
while(ch=='y'||ch=='Y');
数据结构复习笔记(5) }

数据结构复习笔记(5)
数据结构复习笔记(5)

你可能感兴趣的:(数据结构)