Hash Table


 
Thread Tools Search this Thread
Top Forums Programming Hash Table
# 1  
Old 10-28-2014
Hash Table

I was looking at this script and was wondering if anyone can explain what this script does and how does it work. Thank you for any help.

Code:
State* lookup(char* prefix[NPREF], int create)

{

     int i, h;

     State *sp = NULL ;

     h = hash(prefix);

     for (sp = statetab[h]; sp != NULL; sp = sp->next) {

     for (i = 0; i < NPREF; i++)

     if (strcmp(prefix[i], sp->pref[i]) != 0)

     if (i == NPREF) /* found it */

     return sp;

     break;

}

     if (create) {

          sp = (State*) emalloc( sizeof( State ));

          for( i=0; i<NPREF; i++ )

          sp->pref[i] = prefix[i];

          sp->suf = NULL;

          sp->next = statetab[h];

          statetab[h] = sp;

     }

     return sp;

}

# 2  
Old 10-30-2014
Indentation helps:
Code:
State* lookup(char* prefix[NPREF], int create)
 
{
 
     int i, h;
 
     State *sp = NULL ;
 
     h = hash(prefix);
 
     for (sp = statetab[h]; sp != NULL; sp = sp->next) {
 
       for (i = 0; i < NPREF; i++)
 
         if (strcmp(prefix[i], sp->pref[i]) != 0)
 
           if (i == NPREF) /* found it */
 
             return sp;
 
       break;
 
     }
 
     if (create) {
 
          sp = (State*) emalloc( sizeof( State ));
 
          for( i=0; i<NPREF; i++ )
 
            sp->pref[i] = prefix[i];
 
          sp->suf = NULL;
 
          sp->next = statetab[h];
 
          statetab[h] = sp;
 
     }
 
     return sp;
 
}

Hash table (no payload, just keys) insert unique (i.e., if not already). Hash table - Wikipedia, the free encyclopedia Very odd contents match logic! What language?
# 3  
Old 10-30-2014
It's C. Not shell.
# 4  
Old 10-30-2014
Quote:
Originally Posted by DGPickett
Indentation helps:[CODE]Very odd contents match logic! What language?
Yes, I don't think this code will ever match anything:

Code:
       for (i = 0; i < NPREF; i++)
 
         if (strcmp(prefix[i], sp->pref[i]) != 0)
 
           if (i == NPREF) /* found it */
 
             return sp;

The variable i should never be == to NPREF within that loop.
# 5  
Old 10-30-2014
Moderator's Comments:
Mod Comment This thread has been moved and renamed. As pointed out by MadeInGermany, this C code; not a shell script.
# 6  
Old 10-30-2014
How does it work? It words badly, if at all.

That is some seriously broken code. Even if the match code is fixed, it will only examine the first State *sp pointer because of the break statement in the outer for loop.

And then, if create is non-zero and the upper loops didn't find a match at the first node, it will stuff the passed-in data onto the hash table even if it already exists further down the linked list.
# 7  
Old 10-31-2014
Yes, although PERL and python can look a lot like C, I figured C.

It does seem to be a find/optional insert if missing, hash map/table routine, with linked list buckets, but I am not familiar with passing an array and its length that way. It seems like if the elements char* can be copied, why not just copy the array char** to a pointer element? Let's try something more simple and legal:
Code:
State* lookup( char* prefix[], size_t NPREF, int create ){
     int i, h;
     State *sp = NULL ;
 
     h = hash(prefix);
 
     for ( sp = statetab[h]; sp != NULL; sp = sp->next ){
       for  (i = 0; i < NPREF; i++ )
         if ( strcmp( prefix[i], sp->pref[i] ) != 0 )
           break ;
 
       if ( i == NPREF ) /* found it */ 
             return sp;
     }
 
     if (create) {
          sp = (State*) emalloc( sizeof( State ));
          sp->pre = prefix ;
          sp->suf = NULL;
          sp->next = statetab[h];
          statetab[h] = sp;
      }
 
     return sp;
 }

It'd be nice if it had the call format like bsearch, tsearch but then it would be hsearch()! https://www.unix.com/man-page/opensolaris/3c/hsearch/
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need to print hash of hash in table format

Hi, I have a hash of hash where it has name, activities and count i have data like this - $result->{$name}->{$activities} = $value; content of that are - name - robert tom cat peter activities - running, eating, sleeping , drinking, work i need to print output as below ... (3 Replies)
Discussion started by: asak
3 Replies

2. Shell Programming and Scripting

Return a hash table from a sub routine

hello, i am new to scripting and would like to know how to return a hash table from a sub routine. i tried the following, my %hash_function = (); hash_function = &return_hash(); sub return_hash { my %hash = (); ///populate the hash return %hash; } but it dosent seem to... (1 Reply)
Discussion started by: hemalathak10
1 Replies

3. UNIX for Dummies Questions & Answers

Hash Table like implementation in unix

Hi all, I just downloaded this example from the net. I was looking around for a hash table like implementation in unix when I came across this. ARRAY=( "cow:moo" "dinosaur:roar" "bird:chirp" "bash:rock" ) for animal in ${ARRAY} ; do KEY=${animal%%:*} ... (8 Replies)
Discussion started by: anindyabecs
8 Replies

4. Programming

Hash table

Hi, I hope someone can help me with the following prob.. I need to implement a hashtable whose KEYs are strings and VLAUEs are again hashtables. ie key - is a string and value -is another hashtable . So.... how am I supposed to be implementing my nested hashtable? Thanks in advance (1 Reply)
Discussion started by: andrew.paul
1 Replies

5. UNIX for Advanced & Expert Users

distributed hash table operations(GET,PUT,TRANSFER) implementation

Hi, i want to implement hash table (put, get and transfer operations) using c in unix. so give some nice infromation on how to write my code. (1 Reply)
Discussion started by: kaleab
1 Replies

6. Shell Programming and Scripting

how to import external HASH table in PERL???

hello, I am creating a HASH table using file1.pl :- I want to retrieve the content of the hash table created above from another file named file2.pl :- The problem is that if I separate like this into 2 files.Then it says that HASH table is not created.So can you please tell me how to... (2 Replies)
Discussion started by: nsharath
2 Replies

7. UNIX for Dummies Questions & Answers

nested hash table

Hi, I have a nested hash table say for example as follows: %coins = ( 1 => { "Quarter"=>25, "Dime"=>10, "Nickel"=>5, }, 2 => { "asd"=>34, "qwe"=>45, ... (0 Replies)
Discussion started by: arthi
0 Replies

8. Programming

Creating a Hash Table

Dear Friends, I want to create a hash table using the standard Glib header (if possible) so that I can store a structure and keep the hash key(search key) based on a string. Any example code would be great since I am not able to get the main idea. best regards Skull (4 Replies)
Discussion started by: callmetheskull
4 Replies

9. Programming

hash table implementations in C Language

Hello List, Iam searching for a solution where i can use hash based searching . In Detail , I have linked list which will be dynamically increasing . I need a best searching mechanisim such a way that it can take only one itereation . Right now iam using linear search which is taking... (11 Replies)
Discussion started by: vlrk
11 Replies

10. UNIX for Advanced & Expert Users

Creating a hash table using shell script

Hi, For one of my programs, I need to have a hashtable as in Perl. Unfortunately shell doesnt provide any variable like hash. Is there anyway/trick, I could implement a hash in shell (using shell scripts/sed/awk). JP (2 Replies)
Discussion started by: jyotipg
2 Replies
Login or Register to Ask a Question