Feeds:
Posts
Comments

Just thought of sharing the code i written to learn linked list implementation the day before my data structures model practical exam.

/*
 *      linkedlist.c
 *
 *      Copyright 2009 Rag Sagar.V <ragsagar@gmail.com>
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

#include <stdio.h>
#include <stdlib.h>

typedef struct list
{
	int data;
	struct list *next;
}LIST;
LIST *ptr,*temp,*start=NULL;
void insert_after(int ,int );
void remove_item(int );
void display(void);
int count=0;
int main()
{
	int item,opt,dat;
	system("clear");
	ptr=NULL;
	/* printf("%d",sizeof(LIST)); */
	do
	{
		printf("\n########## MENU ##########\n");
		printf("1.Insert\n2.Remove\n3.Display\n4.Exit\n");
		printf("Enter your option : ");
		scanf("%d",&opt);
	 	switch(opt)
	 	{
	 		case 1:
	 		printf("Enter the data to insert ");
	 		scanf("%d",&item);
	 		if(count==0)
	 		{
	 			ptr = (LIST *)malloc(sizeof(LIST));
	 			ptr->next = NULL;
	 			ptr->data = item;
	 			start = ptr;
			}
			else
			{
				printf("Enter the item after which you have to insert new element : ");
				scanf("%d",&dat);
				insert_after(dat,item);
			}
			count++;
				break;
	 		case 2:
	 		if(count==0)
	 		{
	 			printf("\nList is empty\n"); break;
			}
	 		printf("Enter the item to remove : ");
	 		scanf("%d",&item);
	 		remove_item(item);
	 		count--;
	 		break;
	 		case 3:
	 		if(count==0)
	 		{
	 			printf("\nList is empty\n");
	 			break;
	 		}
	 		else
	 		{
	 			printf("List elements are \n"); display();
			}
			break;
	 		case 4: break;
		}
	}while(opt!=4);
	return 0;
}
void insert_after(int data, int item)
{
	LIST *tmp;
	temp=(LIST *)malloc(sizeof(LIST));
	temp->data=item;
	ptr=start;

	while(ptr!=NULL)
	{
		if(ptr->data==data)
		{
			tmp=ptr->next;
			ptr->next=temp;
			temp->next=tmp;
			break;
		}
	ptr=ptr->next;
	}

}	

void remove_item(int item)
{
	ptr=start;
	if(ptr->data == item)
	{
		start = ptr->next;
		free(ptr);
	}
	while(ptr->next!=NULL)
	{
		if((ptr->next)->data==item)
		{
			temp=ptr->next;
			ptr->next=(ptr->next)->next;
			free(temp);
			break;
		}
		ptr=ptr->next;
	}
}

void display()
{
	ptr = start;
	while(ptr!=NULL)
	{
		printf("%d -> ",ptr->data);
		ptr=ptr->next;
	}
}			

About Infix and Postfix

In an expression if the operators are placed between the operands, it is known as infix notation ( eg A+B) . On the other hand if the operators are placed after the operands then the expression is in postfix notation .( eg AB+)

Infix Notation                            Postfix Notation

(A-C)*B                                              AC-B*

A+(B*C)                                            ABC*+

(A+B)/(C-D)                                      AB+CD-/

Code

#!/usr/bin/python
#http://ragsagar.wordpress.com

postfix = []
temp = []
operator = -10
operand = -20
leftparentheses = -30
rightparentheses = -40
empty = -50

def precedence(s):
	if s is '(':
		return 0
	elif s is '+' or '-':
		return 1
	elif s is '*' or '/' or '%':
		return 2
	else:
		return 99 

def typeof(s):
	if s is '(':
		return leftparentheses
	elif s is ')':
		return rightparentheses
	elif s is '+' or s is '-' or s is '*' or s is '%' or s is '/':
		return operator
	elif s is ' ':
		return empty
	else :
		return operand							

infix = raw_input("Enter the infix notation : ")
for i in infix :
	type = typeof(i)
	if type is leftparentheses :
		temp.append(i)
	elif type is rightparentheses :
		next = temp.pop()
		while next is not '(':
			postfix.append(next)
			next = temp.pop()
	elif type is operand:
		postfix.append(i)
	elif type is operator:
		p = precedence(i)
		while len(temp) is not 0 and p <= precedence(temp[-1]) :
			postfix.append(temp.pop())
		temp.append(i)
	elif type is empty:
		continue 

while len(temp) > 0 :
	postfix.append(temp.pop())

print "It's postfix notation is ",''.join(postfix)		

Code Explanation

Above code converts infix notation in variable infix into postfix notation and stores in postfix list. This algorithm makes use of list temp to hold operators and left parantheses in the infix notation. The postfix list will be constructed from left to right using operands from infix and operators which are removed from temp.

output

output

My first post in tuxopia is a how-to for writing basic IRC bot in python.Thought of sharing the link here :-)

Older Posts »