程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1250 字典樹+內存釋放

hdu 1250 字典樹+內存釋放

編輯:C++入門知識

/*
第一次做字典樹,找了一道比較簡單的。
建樹的時候用到了new動態分配內存,剛好學C++的時候老師講到了這一點,動態內存有申請就要有釋放。
但是在網上看了好多代碼都沒有清理內存。雖然能通過題目測試,但是卻反映了一個編程態度的問題。
在此告誡自己,也希望大家都能端正自己的態度,不要為了AC而AC

*/


[cpp]
#include"iostream"  
#include"cstring"  
#include"cstdlib"  
using namespace std; 
//結點結構  
struct Node 

    int ncount; 
    Node* Next[26]; 
}; 
Node* root; 
//初始化結點  
void Init(Node* t) 

    memset(t->Next,NULL,sizeof(t->Next)); 
    t->ncount=0; 

//插入新單詞  
void Insert(char* s) 

    int i,k; 
    Node* p=root; 
    Node* newnode; 
    for(i=0;i<strlen(s);i++){ 
        k=s[i]-'a'; 
        if(p->Next[k]==NULL){ 
            newnode=new Node; 
            Init(newnode); 
            p->Next[k]=newnode; 
            p=newnode; 
            p->ncount++; 
        } 
        else{ 
            p=p->Next[k]; 
            p->ncount++; 
        } 
    } 

//搜索單詞  
int Search(char* s) 

    int i,k; 
    Node* p=root; 
    for(i=0;i<strlen(s);i++){ 
        k=s[i]-'a'; 
        if(p->Next[k]==NULL) 
            return 0; 
        else 
            p=p->Next[k]; 
    } 
    return p->ncount; 

//釋放內存  
void Freedom(Node* p) 

    int i; 
    for(i=0;i<26;i++){ 
        if(p->Next[i]!=NULL) 
            Freedom(p->Next[i]); 
    } 
    delete p; 

int main() 

    char s[11]; 
    root=new Node; 
    Init(root); 
    while(gets(s),s[0]!='\0'){ 
        Insert(s); 
    } 
    while(gets(s)){ 
        int ans=Search(s); 
        cout<<ans<<endl; 
    } 
    Freedom(root); 
    return 0; 

#include"iostream"
#include"cstring"
#include"cstdlib"
using namespace std;
//結點結構
struct Node
{
 int ncount;
 Node* Next[26];
};
Node* root;
//初始化結點
void Init(Node* t)
{
 memset(t->Next,NULL,sizeof(t->Next));
 t->ncount=0;
}
//插入新單詞
void Insert(char* s)
{
 int i,k;
 Node* p=root;
 Node* newnode;
 for(i=0;i<strlen(s);i++){
  k=s[i]-'a';
  if(p->Next[k]==NULL){
   newnode=new Node;
   Init(newnode);
   p->Next[k]=newnode;
   p=newnode;
   p->ncount++;
  }
  else{
   p=p->Next[k];
   p->ncount++;
  }
 }
}
//搜索單詞
int Search(char* s)
{
 int i,k;
 Node* p=root;
 for(i=0;i<strlen(s);i++){
  k=s[i]-'a';
  if(p->Next[k]==NULL)
   return 0;
  else
   p=p->Next[k];
 }
 return p->ncount;
}
//釋放內存
void Freedom(Node* p)
{
 int i;
 for(i=0;i<26;i++){
  if(p->Next[i]!=NULL)
   Freedom(p->Next[i]);
 }
 delete p;
}
int main()
{
 char s[11];
 root=new Node;
 Init(root);
 while(gets(s),s[0]!='\0'){
  Insert(s);
 }
 while(gets(s)){
  int ans=Search(s);
  cout<<ans<<endl;
 }
 Freedom(root);
 return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved