<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Angshuman's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 20:38:16 GMT</pubDate>
    <description>DZone Snippets: Angshuman's Code Snippets</description>
    <item>
      <title>Sort by frequency and order in a list</title>
      <link>http://snippets.dzone.com/posts/show/3688</link>
      <description>// You have an array. For eg [23,12,45,23,9,23,45]. Now you have to print the elements in the order of decreasing frequency, and the same no of times as it is coming in the imput aray. The output for this eg would be 23[3]45[2]12[1]9[1].If frequency of two elements is equal, they should come in the same order as they are coming in the input array.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;struct Node&lt;br /&gt;{&lt;br /&gt;    int element;&lt;br /&gt;    int frequency;&lt;br /&gt;    int order;&lt;br /&gt;    struct Node *next;&lt;br /&gt;    struct Node *prev;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class FreqList {&lt;br /&gt;&lt;br /&gt; public:&lt;br /&gt;    FreqList();&lt;br /&gt;    virtual ~FreqList();&lt;br /&gt;    virtual void addElement(int newEl);&lt;br /&gt;    virtual void Print();&lt;br /&gt;    virtual void createSorted();&lt;br /&gt;    virtual void printSorted();&lt;br /&gt;&lt;br /&gt; private:&lt;br /&gt;    void addAtEnd(int val, int freq, int order);&lt;br /&gt;    Node* findElement(int val); &lt;br /&gt;    Node* partition(Node *head, Node *tail, int pivot);&lt;br /&gt;    bool  deleteAfter(Node *p, int &amp;val, int &amp;freq, int &amp;order);&lt;br /&gt;    void insertSorted(int val, int freq, int order);&lt;br /&gt;    void addAfter(Node *p, int val, int freq, int order);&lt;br /&gt;    bool deleteFirst(int &amp;val,int &amp;freq, int &amp;order);&lt;br /&gt;    int orderOfElement;&lt;br /&gt;    int numElements;&lt;br /&gt;&lt;br /&gt;    Node *dummy;&lt;br /&gt;    Node *dummySorted;&lt;br /&gt;    Node *tail;&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include "FreqList.h"&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;&lt;br /&gt;FreqList::FreqList() {&lt;br /&gt;    dummy = new Node;&lt;br /&gt;    dummy-&gt;next = NULL;&lt;br /&gt;    tail = dummy;&lt;br /&gt;    dummySorted = new Node;&lt;br /&gt;    dummySorted-&gt;next = NULL;&lt;br /&gt;    numElements = 0;&lt;br /&gt;    orderOfElement = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;FreqList::~FreqList() {&lt;br /&gt;    //lot of cleanup to be done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FreqList::addAtEnd(int val, int freq, int order) {&lt;br /&gt;    Node *temp = new Node;&lt;br /&gt;    temp-&gt;element = val;&lt;br /&gt;    temp-&gt;frequency = freq;&lt;br /&gt;    temp-&gt;order = order;&lt;br /&gt;    temp-&gt;next = NULL;&lt;br /&gt;&lt;br /&gt;    if(tail != NULL) {&lt;br /&gt;	tail-&gt;next = temp;&lt;br /&gt;	tail = temp;&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;	printf("Oooops!\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* This will return a pointer whose next is the desired node */&lt;br /&gt;Node * FreqList::findElement(int val) {&lt;br /&gt;    Node *temp = dummy;&lt;br /&gt;    while(temp-&gt;next != NULL) {&lt;br /&gt;	if(temp-&gt;next-&gt;element == val)&lt;br /&gt;	    return temp;&lt;br /&gt;	else&lt;br /&gt;	    temp=temp-&gt;next;&lt;br /&gt;    }&lt;br /&gt;    return NULL;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FreqList::addElement(int newEl) {&lt;br /&gt;    Node *temp;&lt;br /&gt;    ++numElements;&lt;br /&gt;    temp = findElement(newEl);&lt;br /&gt;    if(temp == NULL) {&lt;br /&gt;	//element not found. New element to be added&lt;br /&gt;	addAtEnd(newEl, 1, ++orderOfElement);&lt;br /&gt;	return;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;	if(temp-&gt;next != NULL) {&lt;br /&gt;	    temp-&gt;next-&gt;frequency += 1;&lt;br /&gt;	}&lt;br /&gt;	else&lt;br /&gt;	    printf("Hmmph!\n");&lt;br /&gt;	return;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FreqList::insertSorted(int val, int freq, int order) {&lt;br /&gt;    Node *p = dummySorted;&lt;br /&gt;    while(p-&gt;next != NULL) {&lt;br /&gt;	if(freq &lt; p-&gt;next-&gt;frequency ) {&lt;br /&gt;	    p = p-&gt;next;&lt;br /&gt;	}&lt;br /&gt;	else if(freq == p-&gt;next-&gt;frequency) {&lt;br /&gt;	    if(order &gt; p-&gt;next-&gt;order) {&lt;br /&gt;		p = p-&gt;next;&lt;br /&gt;	    }&lt;br /&gt;	    else {&lt;br /&gt;		break;&lt;br /&gt;	    }&lt;br /&gt;	}&lt;br /&gt;	else {&lt;br /&gt;	    break;&lt;br /&gt;	}&lt;br /&gt;    }&lt;br /&gt;    addAfter(p, val, freq, order);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FreqList::createSorted() {&lt;br /&gt;    int val, freq, order;&lt;br /&gt;    Node *temp = dummy;&lt;br /&gt;    while(temp-&gt;next != NULL) {&lt;br /&gt;	val = temp-&gt;next-&gt;element;&lt;br /&gt;	freq = temp-&gt;next-&gt;frequency;&lt;br /&gt;	order = temp-&gt;next-&gt;order;&lt;br /&gt;	insertSorted(val, freq, order);&lt;br /&gt;	temp = temp-&gt;next;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FreqList::printSorted() {&lt;br /&gt;    Node *temp = dummySorted;&lt;br /&gt;    while(temp-&gt;next != NULL) {&lt;br /&gt;	printf("%d[%d]{%d} ", temp-&gt;next-&gt;element, temp-&gt;next-&gt;frequency, \&lt;br /&gt;	       temp-&gt;next-&gt;order);&lt;br /&gt;	temp = temp-&gt;next;	&lt;br /&gt;    }&lt;br /&gt;    printf("\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void FreqList::addAfter(Node *p, int val, int freq, int order) {&lt;br /&gt;    Node *temp = new Node;&lt;br /&gt;    temp-&gt;element = val;&lt;br /&gt;    temp-&gt;frequency = freq;&lt;br /&gt;    temp-&gt;order = order;&lt;br /&gt;&lt;br /&gt;    temp-&gt;next = p-&gt;next;&lt;br /&gt;    p-&gt;next = temp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void FreqList::Print() {&lt;br /&gt;    Node *temp = dummy;&lt;br /&gt;    while(temp-&gt;next != NULL) {&lt;br /&gt;	printf("%d[%d]{%d} ", temp-&gt;next-&gt;element, temp-&gt;next-&gt;frequency, \&lt;br /&gt;	       temp-&gt;next-&gt;order);&lt;br /&gt;	temp = temp-&gt;next;&lt;br /&gt;    }&lt;br /&gt;    printf("\n");&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    int arr[] = {12,12,23,45,23,9,23,45};&lt;br /&gt;    int num;&lt;br /&gt;    FreqList *freqList = new FreqList();&lt;br /&gt;&lt;br /&gt;    srand((unsigned)time(0));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    for(int i=0; i&lt;8000; i++)&lt;br /&gt;    {   &lt;br /&gt;        num = (rand()%10)+1;&lt;br /&gt;        //printf("Step: %d El: %d ", i, arr[i] );&lt;br /&gt;        freqList-&gt;addElement(num);&lt;br /&gt;    }   &lt;br /&gt;    freqList-&gt;Print();&lt;br /&gt;    freqList-&gt;createSorted();&lt;br /&gt;    freqList-&gt;printSorted();&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 18 Mar 2007 09:10:26 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3688</guid>
      <author>angshuman (Angshuman)</author>
    </item>
  </channel>
</rss>
