<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;C0UDSHs4eSp7ImA9WhRbGU4.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327</id><updated>2012-02-11T09:04:39.531+05:30</updated><category term="Compiler" /><category term="C++ Command Pattern" /><category term="C++ Diamond Problem" /><category term="Abstract Base Class" /><category term="Facade Pattern" /><category term="C++ Exception Handling" /><category term="Priority Queues" /><category term="asserts" /><category term="C++ Copy Constructor" /><category term="Inline Functions" /><category term="dynamic_cast" /><category term="C++ heaps" /><category term="Operator Overloading" /><category term="C++ Inheritance" /><category term="Friend Functions" /><category term="css" /><category term="Quick Select in C++" /><category term="C++ Virtual Functions" /><category term="Merge sort" /><category term="C++ Templates" /><category term="Debugging" /><category term="Quick Sort Algorithm" /><category term="C++ Overriding" /><category term="B-Tree" /><category term="Virtual Functions" /><category term="Level Order" /><category term="C++ RTTI" /><category term="C++ Free Compilers" /><category term="C++ Virtual Destructor" /><category term="Heaps" /><category term="Width First Traversal" /><category term="Command Pattern" /><category term="UML" /><category term="Quick Select" /><category term="image and text side by side" /><category term="Trees" /><category term="Bubble Sort using C++" /><category term="C++ Inline Functions" /><category term="DFS" /><category term="Templates" /><category term="BST" /><category term="Placement new" /><category term="Quick Sort using C++" /><category term="Double ended queue" /><category term="C++ Operator Overloading" /><category term="Auto_Ptr" /><category term="Factory Pattern" /><category term="Binary Search Trees" /><category term="STL" /><category term="html" /><category term="Observer Pattern" /><category term="Post-Order" /><category term="C++ Tries" /><category term="C++ Typecasting" /><category term="Heap sort" /><category term="Virtual Destructor" /><category term="C++ Template Pattern" /><category term="C++ Stacks" /><category term="static_cast" /><category term="Quick Sort" /><category term="C++ Adapter pattern" /><category term="Chain of Responsibility" /><category term="Traversal" /><category term="Namespaces" /><category term="C++ Dequeue" /><category term="Breadth First Traversal" /><category term="C++ this pointer" /><category term="C++ Stacks using arrays" /><category term="Adapter Pattern" /><category term="this pointer" /><category term="C++ new and delete" /><category term="RTTI" /><category term="Visitor Pattern" /><category term="reinterpret_cast" /><category term="C++ Mutable" /><category term="C++ Preprocessor directives" /><category term="C++ Preprocessor Operators" /><category term="C++ Object Slicing" /><category term="C++ Visitor Pattern" /><category term="C++ Facade Pattern" /><category term="C++ Default Arguments" /><category term="Binary Search Trees using C++" /><category term="Typecasting" /><category term="Explicit" /><category term="In-Order" /><category term="C++ deque" /><category term="C++ Singleton" /><category term="const_cast" /><category term="C++ Abstract Base Class" /><category term="C++ Bit Fields" /><category term="Design Patterns" /><category term="C++ Observer Pattern" /><category term="object slicing" /><category term="Inheritance" /><category term="C++ Placement New" /><category term="Copy Constructor" /><category term="C++ Factory Pattern" /><category term="C++ Merge sort" /><category term="C++ Queues" /><category term="C++ Auto_Ptr" /><category term="C++ Explicit" /><category term="Bubble Sort Algorithm" /><category term="Diamond Problem" /><category term="Mutable" /><category term="C++ Namespaces" /><category term="Memory Management" /><category term="C++ Copy Assignment Operator" /><category term="Exception Handling" /><category term="C++ Singly Linked Lists" /><category term="Tries" /><category term="Pre-Order" /><category term="reference variables" /><category term="Singleton" /><category term="C++ References" /><category term="C++ Debugging" /><category term="C++ Friends" /><category term="Bubble Sort" /><category term="C++ Stacks using linked lists" /><title>The Tutorial site</title><subtitle type="html">Hello. Welcome to my blog on programming tutorials. Covers wide range of topics including general C++ concepts, data structures, algorithms, design patterns, tools etc. Tested code samples are presented. Your comments on the posts are appreciated.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/login2win" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="login2win" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">login2win</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;CUUNR349fCp7ImA9WhZbF08.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-3945602731246608430</id><published>2011-06-22T11:44:00.000+05:30</published><updated>2011-06-22T11:44:56.064+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-22T11:44:56.064+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quick Select" /><category scheme="http://www.blogger.com/atom/ns#" term="Quick Select in C++" /><title>Quick Select</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;What is Quick Select Algorithm? How to implement in C++?&lt;/strong&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;The QuickSelect algorithm quickly finds the k-th smallest element of an unsorted array of n elements.&lt;/li&gt;
&lt;li&gt;It is an &lt;span class="texhtml"&gt;&lt;i&gt;O&lt;/i&gt;(&lt;i&gt;n&lt;/i&gt;)&lt;/span&gt;, worst-case linear time, selection algorithm. A typical selection by sorting method would need atleast O(&lt;i&gt;n&lt;/i&gt; log &lt;i&gt;n&lt;/i&gt;) time.&lt;/li&gt;
&lt;li&gt;This algorithm is identical to quick sort but it does only a partial sort, since we already know which partition our desired element lies as the pivot is in final sorted position.&lt;/li&gt;
&lt;/ul&gt;EXAMPLE:- Quick select implementation in C++&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// A simple print function
void print(int *input)
{
    for ( int i = 0; i &amp;lt; 5; i++ )
        cout &amp;lt;&amp;lt; input[i] &amp;lt;&amp;lt; " ";
    cout &amp;lt;&amp;lt; endl;
}

int partition(int* input, int p, int r)
{
    int pivot = input[r];
    
    while ( p &amp;lt; r )
    {
        while ( input[p] &amp;lt; pivot )
            p++;
        
        while ( input[r] &amp;gt; pivot )
            r--;
        
        if ( input[p] == input[r] )
            p++;
        else if ( p &amp;lt; r ) {
            int tmp = input[p];
            input[p] = input[r];
            input[r] = tmp;
        }
    }
    
    return r;
}

int quick_select(int* input, int p, int r, int k)
{
    if ( p == r ) return input[p];
    int j = partition(input, p, r);
    int length = j - p + 1;
    if ( length == k ) return input[j];
    else if ( k &amp;lt; length ) return quick_select(input, p, j - 1, k);
    else  return quick_select(input, j + 1, r, k - length);
}

int main()
{
    int A1[] = { 100, 400, 300, 500, 200 };
    cout &amp;lt;&amp;lt; "1st order element " &amp;lt;&amp;lt; quick_select(A1, 0, 4, 1) &amp;lt;&amp;lt; endl;
    int A2[] = { 100, 400, 300, 500, 200 };
    cout &amp;lt;&amp;lt; "2nd order element " &amp;lt;&amp;lt; quick_select(A2, 0, 4, 2) &amp;lt;&amp;lt; endl;
    int A3[] = { 100, 400, 300, 500, 200 };
    cout &amp;lt;&amp;lt; "3rd order element " &amp;lt;&amp;lt; quick_select(A3, 0, 4, 3) &amp;lt;&amp;lt; endl;
    int A4[] = { 100, 400, 300, 500, 200 };
    cout &amp;lt;&amp;lt; "4th order element " &amp;lt;&amp;lt; quick_select(A4, 0, 4, 4) &amp;lt;&amp;lt; endl;
    int A5[] = { 100, 400, 300, 500, 200 };
    cout &amp;lt;&amp;lt; "5th order element " &amp;lt;&amp;lt; quick_select(A5, 0, 4, 5) &amp;lt;&amp;lt; endl;
}

OUTPUT:-
1st order element 100
2nd order element 200
3rd order element 300
4th order element 400
5th order element 500
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-3945602731246608430?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aUgqMi-GX912FMt9d41YP_ozkyc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aUgqMi-GX912FMt9d41YP_ozkyc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aUgqMi-GX912FMt9d41YP_ozkyc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aUgqMi-GX912FMt9d41YP_ozkyc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/3945602731246608430/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/quick-select.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/3945602731246608430?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/3945602731246608430?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/quick-select.html" title="Quick Select" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total></entry><entry gd:etag="W/&quot;A0EFSHkyfyp7ImA9WhZbEkU.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-4131090045290202139</id><published>2011-06-17T11:16:00.000+05:30</published><updated>2011-06-17T11:16:59.797+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-17T11:16:59.797+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Tries" /><category scheme="http://www.blogger.com/atom/ns#" term="Tries" /><title>C++ Tries</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is a Trie? How to implement Tries in C++?&lt;/span&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Tries are used to index and search strings in a text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Some examples of tries usage include, finding the longest prefix match in a routing table, auto complete of web addresses in browser etc.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Trie is a tree where each vertex represents a word or prefix.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The root represents an empty string.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Markers are used to indicate end of words.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;A typical node in a trie includes the content (a char), marker for end of word and a &lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;collection of children.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;An example of trie. (Using words Hello, Balloon, Ball)&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-odg5LWHh3Wo/TfrpzH6GIJI/AAAAAAAAAHY/Yw7tV0HyP2s/s1600/trie.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" i$="true" src="http://4.bp.blogspot.com/-odg5LWHh3Wo/TfrpzH6GIJI/AAAAAAAAAHY/Yw7tV0HyP2s/s320/trie.JPG" width="215" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;EXAMPLE:- Demonstrate a simple implementation of search in a Trie&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

class Node {
public:
    Node() { mContent = ' '; mMarker = false; }
    ~Node() {}
    char content() { return mContent; }
    void setContent(char c) { mContent = c; }
    bool wordMarker() { return mMarker; }
    void setWordMarker() { mMarker = true; }
    Node* findChild(char c);
    void appendChild(Node* child) { mChildren.push_back(child); }
    vector&amp;lt;Node*&amp;gt; children() { return mChildren; }

private:
    char mContent;
    bool mMarker;
    vector&amp;lt;Node*&amp;gt; mChildren;
};

class Trie {
public:
    Trie();
    ~Trie();
    void addWord(string s);
    bool searchWord(string s);
    void deleteWord(string s);
private:
    Node* root;
};

Node* Node::findChild(char c)
{
    for ( int i = 0; i &amp;lt; mChildren.size(); i++ )
    {
        Node* tmp = mChildren.at(i);
        if ( tmp-&amp;gt;content() == c )
        {
            return tmp;
        }
    }

    return NULL;
}

Trie::Trie()
{
    root = new Node();
}

Trie::~Trie()
{
    // Free memory
}

void Trie::addWord(string s)
{
    Node* current = root;

    if ( s.length() == 0 )
    {
        current-&amp;gt;setWordMarker(); // an empty word
        return;
    }

    for ( int i = 0; i &amp;lt; s.length(); i++ )
    {        
        Node* child = current-&amp;gt;findChild(s[i]);
        if ( child != NULL )
        {
            current = child;
        }
        else
        {
            Node* tmp = new Node();
            tmp-&amp;gt;setContent(s[i]);
            current-&amp;gt;appendChild(tmp);
            current = tmp;
        }
        if ( i == s.length() - 1 )
            current-&amp;gt;setWordMarker();
    }
}


bool Trie::searchWord(string s)
{
    Node* current = root;

    while ( current != NULL )
    {
        for ( int i = 0; i &amp;lt; s.length(); i++ )
        {
            Node* tmp = current-&amp;gt;findChild(s[i]);
            if ( tmp == NULL )
                return false;
            current = tmp;
        }

        if ( current-&amp;gt;wordMarker() )
            return true;
        else
            return false;
    }

    return false;
}


// Test program
int main()
{
    Trie* trie = new Trie();
    trie-&amp;gt;addWord("Hello");
    trie-&amp;gt;addWord("Balloon");
    trie-&amp;gt;addWord("Ball");

    if ( trie-&amp;gt;searchWord("Hell") )
        cout &amp;lt;&amp;lt; "Found Hell" &amp;lt;&amp;lt; endl;

    if ( trie-&amp;gt;searchWord("Hello") )
        cout &amp;lt;&amp;lt; "Found Hello" &amp;lt;&amp;lt; endl;

    if ( trie-&amp;gt;searchWord("Helloo") )
        cout &amp;lt;&amp;lt; "Found Helloo" &amp;lt;&amp;lt; endl;

    if ( trie-&amp;gt;searchWord("Ball") )
        cout &amp;lt;&amp;lt; "Found Ball" &amp;lt;&amp;lt; endl;

    if ( trie-&amp;gt;searchWord("Balloon") )
        cout &amp;lt;&amp;lt; "Found Balloon" &amp;lt;&amp;lt; endl;

    delete trie;
}

OUTPUT:-
Found Hello
Found Ball
Found Balloon
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-4131090045290202139?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uBtaXVpJ2OFgIas75jth3fq_z2M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uBtaXVpJ2OFgIas75jth3fq_z2M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uBtaXVpJ2OFgIas75jth3fq_z2M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uBtaXVpJ2OFgIas75jth3fq_z2M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/4131090045290202139/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/c-tries.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4131090045290202139?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4131090045290202139?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/c-tries.html" title="C++ Tries" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-odg5LWHh3Wo/TfrpzH6GIJI/AAAAAAAAAHY/Yw7tV0HyP2s/s72-c/trie.JPG" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;Dk4HSHo4eSp7ImA9WhZbEkU.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-2127717409263783888</id><published>2011-06-17T09:58:00.000+05:30</published><updated>2011-06-17T09:58:59.431+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-17T09:58:59.431+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Merge sort" /><category scheme="http://www.blogger.com/atom/ns#" term="Merge sort" /><title>Merge Sort</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;strong&gt;What is Merge Sort algorithm? How to implement Merge Sort in C++?&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Merge Sort&amp;nbsp;&amp;nbsp;is a divide and conquer algorithm.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;In the best/ average/ worst case it gives a time complexity of O(n log n).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Conceptually, a merge sort works as follows:&lt;/span&gt;&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If the list is of length 0 or 1, then it is already sorted. Otherwise: &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Divide the unsorted list into two sublists of about half the size. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Sort each sublist recursively by re-applying the merge sort.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Merge the two sublists back into one sorted list.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;(Reference: &lt;a href="http://en.wikipedia.org/wiki/Merge_sort"&gt;http://en.wikipedia.org/wiki/Merge_sort&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;EXAMPLE: Demonstrate a simple merge sort implementation&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cmath&amp;gt;
using namespace std;

const int INPUT_SIZE = 10;

// A simple print function
void print(int *input)
{
    for ( int i = 0; i &amp;lt; INPUT_SIZE; i++ )
        cout &amp;lt;&amp;lt; input[i] &amp;lt;&amp;lt; " ";
    cout &amp;lt;&amp;lt; endl;
}

void merge(int* input, int p, int r)
{
    int mid = floor((p + r) / 2);
    int i1 = 0;
    int i2 = p;
    int i3 = mid + 1;

    // Temp array
    int temp[r-p+1];

    // Merge in sorted form the 2 arrays
    while ( i2 &amp;lt;= mid &amp;amp;&amp;amp; i3 &amp;lt;= r )
        if ( input[i2] &amp;lt; input[i3] )
            temp[i1++] = input[i2++];
        else
            temp[i1++] = input[i3++];

    // Merge the remaining elements in left array
    while ( i2 &amp;lt;= mid )
        temp[i1++] = input[i2++];

    // Merge the remaining elements in right array
    while ( i3 &amp;lt;= r )
        temp[i1++] = input[i3++];

    // Move from temp array to master array
    for ( int i = p; i &amp;lt;= r; i++ )
        input[i] = temp[i-p];
}

void merge_sort(int* input, int p, int r)
{
    if ( p &amp;lt; r )
    {
        int mid = floor((p + r) / 2);
        merge_sort(input, p, mid);
        merge_sort(input, mid + 1, r);
        merge(input, p, r);
    }
}

int main()
{
    int input[INPUT_SIZE] = {500, 700, 800, 100, 300, 200, 900, 400, 1000, 600};
    cout &amp;lt;&amp;lt; "Input: ";
    print(input);
    merge_sort(input, 0, 9);
    cout &amp;lt;&amp;lt; "Output: ";
    print(input);
    return 0;
}
OUTPUT:-
Input: 500 700 800 100 300 200 900 400 1000 600
Output: 100 200 300 400 500 600 700 800 900 1000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-2127717409263783888?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1ac6rMs5FwcgPXUPmNhaYm22PLo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1ac6rMs5FwcgPXUPmNhaYm22PLo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1ac6rMs5FwcgPXUPmNhaYm22PLo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1ac6rMs5FwcgPXUPmNhaYm22PLo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/2127717409263783888/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/merge-sort.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2127717409263783888?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2127717409263783888?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/merge-sort.html" title="Merge Sort" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEUCSH8_eip7ImA9WhZbEEk.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-6756820955825480413</id><published>2011-06-14T15:41:00.000+05:30</published><updated>2011-06-14T15:41:09.142+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-14T15:41:09.142+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Facade Pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="Facade Pattern" /><title>Facade Pattern</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;What is Facade Pattern?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span"&gt;It is a structural design &lt;/span&gt;&lt;span class="Apple-style-span"&gt;pattern.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;Makes an existing complex software library easier to use by &lt;/span&gt;providing a simpler interface for common tasks.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Allows the applications/ clients using the library de-coupled from inner workings of a complex library.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;EXAMPLE:- Demonstrate a simple Facade Pattern in C++&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Transfer library
class Usb {
public:
    bool isAvailable()
    {
        return false;
    }

    void connect()
    {
        cout &amp;lt;&amp;lt; "Connecting via USB" &amp;lt;&amp;lt; endl;
    }

    void send(string file)
    {
        cout &amp;lt;&amp;lt; file &amp;lt;&amp;lt; " sent." &amp;lt;&amp;lt; endl;
    }
};

class Bluetooth {
public:
    bool isAvailable()
    {
        return true;
    }

    void connect()
    {
        cout &amp;lt;&amp;lt; "Connecting via BT" &amp;lt;&amp;lt; endl;
    }

    void authenticate()
    {
        cout &amp;lt;&amp;lt; "Authenticating BT" &amp;lt;&amp;lt; endl;
    }

    void send(string file)
    {
        cout &amp;lt;&amp;lt; file &amp;lt;&amp;lt; " sent." &amp;lt;&amp;lt; endl;
    }
};

// The Facade
class FileTransfer {
public:
    void sendFile(string fileName)
    {
        Usb* u = new Usb();
        Bluetooth* b = new Bluetooth();
        if ( u-&amp;gt;isAvailable() )
        {
            u-&amp;gt;connect();
            u-&amp;gt;send(fileName);
        }
        else if ( b-&amp;gt;isAvailable() )
        {
            b-&amp;gt;connect();
            b-&amp;gt;authenticate();
            b-&amp;gt;send(fileName);
        }
        else
        {
            cout &amp;lt;&amp;lt; "Not sent" &amp;lt;&amp;lt; endl;
        }
        delete b;
        delete u;
    }
};

// Test Program
int main()
{
    FileTransfer* ft = new FileTransfer();
    ft-&amp;gt;sendFile("mypicture");
    delete ft;
}

OUTPUT:-
Connecting via BT
Authenticating BT
mypicture sent.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-6756820955825480413?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q4ce7Qbk7rSVRVj1Scg1cegWfEw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q4ce7Qbk7rSVRVj1Scg1cegWfEw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q4ce7Qbk7rSVRVj1Scg1cegWfEw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q4ce7Qbk7rSVRVj1Scg1cegWfEw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/6756820955825480413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/facade-pattern.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/6756820955825480413?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/6756820955825480413?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/facade-pattern.html" title="Facade Pattern" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkADRH08fSp7ImA9WhZbEE8.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-3172753516900089557</id><published>2011-06-14T09:42:00.000+05:30</published><updated>2011-06-14T09:42:55.375+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-14T09:42:55.375+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Visitor Pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="Visitor Pattern" /><title>Visitor Pattern</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is a visitor pattern?&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The visitor pattern is a behavioral design pattern.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This pattern allows to seperate the data structures and the algorithms to be applied on the data.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Both data structure objects and algorithm objects can evolve seperately. Makes development and changes easier.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Data structure (element) objects have an "accept" method which take in a visitor (algorithmic) object.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Algorithmic objects have a "visit" method which take in a data structure object.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/font&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;EXAMPLE:- Demonstrate a simple visitor pattern using C++&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;list&amp;gt;
using namespace std;

// Forwards
class VisitorIntf;

// Abstract interface for Element objects
class ElementIntf
{
public:
    virtual string name() = 0;
    virtual void accept(VisitorIntf* object) = 0;
};

// Abstract interface for Visitor objects
class VisitorIntf
{
public:
    virtual void visit(ElementIntf* object) = 0;
};

// Concrete element object
class ConcreteElement1 : public ElementIntf
{
public:
    string name()
    {
        return "ConcreteElement1";
    }

    void accept(VisitorIntf *object)
    {
        object-&amp;gt;visit(this);
    }
};


// Concrete element object
class ConcreteElement2 : public ElementIntf
{
public:
    string name()
    {
        return "ConcreteElement2";
    }

    void accept(VisitorIntf *object)
    {
        object-&amp;gt;visit(this);
    }
};

// Visitor logic 1
class ConcreteVisitor1 : public VisitorIntf
{
public:
    void visit(ElementIntf *object)
    {
        cout &amp;lt;&amp;lt; "Visited " &amp;lt;&amp;lt; object-&amp;gt;name() &amp;lt;&amp;lt;
                " using ConcreteVisitor1." &amp;lt;&amp;lt; endl;
    }
};

// Visitor logic 2
class ConcreteVisitor2 : public VisitorIntf
{
public:
    void visit(ElementIntf *object)
    {
        cout &amp;lt;&amp;lt; "Visited " &amp;lt;&amp;lt; object-&amp;gt;name() &amp;lt;&amp;lt;
             " using ConcreteVisitor2." &amp;lt;&amp;lt; endl;
    }
};

//  Test main program
int main()
{
    list&amp;lt;ElementIntf*&amp;gt; elementList1;
    elementList1.push_back(new ConcreteElement1());
    elementList1.push_back(new ConcreteElement2());

    VisitorIntf* visitor1 = new ConcreteVisitor1();
    while ( ! elementList1.empty() )
    {
        ElementIntf* element = elementList1.front();
        element-&amp;gt;accept(visitor1);
        elementList1.pop_front();
    }

    list&amp;lt;ElementIntf*&amp;gt; elementList2;
    elementList2.push_back(new ConcreteElement1());
    elementList2.push_back(new ConcreteElement2());
    VisitorIntf* visitor2 = new ConcreteVisitor2();
    while ( ! elementList2.empty() )
    {
        ElementIntf* element = elementList2.front();
        element-&amp;gt;accept(visitor2);
        elementList2.pop_front();
    }

    delete visitor1;
    delete visitor2;
}

OUTPUT:-
Visited ConcreteElement1 using ConcreteVisitor1.
Visited ConcreteElement2 using ConcreteVisitor1.
Visited ConcreteElement1 using ConcreteVisitor2.
Visited ConcreteElement2 using ConcreteVisitor2.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-3172753516900089557?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jr_2ySsKcIeP5-ufugYIRaXz6PQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jr_2ySsKcIeP5-ufugYIRaXz6PQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jr_2ySsKcIeP5-ufugYIRaXz6PQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jr_2ySsKcIeP5-ufugYIRaXz6PQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/3172753516900089557/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/visitor-pattern.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/3172753516900089557?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/3172753516900089557?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/visitor-pattern.html" title="Visitor Pattern" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0ABRnw-eyp7ImA9WhZUGUg.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-4214122135385970976</id><published>2011-06-13T15:39:00.000+05:30</published><updated>2011-06-13T15:39:17.253+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T15:39:17.253+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Adapter pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="Adapter Pattern" /><title>Adapter Pattern</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is Adapter pattern ?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Adapter pattern is a structural design pattern.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Also referred as wrapper pattern.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;An adapter allows classes to work together that normally could not because of incompatible interfaces, by providing its interface to clients while using the original interface. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The adapter translates calls to its interface into calls to the original interface.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The adapter is also responsible for transforming data into appropriate forms.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The adapter is created by implementing or inheriting both the interface that is expected and the interface that is pre-existing. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;It is typical for the expected interface to be created as a abstract class.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;EXAMPLE:- Demonstrate a simple adapter pattern using C++&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;list&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
using namespace std;

// Legacy account
class LegacyAccount
{
    int no;

public:
    LegacyAccount(int no)
    {
        this-&amp;gt;no = no;
    }

    void legacyAccountPrint()
    {
        cout &amp;lt;&amp;lt; "Display legacy account details " &amp;lt;&amp;lt; no &amp;lt;&amp;lt; endl;
    }
};

// Renewed interface
class RenewedAccountIntf
{
public:
    virtual void display() = 0;
};

// Renewed account object
class Account : public RenewedAccountIntf
{
    string no;

public:
    Account(string no) {
        this-&amp;gt;no = no;
    }

    void display()
    {
        cout &amp;lt;&amp;lt; "Display renewed account details " &amp;lt;&amp;lt; no &amp;lt;&amp;lt; endl;
    }
};

// Legacy account adapter to renewed interface
class LegacyAccountAdapter : public LegacyAccount,
        public RenewedAccountIntf
{
public:
    LegacyAccountAdapter(string no) :
        LegacyAccount(atoi(no.c_str()))
    {
    }

    void display()
    {
        this-&amp;gt;legacyAccountPrint();
    }
};


// Test program
int main()
{
    list&amp;lt;RenewedAccountIntf*&amp;gt; accountList;
    accountList.push_back(new Account("accountholder 1"));
    accountList.push_back(new Account("accountholder 2"));
    accountList.push_back(new LegacyAccountAdapter("12345"));

    while ( ! accountList.empty() )
    {
        RenewedAccountIntf* obj = accountList.front();
        obj-&amp;gt;display();
        accountList.pop_front();
    }
}

OUTPUT:-Display renewed account details accountholder 1
Display renewed account details accountholder 2
Display legacy account details 12345
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-4214122135385970976?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZmM9tgmiJL-jcVxVQmFFGHtEv3E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZmM9tgmiJL-jcVxVQmFFGHtEv3E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZmM9tgmiJL-jcVxVQmFFGHtEv3E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZmM9tgmiJL-jcVxVQmFFGHtEv3E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/4214122135385970976/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/adapter-pattern.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4214122135385970976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4214122135385970976?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/adapter-pattern.html" title="Adapter Pattern" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEIEQ38zcCp7ImA9WhZUGUk.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-4385706465093317330</id><published>2011-06-13T11:58:00.000+05:30</published><updated>2011-06-13T11:58:22.188+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T11:58:22.188+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Command Pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="Command Pattern" /><title>Command Pattern</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is Command Pattern?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Command pattern&amp;nbsp;is a behavioral design pattern.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Encapsulates a command/ request. The command itself is treated as an object.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Classes participating in a command pattern include:-&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Command:- An abstract interface defining the execute method.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Concrete Commands:- Extend the Command interface and implements the execute method. Invokes the command on the receiver object.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Receiver:- Knows how to perform the command action.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Invoker:- Asks the command object to carry out the request.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Client:- Creates the commands and associates with the receiver.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Some examples:-&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Used&amp;nbsp;when&amp;nbsp;history of requests is needed. (Stock orders executed for today)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Asynchronous processing. Commands need to be executed at variant times. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Installation wizards.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;EXAMPLE:- Demonstrates a simple implementation of command pattern in C++&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

// Command interface
class Command
{
public:
    virtual void execute() = 0;
};

// Receiver
class StockTrade
{
public:
    StockTrade() {}
    void buy() { cout &amp;lt;&amp;lt; "Buy stock" &amp;lt;&amp;lt; endl; }
    void sell() { cout &amp;lt;&amp;lt; "Sell stock" &amp;lt;&amp;lt; endl; }
};

// Concrete command 1
class BuyOrder : public Command
{
    StockTrade* stock;
public:
    BuyOrder(StockTrade* stock)
    {
        this-&amp;gt;stock = stock;
    }

    void execute()
    {
        stock-&amp;gt;buy();
    }
};

// Concrete command 2
class SellOrder : public Command
{
    StockTrade* stock;
public:
    SellOrder(StockTrade* stock)
    {
        this-&amp;gt;stock = stock;
    }

    void execute()
    {
        stock-&amp;gt;sell();
    }
};

// Invoker
class StockAgent
{
public:
    StockAgent() {}
    void order( Command* command )
    {
        commandList.push_back(command);
        command-&amp;gt;execute();
    }
private:
    // Looking at this command list gives
    // this order history
    vector&amp;lt;Command*&amp;gt; commandList;
};

// Test program
int main()
{
    StockTrade* stock = new StockTrade();
    BuyOrder* buy1 = new BuyOrder(stock);
    BuyOrder* buy2 = new BuyOrder(stock);
    SellOrder* sell1 = new SellOrder(stock);

    StockAgent* agent = new StockAgent();
    agent-&amp;gt;order(buy1);
    agent-&amp;gt;order(buy2);
    agent-&amp;gt;order(sell1);

    delete agent;
    delete sell1;
    delete buy2;
    delete buy1;
    delete stock;
}

OUTPUT:-
Buy stock
Buy stock
Sell stock

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-4385706465093317330?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7aATd6xgERjrqZNqAmm72TeCWbo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7aATd6xgERjrqZNqAmm72TeCWbo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7aATd6xgERjrqZNqAmm72TeCWbo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7aATd6xgERjrqZNqAmm72TeCWbo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/4385706465093317330/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/command-pattern.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4385706465093317330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4385706465093317330?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/command-pattern.html" title="Command Pattern" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0IFQ30yeCp7ImA9WhZUFkQ.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-6023749418398908479</id><published>2011-06-10T14:15:00.000+05:30</published><updated>2011-06-10T14:15:12.390+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-10T14:15:12.390+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ heaps" /><category scheme="http://www.blogger.com/atom/ns#" term="Priority Queues" /><category scheme="http://www.blogger.com/atom/ns#" term="Heap sort" /><category scheme="http://www.blogger.com/atom/ns#" term="Heaps" /><title>C++ Heaps</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is a heap data structure? How to implement in C++?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Heap is a binary tree that stores priorities (or priority-element pairs) at the nodes.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;It has the following properties:&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;All levels except last level are full. Last level is left filled. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Priority of a node is atleast as large as that of its parent (min-heap) (or) vice-versa (max-heap).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If the smallest element is in the root node, it results in a min-heap.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If the largest element is in the root node, it results in a max-heap.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;A heap can be thought of as a priority queue. The most important node will always be at the root of the tree.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Heaps can also be used to sort data, heap sort.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;The two most interesting operations in a heap is heapifyup and heapifydown.&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Heapifyup (assumption min-heap)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Used to add a node to the heap. &lt;/span&gt;&lt;span style="font-family: Arial;"&gt;To add a node, it is inserted at the last empty space and heapifyup process is done.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;When a node is added, its key is compared to its parent. If parent key is smaller than the current node it is swapped. The process&amp;nbsp;is repeated till the heap propery is met.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Heapifydown&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Used during removal of a node. When a node is removed which is always the root (lowest in priority) the last available node&amp;nbsp;in heap is replaced as the root and heapifydown process is done.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;The key of parent node is compared with the children. If any of the children have lower priority it is swapped with the parent. The process is repeated for the newly swapped node till the heap property is met.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;Good references.&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;a href="http://www.cprogramming.com/tutorial/computersciencetheory/heap.html"&gt;http://www.cprogramming.com/tutorial/computersciencetheory/heap.html&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-family: Arial;"&gt;EXAMPLE:- Implement a heap in C++. Demonstrates min-heap using arrays.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;iterator&amp;gt;
using namespace std;

class Heap {
public:
    Heap();
    ~Heap();
    void insert(int element);
    int deletemin();
    void print();
    int size() { return heap.size(); }
private:
    int left(int parent);
    int right(int parent);
    int parent(int child);
    void heapifyup(int index);
    void heapifydown(int index);
private:
    vector&amp;lt;int&amp;gt; heap;
};

Heap::Heap()
{
}

Heap::~Heap()
{
}

void Heap::insert(int element)
{
    heap.push_back(element);
    heapifyup(heap.size() - 1);
}

int Heap::deletemin()
{
    int min = heap.front();
    heap[0] = heap.at(heap.size() - 1);
    heap.pop_back();
    heapifydown(0);
    return min;
}

void Heap::print()
{
    vector&amp;lt;int&amp;gt;::iterator pos = heap.begin();
    cout &amp;lt;&amp;lt; "Heap = ";
    while ( pos != heap.end() ) {
        cout &amp;lt;&amp;lt; *pos &amp;lt;&amp;lt; " ";
        ++pos;
    }
    cout &amp;lt;&amp;lt; endl;
}

void Heap::heapifyup(int index)
{    
    //cout &amp;lt;&amp;lt; "index=" &amp;lt;&amp;lt; index &amp;lt;&amp;lt; endl;
    //cout &amp;lt;&amp;lt; "parent(index)=" &amp;lt;&amp;lt; parent(index) &amp;lt;&amp;lt; endl;
    //cout &amp;lt;&amp;lt; "heap[parent(index)]=" &amp;lt;&amp;lt; heap[parent(index)] &amp;lt;&amp;lt; endl;
    //cout &amp;lt;&amp;lt; "heap[index]=" &amp;lt;&amp;lt; heap[index] &amp;lt;&amp;lt; endl;
    while ( ( index &amp;gt; 0 ) &amp;amp;&amp;amp; ( parent(index) &amp;gt;= 0 ) &amp;amp;&amp;amp;
            ( heap[parent(index)] &amp;gt; heap[index] ) )
    {
        int tmp = heap[parent(index)];
        heap[parent(index)] = heap[index];
        heap[index] = tmp;
        index = parent(index);
    }
}

void Heap::heapifydown(int index)
{     
    //cout &amp;lt;&amp;lt; "index=" &amp;lt;&amp;lt; index &amp;lt;&amp;lt; endl;
    //cout &amp;lt;&amp;lt; "left(index)=" &amp;lt;&amp;lt; left(index) &amp;lt;&amp;lt; endl;
    //cout &amp;lt;&amp;lt; "right(index)=" &amp;lt;&amp;lt; right(index) &amp;lt;&amp;lt; endl;
    int child = left(index);
    if ( ( child &amp;gt; 0 ) &amp;amp;&amp;amp; ( right(index) &amp;gt; 0 ) &amp;amp;&amp;amp;
         ( heap[child] &amp;gt; heap[right(index)] ) )
    {
        child = right(index);
    }
    if ( child &amp;gt; 0 )
    {
        int tmp = heap[index];
        heap[index] = heap[child];
        heap[child] = tmp;
        heapifydown(child);
    }
}

int Heap::left(int parent)
{
    int i = ( parent &amp;lt;&amp;lt; 1 ) + 1; // 2 * parent + 1
    return ( i &amp;lt; heap.size() ) ? i : -1;
}

int Heap::right(int parent)
{
    int i = ( parent &amp;lt;&amp;lt; 1 ) + 2; // 2 * parent + 2
    return ( i &amp;lt; heap.size() ) ? i : -1;
}

int Heap::parent(int child)
{
    if (child != 0)
    {
        int i = (child - 1) &amp;gt;&amp;gt; 1;
        return i;
    }
    return -1;
}

int main()
{
    // Create the heap
    Heap* myheap = new Heap();
    myheap-&amp;gt;insert(700);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(500);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(100);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(800);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(200);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(400);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(900);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(1000);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(300);
    myheap-&amp;gt;print();
    myheap-&amp;gt;insert(600);
    myheap-&amp;gt;print();

    // Get priority element from the heap
    int heapSize = myheap-&amp;gt;size();
    for ( int i = 0; i &amp;lt; heapSize; i++ )
        cout &amp;lt;&amp;lt; "Get min element = " &amp;lt;&amp;lt; myheap-&amp;gt;deletemin() &amp;lt;&amp;lt; endl;

    // Cleanup
    delete myheap;
}

OUTPUT:-
Heap = 700
Heap = 500 700
Heap = 100 700 500
Heap = 100 700 500 800
Heap = 100 200 500 800 700
Heap = 100 200 400 800 700 500
Heap = 100 200 400 800 700 500 900
Heap = 100 200 400 800 700 500 900 1000
Heap = 100 200 400 300 700 500 900 1000 800
Heap = 100 200 400 300 600 500 900 1000 800 700
Get min element = 100
Get min element = 200
Get min element = 300
Get min element = 400
Get min element = 500
Get min element = 600
Get min element = 700
Get min element = 800
Get min element = 900
Get min element = 1000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-6023749418398908479?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vDgkKfF5BuMlizuaF0z6vHoeF8o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vDgkKfF5BuMlizuaF0z6vHoeF8o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vDgkKfF5BuMlizuaF0z6vHoeF8o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vDgkKfF5BuMlizuaF0z6vHoeF8o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="related" href="http://login2win.blogspot.com/heaps.html" title="C++ Heaps" /><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/6023749418398908479/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/c-heaps.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/6023749418398908479?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/6023749418398908479?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/c-heaps.html" title="C++ Heaps" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;C0IFRXo7eCp7ImA9WhZUFU4.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-7109925594524220883</id><published>2011-06-08T16:41:00.000+05:30</published><updated>2011-06-08T16:41:54.400+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-08T16:41:54.400+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BST" /><category scheme="http://www.blogger.com/atom/ns#" term="Binary Search Trees" /><category scheme="http://www.blogger.com/atom/ns#" term="Binary Search Trees using C++" /><title>Binary Search Trees in C++</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is binary search trees? How to implemement in C++?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Binary Search Tree (BST) is a binary tree (has atmost 2 children).&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;It is also referred as sorted/ ordered binary tree.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;BST has the following properties. (notes from wikipedia)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The left subtree of a node contains only nodes with keys less than the node's key. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The right subtree of a node contains only nodes with keys greater than the node's key. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Both the left and right subtrees must also be binary search trees.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;BST Operations:-&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Searching in a BST&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Examine the root node. If tree is NULL value doesn't exist.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If value equals the key in root search is successful and return.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If value is less than root, search the left sub-tree.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If value is greater than root, search the right sub-tree. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Continue until the value is found or the sub tree is NULL.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Time complexity. Average: O(log n), Worst: O(n) if the BST is unbalanced and resembles a linked list.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Insertion in BST&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Insertion begin as a search.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Compare the key with root. If not equal search the left or right sub tre&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;When a leaf node is reached add the new node to left or right based on the value.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Time complexity. Average: O(log n), Worst O(n)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Deletion in BST &lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;There are three possible cases to consider:&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Deleting a leaf (node with no children): Deleting a leaf is easy, as we can simply remove it from the tree. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Deleting a node with one child: Remove the node and replace it with its child. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Deleting a node with two children: Call the node to be deleted N. Do not delete N. Instead, choose either its in-order successor node or its in-order predecessor node, R. Replace the value of N with the value of R, then delete R.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial;"&gt;EXAMPLE:- A sample demonstration of BST using C++&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// A generic tree node class
class Node {
    int key;
    Node* left;
    Node* right;
    Node* parent;
public:
    Node() { key=-1; left=NULL; right=NULL; parent = NULL;};
    void setKey(int aKey) { key = aKey; };
    void setLeft(Node* aLeft) { left = aLeft; };
    void setRight(Node* aRight) { right = aRight; };
    void setParent(Node* aParent) { parent = aParent; };
    int Key() { return key; };
    Node* Left() { return left; };
    Node* Right() { return right; };
    Node* Parent() { return parent; };
};

// Binary Search Tree class
class Tree {
    Node* root;
public:
    Tree();
    ~Tree();
    Node* Root() { return root; };
    void addNode(int key);
    Node* findNode(int key, Node* parent);
    void walk(Node* node);
    void deleteNode(int key);
    Node* min(Node* node);
    Node* max(Node* node);
    Node* successor(int key, Node* parent);
    Node* predecessor(int key, Node* parent);
private:
    void addNode(int key, Node* leaf);
    void freeNode(Node* leaf);
};

// Constructor
Tree::Tree() {
    root = NULL;
}

// Destructor
Tree::~Tree() {
    freeNode(root);
}

// Free the node
void Tree::freeNode(Node* leaf)
{
    if ( leaf != NULL ) 
    {
        freeNode(leaf-&amp;gt;Left());
        freeNode(leaf-&amp;gt;Right());
        delete leaf;
    }
}

// Add a node [O(height of tree) on average]
void Tree::addNode(int key)
{
    // No elements. Add the root
    if ( root == NULL ) {
        cout &amp;lt;&amp;lt; "add root node ... " &amp;lt;&amp;lt; key &amp;lt;&amp;lt; endl;
        Node* n = new Node();
        n-&amp;gt;setKey(key);
    root = n;
    }
    else {
    cout &amp;lt;&amp;lt; "add other node ... " &amp;lt;&amp;lt; key &amp;lt;&amp;lt; endl;
    addNode(key, root);
    }
}

// Add a node (private)
void Tree::addNode(int key, Node* leaf) {
    if ( key &amp;lt;= leaf-&amp;gt;Key() )
    {
        if ( leaf-&amp;gt;Left() != NULL )
            addNode(key, leaf-&amp;gt;Left());
        else {
            Node* n = new Node();
            n-&amp;gt;setKey(key);
            n-&amp;gt;setParent(leaf);
            leaf-&amp;gt;setLeft(n);
        }
    }
    else
    {
        if ( leaf-&amp;gt;Right() != NULL )
            addNode(key, leaf-&amp;gt;Right());
        else {
            Node* n = new Node();
            n-&amp;gt;setKey(key);
            n-&amp;gt;setParent(leaf);
            leaf-&amp;gt;setRight(n);
        }
    }
}

// Find a node [O(height of tree) on average]
Node* Tree::findNode(int key, Node* node)
{
    if ( node == NULL )
        return NULL;
    else if ( node-&amp;gt;Key() == key )
        return node;
    else if ( key &amp;lt;= node-&amp;gt;Key() )
        findNode(key, node-&amp;gt;Left());
    else if ( key &amp;gt; node-&amp;gt;Key() )
        findNode(key, node-&amp;gt;Right());
    else
        return NULL;
}

// Print the tree
void Tree::walk(Node* node)
{
    if ( node )
    {
        cout &amp;lt;&amp;lt; node-&amp;gt;Key() &amp;lt;&amp;lt; " ";
        walk(node-&amp;gt;Left());
        walk(node-&amp;gt;Right());
    }
}

// Find the node with min key
// Traverse the left sub-tree recursively
// till left sub-tree is empty to get min
Node* Tree::min(Node* node)
{
    if ( node == NULL )
        return NULL;

    if ( node-&amp;gt;Left() )
        min(node-&amp;gt;Left());
    else
        return node;
}

// Find the node with max key
// Traverse the right sub-tree recursively
// till right sub-tree is empty to get max
Node* Tree::max(Node* node)
{
    if ( node == NULL )
        return NULL;

    if ( node-&amp;gt;Right() )
        max(node-&amp;gt;Right());
    else
        return node;
}

// Find successor to a node
// Find the node, get the node with max value
// for the right sub-tree to get the successor
Node* Tree::successor(int key, Node *node)
{
    Node* thisKey = findNode(key, node);
    if ( thisKey )
        return max(thisKey-&amp;gt;Right());
}

// Find predecessor to a node
// Find the node, get the node with max value
// for the left sub-tree to get the predecessor
Node* Tree::predecessor(int key, Node *node)
{
    Node* thisKey = findNode(key, node);
    if ( thisKey )
        return max(thisKey-&amp;gt;Left());
}

// Delete a node
// (1) If leaf just delete
// (2) If only one child delete this node and replace
// with the child
// (3) If 2 children. Find the predecessor (or successor).
// Delete the predecessor (or successor). Replace the
// node to be deleted with the predecessor (or successor).
void Tree::deleteNode(int key)
{
    // Find the node.
    Node* thisKey = findNode(key, root);

    // (1)
    if ( thisKey-&amp;gt;Left() == NULL &amp;amp;&amp;amp; thisKey-&amp;gt;Right() == NULL )
    {
        if ( thisKey-&amp;gt;Key() &amp;gt; thisKey-&amp;gt;Parent()-&amp;gt;Key() )
            thisKey-&amp;gt;Parent()-&amp;gt;setRight(NULL);
        else
            thisKey-&amp;gt;Parent()-&amp;gt;setLeft(NULL);

        delete thisKey;
    }

    // (2)
    if ( thisKey-&amp;gt;Left() == NULL &amp;amp;&amp;amp; thisKey-&amp;gt;Right() != NULL )
    {
        if ( thisKey-&amp;gt;Key() &amp;gt; thisKey-&amp;gt;Parent()-&amp;gt;Key() )
            thisKey-&amp;gt;Parent()-&amp;gt;setRight(thisKey-&amp;gt;Right());
        else
            thisKey-&amp;gt;Parent()-&amp;gt;setLeft(thisKey-&amp;gt;Right());

        delete thisKey;
    }
    if ( thisKey-&amp;gt;Left() != NULL &amp;amp;&amp;amp; thisKey-&amp;gt;Right() == NULL )
    {
        if ( thisKey-&amp;gt;Key() &amp;gt; thisKey-&amp;gt;Parent()-&amp;gt;Key() )
            thisKey-&amp;gt;Parent()-&amp;gt;setRight(thisKey-&amp;gt;Left());
        else
            thisKey-&amp;gt;Parent()-&amp;gt;setLeft(thisKey-&amp;gt;Left());

        delete thisKey;
    }

    // (3)
    if ( thisKey-&amp;gt;Left() != NULL &amp;amp;&amp;amp; thisKey-&amp;gt;Right() != NULL )
    {
        Node* sub = predecessor(thisKey-&amp;gt;Key(), thisKey);
        if ( sub == NULL )
            sub = successor(thisKey-&amp;gt;Key(), thisKey);        

        if ( sub-&amp;gt;Parent()-&amp;gt;Key() &amp;lt;= sub-&amp;gt;Key() )
            sub-&amp;gt;Parent()-&amp;gt;setRight(sub-&amp;gt;Right());
        else
            sub-&amp;gt;Parent()-&amp;gt;setLeft(sub-&amp;gt;Left());

        thisKey-&amp;gt;setKey(sub-&amp;gt;Key());
        delete sub;
    }
}

// Test main program
int main() {
    Tree* tree = new Tree();

    // Add nodes
    tree-&amp;gt;addNode(300);
    tree-&amp;gt;addNode(100);
    tree-&amp;gt;addNode(200);
    tree-&amp;gt;addNode(400);
    tree-&amp;gt;addNode(500);

    // Traverse the tree
    tree-&amp;gt;walk(tree-&amp;gt;Root());
    cout &amp;lt;&amp;lt; endl;

    // Find nodes
    if ( tree-&amp;gt;findNode(500, tree-&amp;gt;Root()) )
        cout &amp;lt;&amp;lt; "Node 500 found" &amp;lt;&amp;lt; endl;
    else
        cout &amp;lt;&amp;lt; "Node 500 not found" &amp;lt;&amp;lt; endl;

    if ( tree-&amp;gt;findNode(600, tree-&amp;gt;Root()) )
        cout &amp;lt;&amp;lt; "Node 600 found" &amp;lt;&amp;lt; endl;
    else
        cout &amp;lt;&amp;lt; "Node 600 not found" &amp;lt;&amp;lt; endl;

    // Min &amp;amp; Max
    cout &amp;lt;&amp;lt; "Min=" &amp;lt;&amp;lt; tree-&amp;gt;min(tree-&amp;gt;Root())-&amp;gt;Key() &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; "Max=" &amp;lt;&amp;lt; tree-&amp;gt;max(tree-&amp;gt;Root())-&amp;gt;Key() &amp;lt;&amp;lt; endl;

    // Successor and Predecessor
    cout &amp;lt;&amp;lt; "Successor to 300=" &amp;lt;&amp;lt;
            tree-&amp;gt;successor(300, tree-&amp;gt;Root())-&amp;gt;Key() &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; "Predecessor to 300=" &amp;lt;&amp;lt;
            tree-&amp;gt;predecessor(300, tree-&amp;gt;Root())-&amp;gt;Key() &amp;lt;&amp;lt; endl;

    // Delete a node
    tree-&amp;gt;deleteNode(300);

    // Traverse the tree
    tree-&amp;gt;walk(tree-&amp;gt;Root());
    cout &amp;lt;&amp;lt; endl;

    delete tree;
    return 0;
}

OUTPUT:-
add root node ... 300
add other node ... 100
add other node ... 200
add other node ... 400
add other node ... 500
300 100 200 400 500
Node 500 found
Node 600 not found
Min=100
Max=500
Successor to 300=500
Predecessor to 300=200
200 100 400
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-7109925594524220883?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Axu6T0ytJp0s0LogWdSaPhkzCTc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Axu6T0ytJp0s0LogWdSaPhkzCTc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Axu6T0ytJp0s0LogWdSaPhkzCTc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Axu6T0ytJp0s0LogWdSaPhkzCTc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/7109925594524220883/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/binary-search-trees-in-c.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/7109925594524220883?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/7109925594524220883?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/binary-search-trees-in-c.html" title="Binary Search Trees in C++" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;AkMNQn87fSp7ImA9WhZUFU8.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-8289373898446730295</id><published>2011-06-08T15:51:00.000+05:30</published><updated>2011-06-08T15:51:33.105+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-08T15:51:33.105+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Bubble Sort" /><category scheme="http://www.blogger.com/atom/ns#" term="Bubble Sort using C++" /><category scheme="http://www.blogger.com/atom/ns#" term="Bubble Sort Algorithm" /><title>Bubble Sort in C++</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is bubble sort algorithm? How to implement in C++?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Bubble sort is a simple sorting algorithm.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Best case time complexity is O(n) when the list is already sorted.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Average and Worst case complexity is O(n*n). So it is not recommended for large input sets.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Bubble sort involves these simple steps.&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Compare adjacent items and swap them if they are not in the correct order.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Perform the above step until no exchanges are required,&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;span style="font-family: Arial;"&gt;EXAMPLE:- A sample implementation of bubble sort using C++&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

static int count = 0;
const int INPUT_SIZE = 10;

void print(int *input)
{
    for ( int i = 0; i &amp;lt; INPUT_SIZE; i++ )
        cout &amp;lt;&amp;lt; input[i] &amp;lt;&amp;lt; " ";
    cout &amp;lt;&amp;lt; endl;
}

void bubblesort(int* input)
{
    count++;
    int exchanges = 0;
    for ( int i = 0; i &amp;lt; INPUT_SIZE; i++ )
    {
        if ( input[i] &amp;gt; input[i+1] )
        {
            int tmp = input[i];
            input[i] = input[i+1];
            input[i+1] = tmp;
            exchanges++;
        }
    }
    
    if ( exchanges == 0 ) return;
    cout &amp;lt;&amp;lt; "Parse " &amp;lt;&amp;lt; count &amp;lt;&amp;lt; ":";
    print(input);
    bubblesort(input);
}

int main()
{
    int input[INPUT_SIZE] = {500, 700, 800, 100, 300, 200, 900, 400, 1000, 600};
    cout &amp;lt;&amp;lt; "Input: ";
    print(input);
    bubblesort(input);
    cout &amp;lt;&amp;lt; "Output: ";
    print(input);
    return 0;
}

OUTPUT:-
Input: 500 700 800 100 300 200 900 400 1000 600
Parse 1:500 700 100 300 200 800 400 900 600 1000
Parse 2:500 100 300 200 700 400 800 600 900 1000
Parse 3:100 300 200 500 400 700 600 800 900 1000
Parse 4:100 200 300 400 500 600 700 800 900 1000
Output: 100 200 300 400 500 600 700 800 900 1000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-8289373898446730295?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fDfH1Xks26kqEJ-FPzCupbmvkLM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fDfH1Xks26kqEJ-FPzCupbmvkLM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fDfH1Xks26kqEJ-FPzCupbmvkLM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fDfH1Xks26kqEJ-FPzCupbmvkLM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/8289373898446730295/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/bubble-sort-in-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/8289373898446730295?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/8289373898446730295?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/bubble-sort-in-c.html" title="Bubble Sort in C++" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUIERXozcSp7ImA9WhZbEkU.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-5266535610123192922</id><published>2011-06-08T15:36:00.001+05:30</published><updated>2011-06-17T09:35:04.489+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-17T09:35:04.489+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quick Sort Algorithm" /><category scheme="http://www.blogger.com/atom/ns#" term="Quick Sort" /><category scheme="http://www.blogger.com/atom/ns#" term="Quick Sort using C++" /><title /><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What is Quick Sort algorithm? How to implement Quick Sort in C++?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Quick Sort is a sorting algorithm. It is also referred as partition exchange sort.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;In the best/ average case it gives a time complexity of O(nlogn) and worst case time complexity of O(n*n).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Can be implemented as in-place sorting without need for additional space.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Quick Sorting involves these steps:&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Pick a pivot element from the input list.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Perform an input partition operation based on the pivot. Move all elements less than pivot before the pivot element in the list. Move all elements greater than the pivot after the pivot element in the list.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Recursively sort the left and right sub-lists of the pivot.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;EXAMPLE:- A simple demonstration of quick sort&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

const int INPUT_SIZE = 10;

// A simple print function
void print(int *input)
{
    for ( int i = 0; i &amp;lt; INPUT_SIZE; i++ )
        cout &amp;lt;&amp;lt; input[i] &amp;lt;&amp;lt; " ";
    cout &amp;lt;&amp;lt; endl;
}

// The partition function
int partition(int* input, int p, int r)
{
    int pivot = input[r];

    while ( p &amp;lt; r )
    {
        while ( input[p] &amp;lt; pivot )
            p++;

        while ( input[r] &amp;gt; pivot )
            r--;

        if ( input[p] == input[r] )
            p++;
        else if ( p &amp;lt; r )
        {
            int tmp = input[p];
            input[p] = input[r];
            input[r] = tmp;
        }
    }

    return r;
}

// The quicksort recursive function
void quicksort(int* input, int p, int r)
{
    if ( p &amp;lt; r )
    {
        int j = partition(input, p, r);        
        quicksort(input, p, j-1);
        quicksort(input, j+1, r);
    }
}

int main()
{
    int input[INPUT_SIZE] = {500, 700, 800, 100, 300, 200, 900, 400, 1000, 600};
    cout &amp;lt;&amp;lt; "Input: ";
    print(input);
    quicksort(input, 0, 9);
    cout &amp;lt;&amp;lt; "Output: ";
    print(input);
    return 0;
}

OUTPUT:-
Input: 500 700 800 100 300 200 900 400 1000 600
Output: 100 200 300 400 500 600 700 800 900 1000

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-5266535610123192922?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZrNHonJcMOi46bEMu2mTO9RGwv8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZrNHonJcMOi46bEMu2mTO9RGwv8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZrNHonJcMOi46bEMu2mTO9RGwv8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZrNHonJcMOi46bEMu2mTO9RGwv8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/5266535610123192922/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/what-is-quick-sort-algorithm-how-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5266535610123192922?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5266535610123192922?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/what-is-quick-sort-algorithm-how-to.html" title="" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEQBRHgyfip7ImA9WhZVGUU.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-2469609525734466943</id><published>2011-06-02T09:09:00.004+05:30</published><updated>2011-06-02T09:15:55.696+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-02T09:15:55.696+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ deque" /><category scheme="http://www.blogger.com/atom/ns#" term="Double ended queue" /><category scheme="http://www.blogger.com/atom/ns#" term="C++ Dequeue" /><title>C++ Deque</title><content type="html">&lt;p&gt;What is a deque? How to implement deques using C++? &lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Deque is an abbreviation for double-ended queue. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is a data structure in which the elements can only be added or removed from front and back of the queue. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;A typical deque implementation support the following operations. Insert at front an element, insert at back an element, remove from back an element, remove from front an element, list the front element and list the back element. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Simple method of implementing a deque is using a doubly linked list. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;The time complexity of all the deque operations using a doubly linked list can be achieced O(1). &lt;/li&gt;&lt;br /&gt;&lt;li&gt;A general purpose deque implementation can be used to mimic specialized behaviors like stacks and queues. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;For example to use deque as a stack. Insert at back an element (Push) and Remove at back an element (Pop) can behave as a stack. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;For example to use deque as a queue. Insert at back an element (Enqueue) and Remove at front an element (Dequeue) can behave as a queue. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Deque is also supported in C++ Standard Template Library.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;EXAMPLE:- Implement a deque using doubly linked lists.&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class DequeEmptyException&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    DequeEmptyException()&lt;br /&gt;    {&lt;br /&gt;        cout &amp;lt;&amp;lt; "Deque empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Each node in a doubly linked list&lt;br /&gt;class Node&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    int data;&lt;br /&gt;    Node* next;&lt;br /&gt;    Node* prev;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Deque&lt;br /&gt;{  &lt;br /&gt;private:&lt;br /&gt;    Node* front;&lt;br /&gt;    Node* rear;&lt;br /&gt;    int count;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;    Deque()&lt;br /&gt;    {&lt;br /&gt;        front = NULL;&lt;br /&gt;        rear = NULL;&lt;br /&gt;        count = 0;&lt;br /&gt;    }      &lt;br /&gt;  &lt;br /&gt;    void InsertFront(int element)&lt;br /&gt;    {&lt;br /&gt;        // Create a new node&lt;br /&gt;        Node* tmp = new Node();&lt;br /&gt;        tmp-&amp;gt;data = element;&lt;br /&gt;        tmp-&amp;gt;next = NULL;&lt;br /&gt;        tmp-&amp;gt;prev = NULL;&lt;br /&gt;&lt;br /&gt;        if ( isEmpty() ) {&lt;br /&gt;            // Add the first element&lt;br /&gt;            front = rear = tmp;&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            // Prepend to the list and fix links&lt;br /&gt;            tmp-&amp;gt;next = front;&lt;br /&gt;            front-&amp;gt;prev = tmp;&lt;br /&gt;            front = tmp;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        count++;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    int RemoveFront()&lt;br /&gt;    {&lt;br /&gt;        if ( isEmpty() ) {&lt;br /&gt;            throw new DequeEmptyException();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //  Data in the front node&lt;br /&gt;        int ret = front-&amp;gt;data;&lt;br /&gt;&lt;br /&gt;        // Delete the front node and fix the links&lt;br /&gt;        Node* tmp = front;&lt;br /&gt;        if ( front-&amp;gt;next != NULL )&lt;br /&gt;        {&lt;br /&gt;            front = front-&amp;gt;next;&lt;br /&gt;            front-&amp;gt;prev = NULL;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            front = NULL;&lt;br /&gt;        }&lt;br /&gt;        count--;&lt;br /&gt;        delete tmp;&lt;br /&gt;&lt;br /&gt;        return ret;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    void InsertBack(int element)&lt;br /&gt;    {          &lt;br /&gt;        // Create a new node&lt;br /&gt;        Node* tmp = new Node();&lt;br /&gt;        tmp-&amp;gt;data = element;&lt;br /&gt;        tmp-&amp;gt;next = NULL;&lt;br /&gt;        tmp-&amp;gt;prev = NULL;&lt;br /&gt;&lt;br /&gt;        if ( isEmpty() ) {&lt;br /&gt;            // Add the first element&lt;br /&gt;            front = rear = tmp;&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            // Append to the list and fix links&lt;br /&gt;            rear-&amp;gt;next = tmp;&lt;br /&gt;            tmp-&amp;gt;prev = rear;&lt;br /&gt;            rear = tmp;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        count++;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    int RemoveBack()&lt;br /&gt;    {&lt;br /&gt;        if ( isEmpty() ) {&lt;br /&gt;            throw new DequeEmptyException();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //  Data in the rear node&lt;br /&gt;        int ret = rear-&amp;gt;data;&lt;br /&gt;&lt;br /&gt;        // Delete the front node and fix the links&lt;br /&gt;        Node* tmp = rear;&lt;br /&gt;        if ( rear-&amp;gt;prev != NULL )&lt;br /&gt;        {&lt;br /&gt;            rear = rear-&amp;gt;prev;&lt;br /&gt;            rear-&amp;gt;next = NULL;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            rear = NULL;&lt;br /&gt;        }&lt;br /&gt;        count--;&lt;br /&gt;        delete tmp;&lt;br /&gt;&lt;br /&gt;        return ret;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    int Front()&lt;br /&gt;    {          &lt;br /&gt;        if ( isEmpty() )&lt;br /&gt;            throw new DequeEmptyException();&lt;br /&gt;&lt;br /&gt;        return front-&amp;gt;data;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    int Back()&lt;br /&gt;    {&lt;br /&gt;        if ( isEmpty() )&lt;br /&gt;            throw new DequeEmptyException();&lt;br /&gt;&lt;br /&gt;        return rear-&amp;gt;data;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    int Size()&lt;br /&gt;    {&lt;br /&gt;        return count;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    bool isEmpty()&lt;br /&gt;    {&lt;br /&gt;        return count == 0 ? true : false;&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{      &lt;br /&gt;    // Stack behavior using a general dequeue&lt;br /&gt;    Deque q;&lt;br /&gt;    try {&lt;br /&gt;        if ( q.isEmpty() )&lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Deque is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Push elements&lt;br /&gt;        q.InsertBack(100);&lt;br /&gt;        q.InsertBack(200);&lt;br /&gt;        q.InsertBack(300);&lt;br /&gt;&lt;br /&gt;        // Size of queue&lt;br /&gt;        cout &amp;lt;&amp;lt; "Size of dequeue = " &amp;lt;&amp;lt; q.Size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;        // Pop elements&lt;br /&gt;        cout &amp;lt;&amp;lt; q.RemoveBack() &amp;lt;&amp;lt; endl;&lt;br /&gt;        cout &amp;lt;&amp;lt; q.RemoveBack() &amp;lt;&amp;lt; endl;&lt;br /&gt;        cout &amp;lt;&amp;lt; q.RemoveBack() &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    catch (...) {&lt;br /&gt;        cout &amp;lt;&amp;lt; "Some exception occured" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Queue behavior using a general dequeue&lt;br /&gt;    Deque q1;&lt;br /&gt;    try {&lt;br /&gt;        if ( q1.isEmpty() )&lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Deque is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Push elements&lt;br /&gt;        q1.InsertBack(100);&lt;br /&gt;        q1.InsertBack(200);&lt;br /&gt;        q1.InsertBack(300);&lt;br /&gt;&lt;br /&gt;        // Size of queue&lt;br /&gt;        cout &amp;lt;&amp;lt; "Size of dequeue = " &amp;lt;&amp;lt; q1.Size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;        // Pop elements&lt;br /&gt;        cout &amp;lt;&amp;lt; q1.RemoveFront() &amp;lt;&amp;lt; endl;&lt;br /&gt;        cout &amp;lt;&amp;lt; q1.RemoveFront() &amp;lt;&amp;lt; endl;&lt;br /&gt;        cout &amp;lt;&amp;lt; q1.RemoveFront() &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    catch (...) {&lt;br /&gt;        cout &amp;lt;&amp;lt; "Some exception occured" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:&lt;br /&gt;Deque is empty&lt;br /&gt;Size of dequeue = 3&lt;br /&gt;300&lt;br /&gt;200&lt;br /&gt;100&lt;br /&gt;Deque is empty&lt;br /&gt;Size of dequeue = 3&lt;br /&gt;100&lt;br /&gt;200&lt;br /&gt;300&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;EXAMPLE:- Using the STL deque&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;deque&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    // Stack behavior using a STL deque&lt;br /&gt;    deque&amp;lt;int&amp;gt; q;&lt;br /&gt;    try {&lt;br /&gt;        if ( q.empty() )&lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Deque is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Push elements&lt;br /&gt;        q.push_back(100);&lt;br /&gt;        q.push_back(200);&lt;br /&gt;        q.push_back(300);&lt;br /&gt;&lt;br /&gt;        // Size of queue&lt;br /&gt;        cout &amp;lt;&amp;lt; "Size of deque = " &amp;lt;&amp;lt; q.size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;        // Pop elements&lt;br /&gt;        cout &amp;lt;&amp;lt; q.back() &amp;lt;&amp;lt; endl;&lt;br /&gt;        q.pop_back();&lt;br /&gt;        cout &amp;lt;&amp;lt; q.back() &amp;lt;&amp;lt; endl;&lt;br /&gt;        q.pop_back();&lt;br /&gt;        cout &amp;lt;&amp;lt; q.back() &amp;lt;&amp;lt; endl;&lt;br /&gt;        q.pop_back();&lt;br /&gt;    }&lt;br /&gt;    catch (...) {&lt;br /&gt;        cout &amp;lt;&amp;lt; "Some exception occured" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Queue behavior using a STL deque&lt;br /&gt;    deque&amp;lt;int&amp;gt; q1;&lt;br /&gt;    try {&lt;br /&gt;        if ( q1.empty() )&lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Deque is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Push elements&lt;br /&gt;        q1.push_back(100);&lt;br /&gt;        q1.push_back(200);&lt;br /&gt;        q1.push_back(300);&lt;br /&gt;&lt;br /&gt;        // Size of queue&lt;br /&gt;        cout &amp;lt;&amp;lt; "Size of deque = " &amp;lt;&amp;lt; q1.size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;        // Pop elements&lt;br /&gt;        cout &amp;lt;&amp;lt; q1.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;        q1.pop_front();&lt;br /&gt;        cout &amp;lt;&amp;lt; q1.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;        q1.pop_front();&lt;br /&gt;        cout &amp;lt;&amp;lt; q1.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;        q1.pop_front();&lt;br /&gt;    }&lt;br /&gt;    catch (...) {&lt;br /&gt;        cout &amp;lt;&amp;lt; "Some exception occured" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Deque is empty&lt;br /&gt;Size of dequeue = 3&lt;br /&gt;300&lt;br /&gt;200&lt;br /&gt;100&lt;br /&gt;Deque is empty&lt;br /&gt;Size of dequeue = 3&lt;br /&gt;100&lt;br /&gt;200&lt;br /&gt;300&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-2469609525734466943?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ME01-s1P8tdfPSX52s12tWyJA3c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ME01-s1P8tdfPSX52s12tWyJA3c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ME01-s1P8tdfPSX52s12tWyJA3c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ME01-s1P8tdfPSX52s12tWyJA3c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/2469609525734466943/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/06/c-deque.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2469609525734466943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2469609525734466943?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/06/c-deque.html" title="C++ Deque" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkcASHo4fCp7ImA9WhZUEEo.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-4662966190578711512</id><published>2011-05-09T14:56:00.008+05:30</published><updated>2011-06-03T09:37:29.434+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-03T09:37:29.434+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Traversal" /><category scheme="http://www.blogger.com/atom/ns#" term="Post-Order" /><category scheme="http://www.blogger.com/atom/ns#" term="Trees" /><category scheme="http://www.blogger.com/atom/ns#" term="Pre-Order" /><category scheme="http://www.blogger.com/atom/ns#" term="In-Order" /><category scheme="http://www.blogger.com/atom/ns#" term="DFS" /><title>C++ Pre-Order, In-Order, Post-Order Traversal of Trees</title><content type="html">What is Pre-Order, In-Order, Post-Order traversal of B-Trees?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Pre-Order, In-Order and Post-Order are depth first search traversal methods.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Starting at the root of binary tree the order in which the nodes are visited define these traversal types.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Basically there are 3 main steps. (1) Visting the current node, (2) Traverse the left node and (3) Traverse the right nodes.&lt;br /&gt;From Wikipedia, &lt;/li&gt;&lt;br /&gt;&lt;li&gt;To traverse a non-empty binary tree in preorder, perform the following operations recursively at each node, starting with the root node:&lt;br /&gt;1. Visit the root.&lt;br /&gt;2. Traverse the left subtree.&lt;br /&gt;3. Traverse the right subtree. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;To traverse a non-empty binary tree in inorder (symmetric), perform the following operations recursively at each node:&lt;br /&gt;1. Traverse the left subtree.&lt;br /&gt;2. Visit the root.&lt;br /&gt;3. Traverse the right subtree. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;To traverse a non-empty binary tree in postorder, perform the following operations recursively at each node:&lt;br /&gt;1. Traverse the left subtree.&lt;br /&gt;2. Traverse the right subtree.&lt;br /&gt;3. Visit the root.&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;// Node class&lt;br /&gt;class Node {&lt;br /&gt;    int key;&lt;br /&gt;    Node* left;&lt;br /&gt;    Node* right;&lt;br /&gt;public:&lt;br /&gt;    Node() { key=-1; left=NULL; right=NULL; };&lt;br /&gt;    void setKey(int aKey) { key = aKey; };&lt;br /&gt;    void setLeft(Node* aLeft) { left = aLeft; };&lt;br /&gt;    void setRight(Node* aRight) { right = aRight; };&lt;br /&gt;    int Key() { return key; };&lt;br /&gt;    Node* Left() { return left; };&lt;br /&gt;    Node* Right() { return right; };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Tree class&lt;br /&gt;class Tree {&lt;br /&gt;     Node* root;&lt;br /&gt;public:&lt;br /&gt;     Tree();&lt;br /&gt;     ~Tree();&lt;br /&gt;     Node* Root() { return root; };&lt;br /&gt;     void addNode(int key);&lt;br /&gt;     void inOrder(Node* n);&lt;br /&gt;     void preOrder(Node* n);&lt;br /&gt;     void postOrder(Node* n);&lt;br /&gt;private:&lt;br /&gt;     void addNode(int key, Node* leaf);&lt;br /&gt;     void freeNode(Node* leaf);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Constructor&lt;br /&gt;Tree::Tree() {&lt;br /&gt;     root = NULL;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Destructor&lt;br /&gt;Tree::~Tree() {&lt;br /&gt;     freeNode(root);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Free the node&lt;br /&gt;void Tree::freeNode(Node* leaf)&lt;br /&gt;{&lt;br /&gt;    if ( leaf != NULL )&lt;br /&gt;    {&lt;br /&gt;       freeNode(leaf-&amp;gt;Left());&lt;br /&gt;       freeNode(leaf-&amp;gt;Right());&lt;br /&gt;       delete leaf;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Add a node&lt;br /&gt;void Tree::addNode(int key) {&lt;br /&gt;     // No elements. Add the root&lt;br /&gt;     if ( root == NULL ) {&lt;br /&gt;        cout &amp;lt;&amp;lt; "add root node ... " &amp;lt;&amp;lt; key &amp;lt;&amp;lt; endl;&lt;br /&gt;        Node* n = new Node();&lt;br /&gt;        n-&amp;gt;setKey(key);&lt;br /&gt;    root = n;&lt;br /&gt;     }&lt;br /&gt;     else {&lt;br /&gt;    cout &amp;lt;&amp;lt; "add other node ... " &amp;lt;&amp;lt; key &amp;lt;&amp;lt; endl;&lt;br /&gt;    addNode(key, root);&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Add a node (private)&lt;br /&gt;void Tree::addNode(int key, Node* leaf) {&lt;br /&gt;    if ( key &amp;lt;= leaf-&amp;gt;Key() ) {&lt;br /&gt;       if ( leaf-&amp;gt;Left() != NULL )&lt;br /&gt;      addNode(key, leaf-&amp;gt;Left());&lt;br /&gt;       else {&lt;br /&gt;      Node* n = new Node();&lt;br /&gt;      n-&amp;gt;setKey(key);&lt;br /&gt;      leaf-&amp;gt;setLeft(n);&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;       if ( leaf-&amp;gt;Right() != NULL )&lt;br /&gt;      addNode(key, leaf-&amp;gt;Right());&lt;br /&gt;       else {&lt;br /&gt;      Node* n = new Node();&lt;br /&gt;      n-&amp;gt;setKey(key);&lt;br /&gt;      leaf-&amp;gt;setRight(n);&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Print the tree in-order&lt;br /&gt;// Traverse the left sub-tree, root, right sub-tree&lt;br /&gt;void Tree::inOrder(Node* n) {&lt;br /&gt;    if ( n ) {&lt;br /&gt;       inOrder(n-&amp;gt;Left());&lt;br /&gt;       cout &amp;lt;&amp;lt; n-&amp;gt;Key() &amp;lt;&amp;lt; " ";&lt;br /&gt;       inOrder(n-&amp;gt;Right());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Print the tree pre-order&lt;br /&gt;// Traverse the root, left sub-tree, right sub-tree&lt;br /&gt;void Tree::preOrder(Node* n) {&lt;br /&gt;    if ( n ) {&lt;br /&gt;       cout &amp;lt;&amp;lt; n-&amp;gt;Key() &amp;lt;&amp;lt; " ";&lt;br /&gt;       preOrder(n-&amp;gt;Left());&lt;br /&gt;       preOrder(n-&amp;gt;Right());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Print the tree post-order&lt;br /&gt;// Traverse left sub-tree, right sub-tree, root&lt;br /&gt;void Tree::postOrder(Node* n) {&lt;br /&gt;    if ( n ) {&lt;br /&gt;       postOrder(n-&amp;gt;Left());&lt;br /&gt;       postOrder(n-&amp;gt;Right());&lt;br /&gt;       cout &amp;lt;&amp;lt; n-&amp;gt;Key() &amp;lt;&amp;lt; " ";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Test main program&lt;br /&gt;int main() {&lt;br /&gt;   Tree* tree = new Tree();&lt;br /&gt;   tree-&amp;gt;addNode(30);&lt;br /&gt;   tree-&amp;gt;addNode(10);&lt;br /&gt;   tree-&amp;gt;addNode(20);&lt;br /&gt;   tree-&amp;gt;addNode(40);&lt;br /&gt;   tree-&amp;gt;addNode(50);&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "In order traversal" &amp;lt;&amp;lt; endl;&lt;br /&gt;   tree-&amp;gt;inOrder(tree-&amp;gt;Root());&lt;br /&gt;   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "Pre order traversal" &amp;lt;&amp;lt; endl;&lt;br /&gt;   tree-&amp;gt;preOrder(tree-&amp;gt;Root());&lt;br /&gt;   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "Post order traversal" &amp;lt;&amp;lt; endl;&lt;br /&gt;   tree-&amp;gt;postOrder(tree-&amp;gt;Root());&lt;br /&gt;   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;   delete tree;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;br /&gt;.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;add root node ... 30&lt;br /&gt;add other node ... 10&lt;br /&gt;add other node ... 20&lt;br /&gt;add other node ... 40&lt;br /&gt;add other node ... 50&lt;br /&gt;In order traversal&lt;br /&gt;10 20 30 40 50&lt;br /&gt;Pre order traversal&lt;br /&gt;30 10 20 40 50&lt;br /&gt;Post order traversal&lt;br /&gt;20 10 50 40 30&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-4662966190578711512?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dJa4D28nCG7hZdvKnMzqfi-zm1U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dJa4D28nCG7hZdvKnMzqfi-zm1U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dJa4D28nCG7hZdvKnMzqfi-zm1U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dJa4D28nCG7hZdvKnMzqfi-zm1U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/4662966190578711512/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/05/c-pre-order-in-order-post-order.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4662966190578711512?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4662966190578711512?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/05/c-pre-order-in-order-post-order.html" title="C++ Pre-Order, In-Order, Post-Order Traversal of Trees" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUASHk4eSp7ImA9WhZXGU4.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-2228790163004659027</id><published>2011-05-09T12:26:00.013+05:30</published><updated>2011-05-09T14:07:29.731+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-09T14:07:29.731+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="B-Tree" /><category scheme="http://www.blogger.com/atom/ns#" term="Width First Traversal" /><category scheme="http://www.blogger.com/atom/ns#" term="Breadth First Traversal" /><category scheme="http://www.blogger.com/atom/ns#" term="Level Order" /><title>C++ Level Order Traversal of B-Tree</title><content type="html">&lt;p align="justify"&gt;&lt;span style="font-family:arial;"&gt;What is level-order traversal of binary tree? &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Level order traversal is also referred as Breadth First/ Width First tree traversals.&lt;/span&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In simple terms every node of a level is visited before going to the lower level. &lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;An example:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-TkcwnbyxNGA/Tcelajv6oxI/AAAAAAAAAHE/bjixQ_vzDpA/s1600/bfs1.GIF"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 257px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5604630136977269522" border="0" alt="" src="http://2.bp.blogspot.com/-TkcwnbyxNGA/Tcelajv6oxI/AAAAAAAAAHE/bjixQ_vzDpA/s320/bfs1.GIF" /&gt;&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="font-family:arial;"&gt;Traversal of the above binary tree in level order produces the following result.&lt;br /&gt;30 10 40 20 50 &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Traversal in level order is usually done with assitance of queue with the following steps:-&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Add the root node to the queue and then repeat the following if queue is not empty.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Dequeue a node from the front of queue and visit it.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Enqueue the node's children from left to right. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;EXAMPLE: Demonstrate the level order traversal of binary tree&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;queue&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;// Node class&lt;br /&gt;class Node {&lt;br /&gt;    int key;&lt;br /&gt;    Node* left;&lt;br /&gt;    Node* right;&lt;br /&gt;public:&lt;br /&gt;    Node() { key=-1; left=NULL; right=NULL; };&lt;br /&gt;    void setKey(int aKey) { key = aKey; };&lt;br /&gt;    void setLeft(Node* aLeft) { left = aLeft; };&lt;br /&gt;    void setRight(Node* aRight) { right = aRight; };&lt;br /&gt;    int Key() { return key; };&lt;br /&gt;    Node* Left() { return left; };&lt;br /&gt;    Node* Right() { return right; };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Tree class&lt;br /&gt;class Tree {&lt;br /&gt;     Node* root;&lt;br /&gt;public:&lt;br /&gt;     Tree();&lt;br /&gt;     ~Tree();&lt;br /&gt;     Node* Root() { return root; };&lt;br /&gt;     void addNode(int key);&lt;br /&gt;     void levelOrder(Node* n);&lt;br /&gt;private:&lt;br /&gt;     void addNode(int key, Node* leaf);&lt;br /&gt;     void freeNode(Node* leaf);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Constructor&lt;br /&gt;Tree::Tree() {&lt;br /&gt;     root = NULL;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Destructor&lt;br /&gt;Tree::~Tree() {&lt;br /&gt;     freeNode(root);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Free the node&lt;br /&gt;void Tree::freeNode(Node* leaf)&lt;br /&gt;{&lt;br /&gt;    if ( leaf != NULL )&lt;br /&gt;    {&lt;br /&gt;       freeNode(leaf-&amp;gt;Left());&lt;br /&gt;       freeNode(leaf-&amp;gt;Right());&lt;br /&gt;       delete leaf;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Add a node&lt;br /&gt;void Tree::addNode(int key) {&lt;br /&gt;     // No elements. Add the root&lt;br /&gt;     if ( root == NULL ) {&lt;br /&gt;        cout &amp;lt;&amp;lt; "add root node ... " &amp;lt;&amp;lt; key &amp;lt;&amp;lt; endl;&lt;br /&gt;        Node* n = new Node();&lt;br /&gt;        n-&amp;gt;setKey(key);&lt;br /&gt;    root = n;&lt;br /&gt;     }&lt;br /&gt;     else {&lt;br /&gt;    cout &amp;lt;&amp;lt; "add other node ... " &amp;lt;&amp;lt; key &amp;lt;&amp;lt; endl;&lt;br /&gt;    addNode(key, root);&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Add a node (private)&lt;br /&gt;void Tree::addNode(int key, Node* leaf) {&lt;br /&gt;    if ( key &amp;lt;= leaf-&amp;gt;Key() ) {&lt;br /&gt;       if ( leaf-&amp;gt;Left() != NULL )&lt;br /&gt;      addNode(key, leaf-&amp;gt;Left());&lt;br /&gt;       else {&lt;br /&gt;      Node* n = new Node();&lt;br /&gt;      n-&amp;gt;setKey(key);&lt;br /&gt;      leaf-&amp;gt;setLeft(n);&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;       if ( leaf-&amp;gt;Right() != NULL )&lt;br /&gt;      addNode(key, leaf-&amp;gt;Right());&lt;br /&gt;       else {&lt;br /&gt;      Node* n = new Node();&lt;br /&gt;      n-&amp;gt;setKey(key);&lt;br /&gt;      leaf-&amp;gt;setRight(n);&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Print the tree level-order assisted by queue&lt;br /&gt;void Tree::levelOrder(Node* n) {&lt;br /&gt;   // Create a queue&lt;br /&gt;   queue&amp;lt;Node*&amp;gt; q;&lt;br /&gt;&lt;br /&gt;   // Push the root&lt;br /&gt;   q.push(n);&lt;br /&gt;&lt;br /&gt;   while ( ! q.empty() )&lt;br /&gt;   {&lt;br /&gt;       // Dequeue a node from front&lt;br /&gt;       Node* v = q.front();&lt;br /&gt;       cout &amp;lt;&amp;lt; v-&amp;gt;Key() &amp;lt;&amp;lt; " ";&lt;br /&gt;&lt;br /&gt;       // Enqueue the left children&lt;br /&gt;       if ( v-&amp;gt;Left() != NULL )&lt;br /&gt;            q.push(v-&amp;gt;Left());&lt;br /&gt;&lt;br /&gt;       // Enqueue the right children&lt;br /&gt;       if ( v-&amp;gt;Right() != NULL )&lt;br /&gt;            q.push(v-&amp;gt;Right());&lt;br /&gt;&lt;br /&gt;       // Pop the visited node&lt;br /&gt;       q.pop();&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Test main program&lt;br /&gt;int main() {&lt;br /&gt;   Tree* tree = new Tree();&lt;br /&gt;   tree-&amp;gt;addNode(30);&lt;br /&gt;   tree-&amp;gt;addNode(10);&lt;br /&gt;   tree-&amp;gt;addNode(20);&lt;br /&gt;   tree-&amp;gt;addNode(40);&lt;br /&gt;   tree-&amp;gt;addNode(50);&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "Level order traversal" &amp;lt;&amp;lt; endl;&lt;br /&gt;   tree-&amp;gt;levelOrder(tree-&amp;gt;Root());&lt;br /&gt;   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;   delete tree;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;OUTPUT:-&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;add root node ... 30&lt;br /&gt;add other node ... 10&lt;br /&gt;add other node ... 20&lt;br /&gt;add other node ... 40&lt;br /&gt;add other node ... 50&lt;br /&gt;Level order traversal&lt;br /&gt;30 10 40 20 50&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-2228790163004659027?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SVJwDZszOAAzPIrDTsoe8RY_r9Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SVJwDZszOAAzPIrDTsoe8RY_r9Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SVJwDZszOAAzPIrDTsoe8RY_r9Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SVJwDZszOAAzPIrDTsoe8RY_r9Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/2228790163004659027/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2011/05/c-level-order-traversal-of-b-tree.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2228790163004659027?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2228790163004659027?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2011/05/c-level-order-traversal-of-b-tree.html" title="C++ Level Order Traversal of B-Tree" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-TkcwnbyxNGA/Tcelajv6oxI/AAAAAAAAAHE/bjixQ_vzDpA/s72-c/bfs1.GIF" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkEHQHs4fSp7ImA9Wx5TEk0.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-7067204215367274913</id><published>2010-07-27T09:30:00.004+05:30</published><updated>2010-07-27T09:53:51.535+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-27T09:53:51.535+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="image and text side by side" /><category scheme="http://www.blogger.com/atom/ns#" term="html" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>HTML/ CSS Text and Image side by side</title><content type="html">&lt;p&gt;This code snippet provides a CSS and HTML to place image and text side by side in a HTML page.&lt;/p&gt;&lt;p&gt;The CSS. &lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;.mydiv {background: lightblue; width:250px; height: 250px;}&lt;br /&gt;&lt;br /&gt;.myimage {float:left; width:100px; height:150px; margin:5px;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;The HTML.&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;link rel='stylesheet' href="testme.css"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;div class="mydiv"&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;img class="myimage" src="testme.jpg"/&amp;gt;&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;        Hi. Image with text on the same line.&lt;br /&gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;.&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;The output.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_QGv0qvtpT1Y/TE5fD2KEIzI/AAAAAAAAAGY/qY5tNQr_438/s1600/Capture.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5498436714747929394" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 286px; CURSOR: hand; HEIGHT: 285px" alt="" src="http://4.bp.blogspot.com/_QGv0qvtpT1Y/TE5fD2KEIzI/AAAAAAAAAGY/qY5tNQr_438/s320/Capture.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-7067204215367274913?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YLrRTi8wfYfoul_6HuYMrMkO3Vs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YLrRTi8wfYfoul_6HuYMrMkO3Vs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YLrRTi8wfYfoul_6HuYMrMkO3Vs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YLrRTi8wfYfoul_6HuYMrMkO3Vs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/7067204215367274913/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2010/07/html-css-text-and-image-side-by-side.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/7067204215367274913?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/7067204215367274913?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2010/07/html-css-text-and-image-side-by-side.html" title="HTML/ CSS Text and Image side by side" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_QGv0qvtpT1Y/TE5fD2KEIzI/AAAAAAAAAGY/qY5tNQr_438/s72-c/Capture.jpg" height="72" width="72" /><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DUQDQ305fyp7ImA9WxFaGEg.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-5032349352297651083</id><published>2010-07-23T09:26:00.000+05:30</published><updated>2010-07-23T09:26:12.327+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-23T09:26:12.327+05:30</app:edited><title>Javascript scroll to bottom of page</title><content type="html">This code snippet provides a javascript function to scroll a HTML page &lt;br /&gt;
programatically to the bottom on page load. Make the browser height &lt;br /&gt;
smaller to observe the scrolling effect.&lt;br /&gt;
&lt;br /&gt;
The javascript.&lt;br /&gt;
&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;
window.onload=toBottom;

function toBottom()
{
alert("Scrolling to bottom ...");
window.scrollTo(0, document.body.scrollHeight);
}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
The test html code.&lt;br /&gt;
&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script src=&amp;quot;testme.js&amp;quot; language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;
        Some big text&amp;lt;br&amp;gt;        
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-5032349352297651083?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iJEvI7nrt-nzTgw2a72Ya2ATKtw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iJEvI7nrt-nzTgw2a72Ya2ATKtw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iJEvI7nrt-nzTgw2a72Ya2ATKtw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iJEvI7nrt-nzTgw2a72Ya2ATKtw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/5032349352297651083/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2010/07/javascript-scroll-to-bottom-of-page.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5032349352297651083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5032349352297651083?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2010/07/javascript-scroll-to-bottom-of-page.html" title="Javascript scroll to bottom of page" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/18153422615549744777</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;Dk4HR3w7cSp7ImA9WxdVGUs.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-7281713972826131310</id><published>2008-07-25T07:27:00.008+05:30</published><updated>2008-07-25T11:18:56.209+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-25T11:18:56.209+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Singly Linked Lists" /><title>C++ Singly Linked Lists</title><content type="html">&lt;strong&gt;What is a singly linked list? How to implement singly linked lists in C++?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Linked lists are building blocks for many other data structures like stacks and queues. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Linked lists are a sequence of nodes containing data fields and pointers to the next node (or) next node and previous nodes based on its type. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Linked lists permit addition/ removal of node in constant time. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Unlike arrays the order of linked list elements need not be contiguous in memory. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Unlike arrays there is no upper limit on the amount of memory reserved. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;A singly linked list is the simplest of linked lists. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Each node of a singly linked list has data elements and a single link (pointer) that points to the next node of the list (or) NULL if it is the last node of the list. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;Addition/ Deletion of a node to the singly linked list involves the creation/ deletion of the node and adjusting the node pointers accordingly. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;A singly linked list could be represented as below:-&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://bp3.blogger.com/_QGv0qvtpT1Y/SIlmVwQZ4EI/AAAAAAAAADg/gra24tqIEoE/s1600-h/list.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226821366457163842" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_QGv0qvtpT1Y/SIlmVwQZ4EI/AAAAAAAAADg/gra24tqIEoE/s320/list.gif" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;EXAMPLE:- Demonstrate the implementation of a singly linked list&lt;br /&gt;&lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;// Node class&lt;br /&gt;class Node {&lt;br /&gt;    int data;&lt;br /&gt;    Node* next;&lt;br /&gt;&lt;br /&gt;  public:&lt;br /&gt;    Node() {};&lt;br /&gt;    void SetData(int aData) { data = aData; };&lt;br /&gt;    void SetNext(Node* aNext) { next = aNext; };&lt;br /&gt;    int Data() { return data; };&lt;br /&gt;    Node* Next() { return next; };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// List class&lt;br /&gt;class List {&lt;br /&gt;    Node *head;&lt;br /&gt;  public:&lt;br /&gt;    List() { head = NULL; };&lt;br /&gt;    void Print();&lt;br /&gt;    void Append(int data);&lt;br /&gt;    void Delete(int data);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Print the contents of the list&lt;br /&gt; */&lt;br /&gt;void List::Print() {&lt;br /&gt;&lt;br /&gt;    // Temp pointer&lt;br /&gt;    Node *tmp = head;&lt;br /&gt;&lt;br /&gt;    // No nodes&lt;br /&gt;    if ( tmp == NULL ) {&lt;br /&gt;    cout &amp;lt;&amp;lt; "EMPTY" &amp;lt;&amp;lt; endl;&lt;br /&gt;    return;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // One node in the list&lt;br /&gt;    if ( tmp-&amp;gt;Next() == NULL ) {&lt;br /&gt;    cout &amp;lt;&amp;lt; tmp-&amp;gt;Data();&lt;br /&gt;    cout &amp;lt;&amp;lt; " --&amp;gt; ";&lt;br /&gt;    cout &amp;lt;&amp;lt; "NULL" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;    // Parse and print the list&lt;br /&gt;    do {&lt;br /&gt;        cout &amp;lt;&amp;lt; tmp-&amp;gt;Data();&lt;br /&gt;        cout &amp;lt;&amp;lt; " --&amp;gt; ";&lt;br /&gt;        tmp = tmp-&amp;gt;Next();&lt;br /&gt;    }&lt;br /&gt;    while ( tmp != NULL );&lt;br /&gt;&lt;br /&gt;    cout &amp;lt;&amp;lt; "NULL" &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Append a node to the linked list&lt;br /&gt; */&lt;br /&gt;void List::Append(int data) {&lt;br /&gt;&lt;br /&gt;    // Create a new node&lt;br /&gt;    Node* newNode = new Node();&lt;br /&gt;    newNode-&amp;gt;SetData(data);&lt;br /&gt;    newNode-&amp;gt;SetNext(NULL);&lt;br /&gt;&lt;br /&gt;    // Create a temp pointer&lt;br /&gt;    Node *tmp = head;&lt;br /&gt;&lt;br /&gt;    if ( tmp != NULL ) {&lt;br /&gt;    // Nodes already present in the list&lt;br /&gt;    // Parse to end of list&lt;br /&gt;    while ( tmp-&amp;gt;Next() != NULL ) {&lt;br /&gt;        tmp = tmp-&amp;gt;Next();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Point the last node to the new node&lt;br /&gt;    tmp-&amp;gt;SetNext(newNode);&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;    // First node in the list&lt;br /&gt;    head = newNode;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Delete a node from the list&lt;br /&gt; */&lt;br /&gt;void List::Delete(int data) {&lt;br /&gt;&lt;br /&gt;    // Create a temp pointer&lt;br /&gt;    Node *tmp = head;&lt;br /&gt;&lt;br /&gt;    // No nodes&lt;br /&gt;    if ( tmp == NULL )&lt;br /&gt;    return;&lt;br /&gt;&lt;br /&gt;    // Last node of the list&lt;br /&gt;    if ( tmp-&amp;gt;Next() == NULL ) {&lt;br /&gt;    delete tmp;&lt;br /&gt;    head = NULL;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;    // Parse thru the nodes&lt;br /&gt;    Node *prev;&lt;br /&gt;    do {&lt;br /&gt;        if ( tmp-&amp;gt;Data() == data ) break;&lt;br /&gt;        prev = tmp;&lt;br /&gt;        tmp = tmp-&amp;gt;Next();&lt;br /&gt;    } while ( tmp != NULL );&lt;br /&gt;&lt;br /&gt;    // Adjust the pointers&lt;br /&gt;    prev-&amp;gt;SetNext(tmp-&amp;gt;Next());&lt;br /&gt;&lt;br /&gt;    // Delete the current node&lt;br /&gt;    delete tmp;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    // New list&lt;br /&gt;    List list;&lt;br /&gt;&lt;br /&gt;    // Append nodes to the list&lt;br /&gt;    list.Append(100);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Append(200);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Append(300);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Append(400);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Append(500);&lt;br /&gt;    list.Print();&lt;br /&gt;&lt;br /&gt;    // Delete nodes from the list&lt;br /&gt;    list.Delete(400);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Delete(300);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Delete(200);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Delete(500);&lt;br /&gt;    list.Print();&lt;br /&gt;    list.Delete(100);&lt;br /&gt;    list.Print();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;100 --&gt; NULL&lt;br /&gt;100 --&gt; 200 --&gt; NULL&lt;br /&gt;100 --&gt; 200 --&gt; 300 --&gt; NULL&lt;br /&gt;100 --&gt; 200 --&gt; 300 --&gt; 400 --&gt; NULL&lt;br /&gt;100 --&gt; 200 --&gt; 300 --&gt; 400 --&gt; 500 --&gt; NULL&lt;br /&gt;100 --&gt; 200 --&gt; 300 --&gt; 500 --&gt; NULL&lt;br /&gt;100 --&gt; 200 --&gt; 500 --&gt; NULL&lt;br /&gt;100 --&gt; 500 --&gt; NULL&lt;br /&gt;100 --&gt; NULL&lt;br /&gt;EMPTY&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-7281713972826131310?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q2WIImVE9OZW3IFm3SCWODT1GYg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q2WIImVE9OZW3IFm3SCWODT1GYg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q2WIImVE9OZW3IFm3SCWODT1GYg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q2WIImVE9OZW3IFm3SCWODT1GYg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/7281713972826131310/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/07/c-singly-linked-lists.html#comment-form" title="20 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/7281713972826131310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/7281713972826131310?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/07/c-singly-linked-lists.html" title="C++ Singly Linked Lists" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp3.blogger.com/_QGv0qvtpT1Y/SIlmVwQZ4EI/AAAAAAAAADg/gra24tqIEoE/s72-c/list.gif" height="72" width="72" /><thr:total>20</thr:total></entry><entry gd:etag="W/&quot;DUQEQHw6eip7ImA9WhZVGUU.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-5599041188023099254</id><published>2008-07-13T17:36:00.007+05:30</published><updated>2011-06-02T09:31:41.212+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-02T09:31:41.212+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Queues" /><title>C++ Queues</title><content type="html">&lt;p&gt;&lt;strong&gt;What is a queue? How to implement queues using C++?&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Queue is a first-in, first-out (FIFO) data structure. i.e. the element added first to the queue will be the one to be removed first. &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Elements are always added to the back of the queue and removed from the front of the queue.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Typical use cases of queues include:- (1) In Inter-Process Communication (IPC) message queues is a common mechanism for communication between processes.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Some of the common terminology associated with queues inlcude ADD/ PUSH and DELETE/ POP of elements to the queue.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;ADD/ PUSH refers to adding an element to the queue.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;DELETE/ POP refers to removing an element from the queue.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Diagram below explains the queue.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://bp3.blogger.com/_QGv0qvtpT1Y/SHnxZkvqB_I/AAAAAAAAADQ/d1ii7meAWlI/s1600-h/q.bmp"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; DISPLAY: block; CURSOR: hand" id="BLOGGER_PHOTO_ID_5222470664575387634" border="0" alt="" src="http://bp3.blogger.com/_QGv0qvtpT1Y/SHnxZkvqB_I/AAAAAAAAADQ/d1ii7meAWlI/s320/q.bmp" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;EXAMPLE: Demonstrate the implmentation of a simple queue using arrays&lt;br /&gt;&lt;/p&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;const int MAX_SIZE = 100;&lt;br /&gt;&lt;br /&gt;class QueueOverFlowException&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;   QueueOverFlowException()&lt;br /&gt;   {&lt;br /&gt;       cout &amp;lt;&amp;lt; "Queue overflow" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class QueueEmptyException&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;   QueueEmptyException()&lt;br /&gt;   {&lt;br /&gt;       cout &amp;lt;&amp;lt; "Queue empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class ArrayQueue&lt;br /&gt;{  &lt;br /&gt;private:&lt;br /&gt;   int data[MAX_SIZE];&lt;br /&gt;   int front;&lt;br /&gt;   int rear;&lt;br /&gt;public:&lt;br /&gt;   ArrayQueue()&lt;br /&gt;   {&lt;br /&gt;       front = -1;&lt;br /&gt;       rear = -1;&lt;br /&gt;   }      &lt;br /&gt; &lt;br /&gt;   void Enqueue(int element)&lt;br /&gt;   {&lt;br /&gt;       // Don't allow the queue to grow more&lt;br /&gt;       // than MAX_SIZE - 1&lt;br /&gt;       if ( Size() == MAX_SIZE - 1 )                 &lt;br /&gt;           throw new QueueOverFlowException();&lt;br /&gt;&lt;br /&gt;       data[rear] = element;&lt;br /&gt;&lt;br /&gt;       // MOD is used so that rear indicator&lt;br /&gt;       // can wrap around&lt;br /&gt;       rear = ++rear % MAX_SIZE;&lt;br /&gt;   }      &lt;br /&gt;&lt;br /&gt;   int Dequeue()&lt;br /&gt;   {          &lt;br /&gt;       if ( isEmpty() )&lt;br /&gt;           throw new QueueEmptyException();&lt;br /&gt;&lt;br /&gt;       int ret = data[front];&lt;br /&gt;&lt;br /&gt;       // MOD is used so that front indicator&lt;br /&gt;       // can wrap around&lt;br /&gt;       front = ++front % MAX_SIZE;&lt;br /&gt;&lt;br /&gt;       return ret;   &lt;br /&gt;   }      &lt;br /&gt; &lt;br /&gt;   int Front()&lt;br /&gt;   {          &lt;br /&gt;       if ( isEmpty() )&lt;br /&gt;           throw new QueueEmptyException();&lt;br /&gt;&lt;br /&gt;       return data[front];&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   int Size()&lt;br /&gt;   {&lt;br /&gt;       return abs(rear - front);&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   bool isEmpty()&lt;br /&gt;   {&lt;br /&gt;       return ( front == rear ) ? true : false;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{  &lt;br /&gt;   ArrayQueue q;&lt;br /&gt;   try {&lt;br /&gt;       if ( q.isEmpty() )&lt;br /&gt;       {&lt;br /&gt;           cout &amp;lt;&amp;lt; "Queue is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       // Enqueue elements&lt;br /&gt;       q.Enqueue(100);&lt;br /&gt;       q.Enqueue(200);&lt;br /&gt;       q.Enqueue(300);&lt;br /&gt;&lt;br /&gt;       // Size of queue&lt;br /&gt;       cout &amp;lt;&amp;lt; "Size of queue = " &amp;lt;&amp;lt; q.Size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;       // Front element&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Front() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;       // Dequeue elements&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Dequeue() &amp;lt;&amp;lt; endl;&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Dequeue() &amp;lt;&amp;lt; endl;&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Dequeue() &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;   catch (...) {&lt;br /&gt;       cout &amp;lt;&amp;lt; "Some exception occured" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Queue is empty&lt;br /&gt;Size of queue = 3&lt;br /&gt;100&lt;br /&gt;100&lt;br /&gt;200&lt;br /&gt;300&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;EXAMPLE: Demonstrate the implementation of a simple queue using linked lists&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class QueueEmptyException&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;   QueueEmptyException()&lt;br /&gt;   {&lt;br /&gt;       cout &amp;lt;&amp;lt; "Queue empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Node&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;   int data;&lt;br /&gt;   Node* next;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class ListQueue&lt;br /&gt;{  &lt;br /&gt;private:&lt;br /&gt;   Node* front;&lt;br /&gt;   Node* rear;&lt;br /&gt;   int count;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;   ListQueue()&lt;br /&gt;   {&lt;br /&gt;       front = NULL;&lt;br /&gt;       rear = NULL;&lt;br /&gt;       count = 0;&lt;br /&gt;   }      &lt;br /&gt; &lt;br /&gt;   void Enqueue(int element)&lt;br /&gt;   {&lt;br /&gt;       // Create a new node&lt;br /&gt;       Node* tmp = new Node();&lt;br /&gt;       tmp-&amp;gt;data = element;&lt;br /&gt;       tmp-&amp;gt;next = NULL;&lt;br /&gt;&lt;br /&gt;       if ( isEmpty() ) {&lt;br /&gt;           // Add the first element&lt;br /&gt;           front = rear = tmp;&lt;br /&gt;       }&lt;br /&gt;       else {&lt;br /&gt;           // Append to the list&lt;br /&gt;           rear-&amp;gt;next = tmp;&lt;br /&gt;           rear = tmp;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       count++;&lt;br /&gt;   }      &lt;br /&gt;&lt;br /&gt;   int Dequeue()&lt;br /&gt;   {          &lt;br /&gt;       if ( isEmpty() )&lt;br /&gt;           throw new QueueEmptyException();&lt;br /&gt;&lt;br /&gt;       int ret = front-&amp;gt;data;&lt;br /&gt;       Node* tmp = front;&lt;br /&gt;&lt;br /&gt;       // Move the front pointer to next node&lt;br /&gt;       front = front-&amp;gt;next;&lt;br /&gt;&lt;br /&gt;       count--;&lt;br /&gt;       delete tmp;&lt;br /&gt;       return ret;   &lt;br /&gt;   }      &lt;br /&gt; &lt;br /&gt;   int Front()&lt;br /&gt;   {          &lt;br /&gt;       if ( isEmpty() )&lt;br /&gt;           throw new QueueEmptyException();&lt;br /&gt;&lt;br /&gt;       return front-&amp;gt;data;&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   int Size()&lt;br /&gt;   {&lt;br /&gt;       return count;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   bool isEmpty()&lt;br /&gt;   {&lt;br /&gt;       return count == 0 ? true : false;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{  &lt;br /&gt;   ListQueue q;&lt;br /&gt;   try {&lt;br /&gt;       if ( q.isEmpty() )&lt;br /&gt;       {&lt;br /&gt;           cout &amp;lt;&amp;lt; "Queue is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       // Enqueue elements&lt;br /&gt;       q.Enqueue(100);&lt;br /&gt;       q.Enqueue(200);&lt;br /&gt;       q.Enqueue(300);&lt;br /&gt;&lt;br /&gt;       // Size of queue&lt;br /&gt;       cout &amp;lt;&amp;lt; "Size of queue = " &amp;lt;&amp;lt; q.Size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;       // Front element&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Front() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;       // Dequeue elements&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Dequeue() &amp;lt;&amp;lt; endl;&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Dequeue() &amp;lt;&amp;lt; endl;&lt;br /&gt;       cout &amp;lt;&amp;lt; q.Dequeue() &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;   catch (...) {&lt;br /&gt;       cout &amp;lt;&amp;lt; "Some exception occured" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Queue is empty&lt;br /&gt;Size of queue = 3&lt;br /&gt;100&lt;br /&gt;100&lt;br /&gt;200&lt;br /&gt;300&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;EXAMPLE: Demonstrate the queue library usage in standard template library (STL). &lt;/p&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;queue&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   queue&amp;lt;int&amp;gt; q;&lt;br /&gt;   q.push(100);&lt;br /&gt;   q.push(200);&lt;br /&gt;   q.push(300);&lt;br /&gt;   q.push(400);&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; "Size of the queue: " &amp;lt;&amp;lt; q.size() &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; q.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;   q.pop();&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; q.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;   q.pop();&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; q.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;   q.pop();&lt;br /&gt;&lt;br /&gt;   cout &amp;lt;&amp;lt; q.front() &amp;lt;&amp;lt; endl;&lt;br /&gt;   q.pop();&lt;br /&gt;&lt;br /&gt;   if ( q.empty() ) {&lt;br /&gt;   cout &amp;lt;&amp;lt; "Queue is empty" &amp;lt;&amp;lt; endl;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Size of the queue: 4&lt;br /&gt;100&lt;br /&gt;200&lt;br /&gt;300&lt;br /&gt;400&lt;br /&gt;Queue is empty&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-5599041188023099254?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tDCEAH6nBtqVdAMNvE3QOpe01Ws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tDCEAH6nBtqVdAMNvE3QOpe01Ws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tDCEAH6nBtqVdAMNvE3QOpe01Ws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tDCEAH6nBtqVdAMNvE3QOpe01Ws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/5599041188023099254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/07/c-queues.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5599041188023099254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5599041188023099254?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/07/c-queues.html" title="C++ Queues" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp3.blogger.com/_QGv0qvtpT1Y/SHnxZkvqB_I/AAAAAAAAADQ/d1ii7meAWlI/s72-c/q.bmp" height="72" width="72" /><thr:total>6</thr:total></entry><entry gd:etag="W/&quot;DU4NRng4eip7ImA9WhZVFEo.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-866629231733872725</id><published>2008-07-11T18:42:00.009+05:30</published><updated>2011-05-27T12:03:17.632+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-27T12:03:17.632+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Stacks using arrays" /><category scheme="http://www.blogger.com/atom/ns#" term="C++ Stacks" /><category scheme="http://www.blogger.com/atom/ns#" term="C++ Stacks using linked lists" /><title>C++ Stacks</title><content type="html">&lt;p&gt;&lt;strong&gt;What is a stack? How to implement stacks using C++?&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Stack is a last-in, first-out (LIFO) data structure. i.e. the element added last to the stack will be the one to be removed first.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Typical use cases of stacks include:- (1) During debugging it is quite common to examine the function call stack during panics. (2) In RTOS like Symbian there are concepts like cleanup stack to avoid memory leaks.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Some of the common terminology associated with stacks inlcude PUSH, POP and TOP of the stack.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;PUSH refers to adding an element to the stack.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;POP refers to removing an element from the stack.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;TOP refers to the first element that could be POPed (or) the last element PUSHed.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Diagram below explains the stack.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5221750822391127666" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_QGv0qvtpT1Y/SHditPo6HnI/AAAAAAAAADI/ohq4E6aa0b4/s320/stack.gif" border="0" /&gt; &lt;p align="justify"&gt;EXAMPLE: Demonstrate the implementation of a simple stack using arrays.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;const int MAX_SIZE = 100;&lt;br /&gt;&lt;br /&gt;class StackOverFlowException &lt;br /&gt;{&lt;br /&gt;    public:&lt;br /&gt;        StackOverFlowException() &lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; &amp;quot;Stack overflow&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class StackUnderFlowException &lt;br /&gt;{&lt;br /&gt;    public:&lt;br /&gt;        StackUnderFlowException() &lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; &amp;quot;Stack underflow&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class ArrayStack &lt;br /&gt;{    &lt;br /&gt;    private:        &lt;br /&gt;        int data[MAX_SIZE];        &lt;br /&gt;        int top;    &lt;br /&gt;  public:        &lt;br /&gt;      ArrayStack() &lt;br /&gt;      {            &lt;br /&gt;          top = -1;        &lt;br /&gt;    }        &lt;br /&gt;    &lt;br /&gt;    void Push(int element)&lt;br /&gt;    {            &lt;br /&gt;        if ( top &amp;gt;= MAX_SIZE ) &lt;br /&gt;            {            &lt;br /&gt;                throw new StackOverFlowException();&lt;br /&gt;            }                   &lt;br /&gt;            data[++top] = element;        &lt;br /&gt;    }        &lt;br /&gt;            &lt;br /&gt;    int Pop()&lt;br /&gt;    {            &lt;br /&gt;        if ( top == -1 ) &lt;br /&gt;            {            &lt;br /&gt;                throw new StackUnderFlowException();            &lt;br /&gt;            }            &lt;br /&gt;            return data[top--];        &lt;br /&gt;    }        &lt;br /&gt;    &lt;br /&gt;    int Top() &lt;br /&gt;    {            &lt;br /&gt;        return data[top];        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    int Size() &lt;br /&gt;    {&lt;br /&gt;        return top + 1;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    bool isEmpty() &lt;br /&gt;    {&lt;br /&gt;        return ( top == -1 ) ? true : false;&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{    &lt;br /&gt;    ArrayStack s; &lt;br /&gt;    try {&lt;br /&gt;        if ( s.isEmpty() ) &lt;br /&gt;            {&lt;br /&gt;            cout &amp;lt;&amp;lt; &amp;quot;Stack is empty&amp;quot; &amp;lt;&amp;lt; endl;    &lt;br /&gt;            }&lt;br /&gt;        // Push elements    &lt;br /&gt;        s.Push(100);    &lt;br /&gt;        s.Push(200);    &lt;br /&gt;        // Size of stack&lt;br /&gt;        cout &amp;lt;&amp;lt; &amp;quot;Size of stack = &amp;quot; &amp;lt;&amp;lt; s.Size() &amp;lt;&amp;lt; endl;&lt;br /&gt;        // Top element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Top() &amp;lt;&amp;lt; endl;    &lt;br /&gt;        // Pop element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;        // Pop element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;        // Pop element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    catch (...) {&lt;br /&gt;        cout &amp;lt;&amp;lt; &amp;quot;Some exception occured&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;OUTPUT:-&lt;br /&gt;Stack is empty&lt;br /&gt;Size of stack = 2&lt;br /&gt;200&lt;br /&gt;200&lt;br /&gt;100&lt;br /&gt;Stack underflow&lt;br /&gt;Some exception occured&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;EXAMPLE: Demonstrate the implementation of a simple stack using linked lists.&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class StackUnderFlowException &lt;br /&gt;{&lt;br /&gt;    public:&lt;br /&gt;        StackUnderFlowException() &lt;br /&gt;        {&lt;br /&gt;            cout &amp;lt;&amp;lt; &amp;quot;Stack underflow&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct Node &lt;br /&gt;{&lt;br /&gt;    int data;&lt;br /&gt;    Node* link;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class ListStack &lt;br /&gt;{&lt;br /&gt;    private:                 &lt;br /&gt;        Node* top;&lt;br /&gt;        int count;&lt;br /&gt;            &lt;br /&gt;  public:        &lt;br /&gt;      ListStack() &lt;br /&gt;      {            &lt;br /&gt;          top = NULL;&lt;br /&gt;          count = 0;        &lt;br /&gt;    }        &lt;br /&gt;    &lt;br /&gt;    void Push(int element)&lt;br /&gt;    { &lt;br /&gt;        Node* temp = new Node();&lt;br /&gt;        temp-&amp;gt;data = element;&lt;br /&gt;        temp-&amp;gt;link = top;&lt;br /&gt;        top = temp;     &lt;br /&gt;        count++;          &lt;br /&gt;    }        &lt;br /&gt;            &lt;br /&gt;    int Pop()&lt;br /&gt;    {            &lt;br /&gt;        if ( top == NULL ) &lt;br /&gt;            {            &lt;br /&gt;                throw new StackUnderFlowException();            &lt;br /&gt;            }        &lt;br /&gt;            int ret = top-&amp;gt;data;    &lt;br /&gt;            Node* temp = top-&amp;gt;link;&lt;br /&gt;            delete top;&lt;br /&gt;            top = temp;&lt;br /&gt;            count--;&lt;br /&gt;            return ret;        &lt;br /&gt;    }        &lt;br /&gt;    &lt;br /&gt;    int Top() &lt;br /&gt;    {            &lt;br /&gt;        return top-&amp;gt;data;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    int Size() &lt;br /&gt;    {&lt;br /&gt;        return count;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    bool isEmpty() &lt;br /&gt;    {&lt;br /&gt;        return ( top == NULL ) ? true : false;&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{    &lt;br /&gt;    ListStack s; &lt;br /&gt;    try {&lt;br /&gt;        if ( s.isEmpty() ) &lt;br /&gt;            {&lt;br /&gt;            cout &amp;lt;&amp;lt; &amp;quot;Stack is empty&amp;quot; &amp;lt;&amp;lt; endl;    &lt;br /&gt;            }&lt;br /&gt;        // Push elements    &lt;br /&gt;        s.Push(100);    &lt;br /&gt;        s.Push(200);    &lt;br /&gt;        // Size of stack&lt;br /&gt;        cout &amp;lt;&amp;lt; &amp;quot;Size of stack = &amp;quot; &amp;lt;&amp;lt; s.Size() &amp;lt;&amp;lt; endl;&lt;br /&gt;        // Top element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Top() &amp;lt;&amp;lt; endl;    &lt;br /&gt;        // Pop element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;      // Pop element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;      // Pop element    &lt;br /&gt;        cout &amp;lt;&amp;lt; s.Pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    catch (...) {&lt;br /&gt;        cout &amp;lt;&amp;lt; &amp;quot;Some exception occured&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Stack is empty&lt;br /&gt;Size of stack = 2&lt;br /&gt;200&lt;br /&gt;200&lt;br /&gt;100&lt;br /&gt;Stack underflow&lt;br /&gt;Some exception occured&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-866629231733872725?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FbimISOZxOxTTBlhAQz03Cu9r3A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FbimISOZxOxTTBlhAQz03Cu9r3A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FbimISOZxOxTTBlhAQz03Cu9r3A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FbimISOZxOxTTBlhAQz03Cu9r3A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/866629231733872725/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/07/c-stacks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/866629231733872725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/866629231733872725?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/07/c-stacks.html" title="C++ Stacks" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp3.blogger.com/_QGv0qvtpT1Y/SHditPo6HnI/AAAAAAAAADI/ohq4E6aa0b4/s72-c/stack.gif" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkQAQXw4eCp7ImA9WxdXFUk.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-4762374475814999910</id><published>2008-06-27T09:44:00.003+05:30</published><updated>2008-06-27T09:49:00.230+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T09:49:00.230+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Bit Fields" /><title>C++ Bit Fields</title><content type="html">&lt;span style="font-weight: bold; font-family: arial;font-family:lucida grande;" &gt;What are bit-fields?&lt;br /&gt;&lt;/span&gt;&lt;ul style="text-align: justify; font-family: arial;"&gt;&lt;li&gt;Bit fields provide a mechanism to optimize memory usage by allowing to specify the exact number of bits required to store data.&lt;/li&gt;&lt;li&gt;Quite useful in embedded programming like mobile phones where memory is limited.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The declaration of bit field members follow the syntax "variable name : number of bits".&lt;/li&gt;&lt;li&gt;Unnamed bit fields with width 0 are used for alignment of the next bit field   to the field type boundary.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family: arial;"&gt;EXAMPLE: Demonstrate the usage of bit fields.&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;assert&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class MyTime {&lt;br /&gt;&lt;br /&gt; unsigned hour : 5;&lt;br /&gt; unsigned mins : 6;&lt;br /&gt; unsigned secs : 6;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt; void SetHour(int aHour) {&lt;br /&gt;     assert ( aHour &amp;lt; 24 );&lt;br /&gt;     hour = aHour;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; void SetMins(int aMins) {&lt;br /&gt;     assert ( aMins &amp;lt; 60 );&lt;br /&gt;     mins = aMins;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; void SetSecs(int aSecs) {&lt;br /&gt;     assert ( aSecs &amp;lt; 60 );&lt;br /&gt;     secs = aSecs;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; void Print() {&lt;br /&gt;     cout &amp;lt;&amp;lt; hour &amp;lt;&amp;lt; ":" &amp;lt;&amp;lt; mins &amp;lt;&amp;lt; ":" &amp;lt;&amp;lt; secs &amp;lt;&amp;lt; endl;&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt; MyTime t;&lt;br /&gt; t.SetHour(12);&lt;br /&gt; t.SetMins(58);&lt;br /&gt; t.SetSecs(23);&lt;br /&gt; t.Print();&lt;br /&gt;&lt;br /&gt; cout &amp;lt;&amp;lt; "Size of MyTime = " &amp;lt;&amp;lt; sizeof(t) &amp;lt;&amp;lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;12:58:23&lt;br /&gt;Size of MyTime = 4&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-4762374475814999910?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MIJwnWbUXRW5TUiRn07vp88Zaj4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MIJwnWbUXRW5TUiRn07vp88Zaj4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MIJwnWbUXRW5TUiRn07vp88Zaj4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MIJwnWbUXRW5TUiRn07vp88Zaj4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/4762374475814999910/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/06/c-bit-fields.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4762374475814999910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4762374475814999910?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/06/c-bit-fields.html" title="C++ Bit Fields" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;D0ECQH8_eip7ImA9WxdXEk4.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-5872871261297747872</id><published>2008-06-23T21:05:00.003+05:30</published><updated>2008-06-23T21:11:01.142+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-23T21:11:01.142+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Overriding" /><title>C++ Overriding</title><content type="html">&lt;strong&gt;What is overriding in C++?&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Redefining a base class function in the derived class to have our own implementation is referred as overriding.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Often confused with overloading which refers to using the same function name but with a different signature. However in overriding the function signature is the same.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;EXAMPLE: Demonstrate the usage of overriding&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class Base {&lt;br /&gt;    public:&lt;br /&gt;        virtual void myfunc() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Base::myfunc .." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Derived : public Base {&lt;br /&gt;    public:&lt;br /&gt;        void myfunc() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Derived::myfunc .." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;    Derived d;&lt;br /&gt;    d.myfunc();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Derived::myfunc ..&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-5872871261297747872?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/20NKLNUxlPxESvNr1Ee2L02489M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/20NKLNUxlPxESvNr1Ee2L02489M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/20NKLNUxlPxESvNr1Ee2L02489M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/20NKLNUxlPxESvNr1Ee2L02489M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/5872871261297747872/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/06/c-overriding.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5872871261297747872?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/5872871261297747872?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/06/c-overriding.html" title="C++ Overriding" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;A0ABR3k9cSp7ImA9WxdXEk8.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-9077272743902891715</id><published>2008-06-23T19:23:00.004+05:30</published><updated>2008-06-23T19:32:36.769+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-23T19:32:36.769+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Template Pattern" /><title>C++ Template Pattern</title><content type="html">&lt;strong&gt;What is template design pattern?&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Template pattern is a behavioral design pattern.&lt;/li&gt;&lt;li&gt;This has nothing to do with C++ templates as such.&lt;/li&gt;&lt;li&gt;Template patterns is a common form in object oriented programming. Having an abstract base class (one or more pure virtual functions) is a simple example of template design pattern.&lt;/li&gt;&lt;li&gt;In the template pattern, parts of program which are well defined like an algorithm are defined as a concrete method in the base class. The specifics of implementation are left to the derived classes by making these methods as abstract in the base class.&lt;/li&gt;&lt;li&gt;The method which implements the algorithm is also refered as template method and the class which implements this methods as the template class.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;EXAMPLE: Demonstrate the usage of template design pattern&lt;/p&gt;&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;// Base class&lt;br /&gt;// Template class&lt;br /&gt;class Account {&lt;br /&gt;    public:&lt;br /&gt;        // Abstract Methods&lt;br /&gt;        virtual void Start() = 0;&lt;br /&gt;&lt;br /&gt;        virtual void Allow() = 0;&lt;br /&gt;&lt;br /&gt;        virtual void End() = 0;&lt;br /&gt;&lt;br /&gt;        virtual int MaxLimit() = 0;&lt;br /&gt;&lt;br /&gt;        // Template Method&lt;br /&gt;        void Withdraw(int amount) {&lt;br /&gt;&lt;br /&gt;            Start();&lt;br /&gt;&lt;br /&gt;            int limit = MaxLimit();&lt;br /&gt;            if ( amount &amp;lt; limit ) {&lt;br /&gt;            Allow();&lt;br /&gt;            }&lt;br /&gt;            else {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Not allowed" &amp;lt;&amp;lt; endl;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            End();&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Derived class&lt;br /&gt;class AccountNormal : public Account {&lt;br /&gt;    public:&lt;br /&gt;        void Start() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Start ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void Allow() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Allow ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void End() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "End ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        int MaxLimit() {&lt;br /&gt;            return 1000;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Derived class&lt;br /&gt;class AccountPower : public Account {&lt;br /&gt;    public:&lt;br /&gt;        void Start() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Start ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void Allow() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "Allow ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void End() {&lt;br /&gt;            cout &amp;lt;&amp;lt; "End ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        int MaxLimit() {&lt;br /&gt;            return 5000;&lt;br /&gt;        }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;    AccountPower power;&lt;br /&gt;    power.Withdraw(1500);&lt;br /&gt;&lt;br /&gt;    AccountNormal normal;&lt;br /&gt;    normal.Withdraw(1500);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Start ...&lt;br /&gt;Allow ...&lt;br /&gt;End ...&lt;br /&gt;&lt;br /&gt;Start ...&lt;br /&gt;Not allowed&lt;br /&gt;End ...&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-9077272743902891715?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9MlehU6ej565_t9lOQUtr3LsmBQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9MlehU6ej565_t9lOQUtr3LsmBQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9MlehU6ej565_t9lOQUtr3LsmBQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9MlehU6ej565_t9lOQUtr3LsmBQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/9077272743902891715/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/06/c-template-pattern.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/9077272743902891715?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/9077272743902891715?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/06/c-template-pattern.html" title="C++ Template Pattern" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;DE8MQHs8fyp7ImA9WxdQF0w.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-2046721515236285292</id><published>2008-06-17T21:00:00.004+05:30</published><updated>2008-06-17T21:04:41.577+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-17T21:04:41.577+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Copy Assignment Operator" /><title>C++ Copy Assignment Operator</title><content type="html">&lt;p&gt;&lt;strong&gt;What is copy assignment operator in C++?&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The copy assignment operator allows to assign objects of same class to each other by overloading '=' operator.&lt;/li&gt;&lt;li&gt;The compiler automatically generates this member function if is not defined explicitly.&lt;/li&gt;&lt;li&gt;The generated copy assignment funcion does a bit wise copy or in other words shallow copy.&lt;/li&gt;&lt;li&gt;If our class has dynamically allocated members then it becomes necessary to write our own implementation of copy assignment function to perform a deep copy.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;EXAMPLE: Demonstrate the usage of copy assignment operator&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class MyClass {  &lt;br /&gt;    private:      &lt;br /&gt;        char* str;  &lt;br /&gt;    public:      &lt;br /&gt;        MyClass();&lt;br /&gt;        MyClass(char* aStr);      &lt;br /&gt;        MyClass&amp;amp; operator=(const MyClass&amp;amp; obj);      &lt;br /&gt;        void Print();      &lt;br /&gt;        ~MyClass();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MyClass::MyClass() {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MyClass::MyClass(char* aStr) {  &lt;br /&gt;    cout &amp;lt;&amp;lt; "In constructor ..." &amp;lt;&amp;lt; endl;  &lt;br /&gt;    str = strdup(aStr);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Copy assignment&lt;br /&gt;MyClass&amp;amp; MyClass::operator=(const MyClass&amp;amp; other) {&lt;br /&gt;    cout &amp;lt;&amp;lt; "In copy assignment ..." &amp;lt;&amp;lt; endl;&lt;br /&gt;    str = strdup(other.str);&lt;br /&gt;    return *this;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MyClass::Print() {  &lt;br /&gt;    cout &amp;lt;&amp;lt; str &amp;lt;&amp;lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MyClass::~MyClass() {  &lt;br /&gt;    cout &amp;lt;&amp;lt; "In destructor ..." &amp;lt;&amp;lt; endl;  &lt;br /&gt;    delete str;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{  &lt;br /&gt;    // Create obj1&lt;br /&gt;    MyClass* obj1 = new MyClass("Hello World");&lt;br /&gt;    obj1-&amp;gt;Print();&lt;br /&gt;&lt;br /&gt;    // Assignment. obj1 to obj2&lt;br /&gt;    MyClass obj2;&lt;br /&gt;    obj2 = *obj1;&lt;br /&gt;&lt;br /&gt;    // Cleanup obj1&lt;br /&gt;    delete obj1;&lt;br /&gt;&lt;br /&gt;    obj2.Print();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;In constructor ...&lt;br /&gt;Hello World&lt;br /&gt;In copy assignment ...&lt;br /&gt;In destructor ...&lt;br /&gt;Hello World&lt;br /&gt;In destructor ...&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-2046721515236285292?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fuf5BL49G7xJ42vJaha414SUvsw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fuf5BL49G7xJ42vJaha414SUvsw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fuf5BL49G7xJ42vJaha414SUvsw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fuf5BL49G7xJ42vJaha414SUvsw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/2046721515236285292/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/06/c-copy-assignment-operator.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2046721515236285292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/2046721515236285292?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/06/c-copy-assignment-operator.html" title="C++ Copy Assignment Operator" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DEUNQnc4fSp7ImA9WxdQFk8.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-8361036079234319313</id><published>2008-06-16T17:57:00.006+05:30</published><updated>2008-06-16T19:54:53.935+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-16T19:54:53.935+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++ Default Arguments" /><title>C++ Default Arguments</title><content type="html">&lt;strong&gt;What are default arguments in C++?&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Default argument is a value given in the function declaration. The compiler automatically inserts this if a value is not provided during the function call.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Default arguments are similar to function overloading in the sense that both features allow to use a single function name in different scenarios. &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;The guideline to follow default arguments vs function overloading. When the desired behavior is almost similar it is recommended to use default arguments and when the behavior is different function overloading.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Only trailing arguments can be defaulted. Once a particular arguments is made default all the following arguments should also be made default.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Default arguments are useful in cases where capability of an existing function is increased by adding a new argument. Existing function calls need not be changed for this.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;EXAMPLE: Demonstrate the usage of default arguments&lt;br /&gt;&lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;p&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;// Function with default arguments&lt;br /&gt;&lt;br /&gt;void myfunc(int a, bool flag = true) {&lt;br /&gt;&lt;br /&gt;    if ( flag == true ) {&lt;br /&gt;&lt;br /&gt;       // Do something&lt;br /&gt;       cout &amp;lt;&amp;lt; "Flag is true. a = " &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;&lt;br /&gt;       // Do something&lt;br /&gt;       cout &amp;lt;&amp;lt; "Flag is false. a = " &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    myfunc(100);&lt;br /&gt;&lt;br /&gt;    myfunc(200, false);&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OUTPUT:-&lt;br /&gt;Flag is true. a = 100&lt;br /&gt;Flag is false. a = 200&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-8361036079234319313?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zCxd5BUkV0dySxvTUE3raOZNs0E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zCxd5BUkV0dySxvTUE3raOZNs0E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zCxd5BUkV0dySxvTUE3raOZNs0E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zCxd5BUkV0dySxvTUE3raOZNs0E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/8361036079234319313/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/06/c-default-arguments.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/8361036079234319313?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/8361036079234319313?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/06/c-default-arguments.html" title="C++ Default Arguments" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUYGQHo9cCp7ImA9WxdQE08.&quot;"><id>tag:blogger.com,1999:blog-7748177500667831327.post-4963160102065014387</id><published>2008-06-13T07:23:00.002+05:30</published><updated>2008-06-13T07:42:01.468+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-13T07:42:01.468+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="STL" /><title>C++ STL Reference</title><content type="html">&lt;p&gt;&lt;span style="font-family:arial;"&gt;Good reference to Standard Template Library:-&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppstl.html"&gt;&lt;span style="font-family:arial;"&gt;About the Standard Template Library&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/iterators.html"&gt;&lt;span style="font-family:arial;"&gt;Iterators&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppalgorithm/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Algorithms&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppvector/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Vectors&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppdeque/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Double-Ended Queues&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cpplist/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Lists&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cpppriority_queue/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Priority Queues&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppqueue/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Queues&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppstack/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Stacks&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppset/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Sets&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppmultiset/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Multisets&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppmap/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Maps&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppmultimap/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Multimaps&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cppreference.com/cppbitset/index.html"&gt;&lt;span style="font-family:arial;"&gt;C++ Bitsets&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7748177500667831327-4963160102065014387?l=login2win.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5Sx8IzL54F3JtKjT39f2rRaqi6g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5Sx8IzL54F3JtKjT39f2rRaqi6g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5Sx8IzL54F3JtKjT39f2rRaqi6g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5Sx8IzL54F3JtKjT39f2rRaqi6g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://login2win.blogspot.com/feeds/4963160102065014387/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://login2win.blogspot.com/2008/06/c-stl-reference.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4963160102065014387?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7748177500667831327/posts/default/4963160102065014387?v=2" /><link rel="alternate" type="text/html" href="http://login2win.blogspot.com/2008/06/c-stl-reference.html" title="C++ STL Reference" /><author><name>Mahesh</name><uri>http://www.blogger.com/profile/17421383822093860960</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry></feed>

