0% found this document useful (0 votes)
21 views4 pages

ADS Lab Week 12

This document provides the code for implementing a search operation using a trie data structure in C. It includes functions to get a new trie node, insert a key into the trie, and search for a key in the trie. The main function demonstrates constructing a trie from sample keys and searching for keys in the trie, outputting whether they are present or not.

Uploaded by

Kesava
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views4 pages

ADS Lab Week 12

This document provides the code for implementing a search operation using a trie data structure in C. It includes functions to get a new trie node, insert a key into the trie, and search for a key in the trie. The main function demonstrates constructing a trie from sample keys and searching for keys in the trie, outputting whether they are present or not.

Uploaded by

Kesava
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

WEEK 12

AIM: Implement Search Operation with Trie.

PROGRAM:

// C implementation of search and insert operations on Trie

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <stdbool.h>

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])

// Alphabet size (# of symbols)

#define ALPHABET_SIZE (26)

// Converts key current character into index

// use only 'a' through 'z' and lower case

#define CHAR_TO_INDEX(c) ((int)c - (int)'a')

// trie node

struct TrieNode

struct TrieNode *children[ALPHABET_SIZE];

// isEndOfWord is true if the node represents

// end of a word

bool isEndOfWord;

};

// Returns new trie node (initialized to NULLs)

struct TrieNode *getNode(void)

struct TrieNode *pNode = NULL;


pNode = (struct TrieNode *)malloc(sizeof(struct TrieNode));

if (pNode)

int i;

pNode->isEndOfWord = false;

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

pNode->children[i] = NULL;

return pNode;

// If not present, inserts key into trie

// If the key is prefix of trie node, just marks leaf node

void insert(struct TrieNode *root, const char *key)

int level;

int length = strlen(key);

int index;

struct TrieNode *pCrawl = root;

for (level = 0; level < length; level++)

index = CHAR_TO_INDEX(key[level]);

if (!pCrawl->children[index])

pCrawl->children[index] = getNode();

pCrawl = pCrawl->children[index];

// mark last node as leaf

pCrawl->isEndOfWord = true;
}

// Returns true if key presents in trie, else false

bool search(struct TrieNode *root, const char *key)

int level;

int length = strlen(key);

int index;

struct TrieNode *pCrawl = root;

for (level = 0; level < length; level++)

index = CHAR_TO_INDEX(key[level]);

if (!pCrawl->children[index])

return false;

pCrawl = pCrawl->children[index];

return (pCrawl->isEndOfWord);

// Driver

int main()

// Input keys (use only 'a' through 'z' and lower case)

char keys[][8] = {"the", "a", "there", "answer", "any",

"by", "bye", "their"};

char output[][32] = {"Not present in trie", "Present in trie"};

struct TrieNode *root = getNode();

// Construct trie

int i;
for (i = 0; i < ARRAY_SIZE(keys); i++)

insert(root, keys[i]);

// Search for different keys

printf("%s --- %s\n", "the", output[search(root, "the")] );

printf("%s --- %s\n", "these", output[search(root, "these")] );

printf("%s --- %s\n", "their", output[search(root, "their")] );

printf("%s --- %s\n", "thaw", output[search(root, "thaw")] );

return 0;

You might also like