⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a.txt

📁 英语词典的维护和识别
💻 TXT
字号:
#include<stdio.h>                                              
#include"string.h"
#include<stdlib.h>

#define MaxStrSize 20


typedef struct KeyType  /*??????????*/
{
 char ch[MaxStrSize];
 int  length;          /*????????*/
}*KeyType;


typedef struct Record          /*???????????????????*/
{
 KeyType key;
}Record;

typedef enum {LEAF,BRANCH} NodeKind;  /*???????{???????}*/

typedef struct TrieNode          /*Trie????????*/
{
 NodeKind kind;
 union
 {
  struct LEAF    /*?????*/
  { 
   KeyType k;
   Record *infoptr;
  }lf;
  struct BRANCH         /*??????*/
  {
   TrieNode *ptr[26];
  }bh;
 }node;
}TrieNode,*TrieTree; 
   




/*???*/

void TraverseTrie(TrieTree T)
{

 int i;
 char c1;
 KeyType k,k9;
 if(T)
 {
  printf("**********************************************\n");
  printf("************ a:traverse a word ***************\n");
  printf("* b:traverse words begin with a definite zimu*\n");
  printf("**********************************************\n");
  printf("please input to choose:");
  c1=getchar();
  if(c1=='a')
  {
   printf("please input the word:");
   scanf("%s",k9->ch);
   k9->length=strlen(k9->ch);
   Traverse_one_word(T,k9);
  }



  if(c1=='b')
  Traversewords(T);
 }
}  
 
/*????????1*/

void Traversewords(TrieTree T)
{
  char c1;
  TrieTree p;
  p=T;
  printf("please input a zimu:");
  c1=getchar();
  if(T)
  {
   p=p->node.bh.ptr[change(c1)];
   if(!p)
    printf("%c",c1);
   if(p&&p->kind==BRANCH)
    Traversewords(p);
   if(p&&p->kind==LEAF)
    printf("%s",p->node.lf.k->ch);
   }
}
/*????????2 */

int Traverse_one_word(TrieTree T,KeyType kk)
{
 int i;

 TrieTree p;

 p=T;
 if(T)
 {
  for(i=0;i<kk->length;i++)
  {
   p=p->node.bh.ptr[chang(kk->ch[i])];
   if(p&&p->kind==LEAF&&p->node.lf.k->ch==kk->ch)
   {
    printf("%S",kk->ch);
    return 1;
   }
   if(!p)
    {
    printf("\nthe word isnot cunzai!\n");
    return 0;
    }
   if(p&&p->kind==LEAF&&(strcmp(p->node.lf.k,kk->ch)!=0))
     {
     printf("the word isnot cunzai!\n");
     return 0;
     }
   } /*endfor*/

  }/*endif(T)*/
}

/*??????? */

int change(char c)
{
 if(c>='a'&&c<='z')
 return c-'a';
 else
 printf("error!\n");
}


/*????*/

void InsertTrie(TrieTree T,char *FileName)
{
 FILE *fp;
 Record *r;
 TrieTree p,q,ap;
 int i,j;
 KeyType k1,k;
 k=r->key;
 i=0;

 if((fp=fopen("FileName","a"))==NULL)  /*????????????????????????*/
 {
  CreatTextFile();
  fp=fopen("FileName","a");
 }
 

 printf("please input a Record:");
 scanf("%s",r->key->ch);
 


 if(!T)   /*????*/
 {
  T=(TrieTree)malloc(sizeof(TrieNode));
  T->kind=BRANCH;
  for(i=0;i<26;i++)  /*????????*/
  T->node.bh.ptr[i]=NULL;
  p=T->node.bh.ptr[change(k->ch[0])]=(TrieTree)malloc(sizeof(TrieNode));
  p->kind=LEAF;
  p->node.lf.k=k;
  p->node.lf.infoptr=r;
 }
 else /*?????*/
 {
  for(p=T,i=0;p&&p->kind==BRANCH&&i<k->length;i++)
  {
   q=p;
   p=p->node.bh.ptr[change(k->ch[i])];
  }
  i--;
 if(p&&(p->kind==LEAF)&&((p->node.lf.k->length)==k->length)
 &&(strcmp(p->node.lf.k->ch,k->ch)==0))
  /*???????T?д???ù????*/
  {   
   printf("the key cunzai!\n");

  }
  else     /*T?в?????ù??????????*/
   if(!p)  /*?????*/
   {

    p=(TrieTree)malloc(sizeof(TrieNode));
    q->node.bh.ptr[change(k->ch[i])]=p;
    p->kind=LEAF;
    p->node.lf.infoptr=NULL;
    p->node.lf.k=k;
    p->node.lf.infoptr=r;
   }
   else if(p->kind==LEAF)  /*?в????????????*/
   {
    k1=p->node.lf.k;

    do
    {
     ap=q->node.bh.ptr[change(k->ch[i])]=(TrieTree)malloc(sizeof(TrieNode));
     ap->kind=BRANCH;
     for(j=0;j<26;j++)    /*????????*/
      ap->node.bh.ptr[j]=NULL;
     q=ap;
     i++;
    }while(change(k->ch[i])==change(k1->ch[i]));
   q->node.bh.ptr[change(k1->ch[i])]=p;
   p=q->node.bh.ptr[change(k->ch[i])]=(TrieTree)malloc(sizeof(TrieNode));
   p->kind=LEAF;
   p->node.lf.k=k;
   p->node.lf.infoptr=r;
   }
  }
 fwrite(k->ch,sizeof(k->ch),1,fp);
 fclose(fp); 
}


/*???????*/

char *CreatTextFile( )
{
  char FileName[10];
  FILE *fp;
  printf("the FileName:");
  scanf("%s",FileName);
  if((fp=fopen("FileName","r"))==NULL)
   {
    printf("cannot open file\n");
    getchar();
    exit(1);
   }
  fclose(fp);
  printf("the file is inited!");
  return (FileName);
}
  

/*?????*/

void Delete(char *FileName,TrieTree T)
{
 int i;
 FILE *fp;
 KeyType k;
 TrieTree p,q;
 if((fp=fopen("FileName","a"))==NULL)
  {
   printf("cannot open file\n");
   getchar();
   exit(1);
  }
 else 
  {
   if(T)
    printf("the Tree isnot cunzai!\n");
   else
   {
    printf("please input one word!\n");
    scanf("%s",k->ch);
    k->length=strlen(k->ch);
     if(Traverse_one_word(T,k))
     { 
      p=T;
      for(i=0;i<k->length;i++)
       {
        q=p;
        p=p->node.bh.ptr[change(k->ch[i])];
         if(p->kind==LEAF)
          {
           q->node.bh.ptr[change(k->ch[i])]=NULL;
           free(p);
          }
       } /*endfor*/
     }/*endif*/   
     else
      printf("the word isnot cunzai!\n");
    }    
 }
 fclose(fp);
}



 main()
{
 char c2; 
 TrieTree T;
 char *FileName;
 FileName=NULL;
 T=NULL;
 FileName=CreatTextFile();
 printf("***********************************\n");
 printf("********  1:Insert  ***************\n");
 printf("********  2:Delete  ***************\n");
 printf("********  3:Taverse ***************\n");
 printf("***********************************\n");
 printf("please input a number:");
 c2=getchar();
 switch(c2)
  {
   case '1':InsertTrie(T,FileName); break;
   case '2':Delete(FileName,T); break;
   case '3':TraverseTrie(T); break;
   default :printf("please input again\n");
  }
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -