Documentos de Académico
Documentos de Profesional
Documentos de Cultura
com
INTRODUCTION TO C
C has emerged as the most widely used programming language for software
development. Its features allow the development of well-structured programs. Most
computers directly support its data types and control structures, resulting in the
construction of efficient programs. It is independent of any particular machine
architecture or operating system, which makes it easy to write portable programs. It is
this contribution of rich control structure and data types, portability and conciseness that
has contributed to the popularity of C.
History of C
C Program Structure
A basic fact about computer programming is that all programs can be written
using a combination of only three control structures: Sequential, Selective and repetitive.
The sequential structure consists of a sequence of program statements that are executed
one after another in order, the selective structure consists of a test for a condition
followed by alternative paths that the program can follow, and the repetitive structure
consists of program statements that are repeatedly executed while some condition holds.
Entry
Statement 1
Statement 2
Statement 3
Exit
All C programs are made up of one or more functions, each performing a particular task.
Every program has a special function named main. It is special because the execution of
any program starts at the beginning of its main function.
1 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
1. Preprocessor Directives
2. Global Variable Declarations
3. Functions
Variable Declaration in C
Data Types
Every programming language has its own data type. The basic data types in C are
Int - an integer
Float – a single precision floating point number
Char - a character in C character set
Double – a double precision floating point number
Variables
Variables are data objects that are manipulated in a program. Information can be
stored in a variable and recalled later. Variables must be declared before they can be used
in a program.
Constants
A constant is an entity whose value does not change during program execution.
Constants are of five different types
1. Integer Constants
2. Floating point Constants
3. Character Constants
4. String Constants
2 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
C Operators
1. Arithmetic
2. Assignment
3. Relational
4. Increment and Decrement
5. Bit
6. Logical or Boolean
7. Conditional expression
INPUT / OUTPUT
The important aspects of C programming language are its ability to handle input and
output (I/O). A program using input / output functions must include the standard header
file (stdio.h) in it using the directive.
Scanf Function
- getch gets a character from console but does not echo to the screen
- getche gets a character from console and echoes to the screen
gets, puts
3 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
CONDITIONAL STATEMENTS
If (condition) Statement
If-else Statement
SYNTAX
If condition
Statement 1;
Else
Statement 2;
If the condition is true then statement 1 is executed else statement 2 is executed (if it
exists). Else part is optional.
LOOPS IN C
WHILE LOOP
While loop provides the mechanism for looping as long as a specified condition is met.
The while loop should be used in applications that do not require the modification of any
variables at each iteration.
SYNTAX
While (condition)
Statements
FOR LOOP
This is used when the statements are to be executed more than once. This is the most
widely used iteration construct. The for loop supported by C is much more powerful than
its counterpart in any other programming language.
4 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
SYNTAX
For (exp1;exp2;exp3)
{
statements;
…………….
}
The initialization is usually an assignment statement that is used to set the loop control
variable. The condition is a relational expression that determines when the loop will
terminate. The increment determines how the loop control variable change each time the
loop is repeated.
# include<stdio.h>
# include<conio.h>
main()
{
int n, i, seven=0, sodd=0;
int a[25];
clrscr();
printf(:\n Enter the total number to be entered:”);
scanf(“%d”,&n);
printf(“\n Enter the values”);
for(i=0;i<n;i++)
{
if(a[ i]%2==0)
seven=seven+a[i];
else
sodd=sodd+a[I];
}
printf(“\n The Sum of Even number is %d”,seven);
printf(“\n The Sum of Odd number is %d”,sodd);
getch();
}
5 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
# include <stdio.h>
# include <conio.h>
main()
{
#include<stdio.h>
#include<conio.h>
main()
{
int faren,cen;
clrscr();
printf(“\n Enter the farenheit value :”);
scanf(“%d”,&faren);
cen=(faren-32)+5/9;
printf(“\n The equivalent Centigrade value is %d”,cen);
getch();
}
6 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
#include<stdio.h>
#include<conio.h>
main()
{
int n, i;
clrscr();
printf(:\n Enter the total number to be entered:”);
scanf(“%d”,&n);
for(i=2;i<=n/2;i++)
{
if(n%i= =0)
printf(“\n the given number is not prime”);
break;
}
if(n%i)
printf(“\n the given number is prime”);
getch();
}
#include<stdio.h>
#include<conio.h>
main()
{
int n, i;
int p,s,e;
clrscr();
printf(:\n Enter the number :”);
scanf(“%d”,&n);
e=0;
p=n;
while(p!=0)
{
s=p%10;
e=(e*10)+s;
p=p/10;
}
7 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
if(e= = n)
printf(“\n the given number is palindrome”);
else
printf(“\n the given number is not a palindrome”);
getch();
}
#include<stdio.h>
#include<conio.h>
main()
{
int n,q,r,s=0;
clrscr();
printf(“\n Enter the no");
scanf(“%d”,&n);
while(n!=0)
{
q=n/10;
r=n-q*10;
s=s+r;
n=q;
}
printf(“\n the sum of digits :%d”,s);
getch();
}
#include<stdio.h>
#include<conio.h>
main()
{
int a = 0;
int m;
printf(“Enter a number to check whether it is a perfect number or not \n”);
printf(“ Enter a number \n”);
scanf(“%ld”,&n);
for (m=0;m<n;m++)
8 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
{
if (n % m = = 0 )
a = a + m;
}
if (a = = n)
printf(“the given number is perfect number \n”);
else
printf(“the given number is not a perfect number \n”);
getch();
#include<stdio.h>
#include<conio.h>
main()
{
int s = 0;
int c= 0;
int m,n,b;
printf(“Enter a number to check whether it is a perfect number or not \n”);
printf(“ Enter a number \n”);
scanf(“%ld”,&b);
n = b;
while (b>0)
{
c = b % 10;
s = s + (c*c*c);
b = b / 10;
}
if (s = = n)
printf(“the given number is armstrong number \n”);
else
printf(“the given number is not a armstrong number \n”);
getch();
}
9. Write a C program to find the given number using linear search method.
#include<stdio.h>
#include<conio.h>
main()
{
int n,a[30],sea,flag;
clrscr();
9 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
10. Write a C program to find the given number using binary search method.
#include<stdio.h>
#include<conio.h>
main()
{
int n,a[30],sea,flag,x,y,t;
int low,high,mid;
clrscr();
printf(“\n Enter the number of terms :”);
scanf(“%d”,&n);
printf(“\n Enter the values:”);
for(i=0;i<n;i++)
scanf(“%d”,a[i]);
for(x=0;x<n-1;x++)
for(y=x+1;y<n;y++)
{
if(a[x]>a[y])
{
10 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
t=a[x];
a[x]=a[y];
a[y]=t;
}
}
printf(“\n The sorted numbers are :”);
for(x=0;x<n;x++)
printf(“%d\n”,a[x]);
if(t= = a[mid])
{
printf(“\n the number %d is present in the position %d”,t,mid);
flag=0;
break;
}
if(mid = =1 | | mid= = n)
break;
}
if(flag)
printf(“\n The given number is not present”);
getch();
}
#include <STDIO.H>
#include <CONIO.H>
void main()
{
int n;
void fibo(int);
11 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
clrscr();
printf(“\t\t PROGRAM TO PRINT THE FIBONACCI SERIES \n”);
printf(“\n Enter the number of terms to be in the series \n “);
scanf(“%d”,&n);
fibo(n);
getch();
}
#include <stdio.h>
#include <conio.h>
void main()
{
int a[10][10],b[10][10],c[10][10],row,col,r,co,I,j,k;
clrscr();
printf(“\t\t Matrix Addition\n”);
printf(“Enter Row order of Matrix A : “);
scanf(“%d”,&row);
printf(“Enter Column order of Matrix A : “);
scanf(“%d”,&col);
printf(“Enter Row order of Matrix B : “);
scanf(“%d”,&r);
printf(“Enter Column order of Matrix B : “);
scanf(“%d”,&co);
if ((row!=r) || (col != co) )
{
printf(“Matrix Multiplication is impossible\n”);
getch();
}
12 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
else
{
printf(“Enter First Matrix Elements : “);
for (I=0;I<row;I++)
for (j=0;j<col;j++)
scanf(“%d”,&a[I][j]);
printf(“Enter Second Matrix Elements : “);
for (I=0;I<r;I++)
for (j=0;j<co;j++)
scanf(“%d”,&b[I][j]);
for (I=0;I<row;I++)
for (j=0;j<col;j++)
c[I][j] = a[I][j] + b[I][j];
printf(“The resultant matrix is \n”);
for (I=0;I<row;I++)
{
for (j=0;j<col;j++)
{
printf(“%t%d”,c[I][j]);
}
pritnf(“\n”);
}
}
#include <stdio.h>
#include <conio.h>
void main()
{
int n;
clrscr();
printf(“program to print the factorial\n”);
printf(“\n\n Enter the number : “);
scanf(“%d”,&n);
factorial(n);
getch();
}
void factorial(double x)
{
double fact = 1;
for(I=1;I<=n;I++)
{
fact = fact * I;
printf(“The factorial of a given number is %d\n”,fact);
}
13 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
#include <stdio.h>
#include <conio.h>
void main()
{
void transfer(int,char,char,char);
int n;
clrscr();
printf(“\t\t TOWERS OF HANOI \n”);
printf(“How many disks ? “);
scanf(“%d”,&n);
transfer(n,’1’,’r’,’c’);
getch();
}
15. Program to count the number of vowels, consonants, digits, white space
characters and
in a line of text using pointers
#include <stdio.h>
main()
{
char line[80];
int vowels = 0;
int cons = 0;
int digits = 0;
int ws = 0;
int other = 0;
void scan_line(char line[], int *pv, int *pc, int pd, int *pw, int *po);
printf(“Enter a line of text \n”);
scanf(“%[^\n],line);
scan_line(line, &vowels, &cons, &digits, &ws, &other);
14 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
printf(“%d %d %d %d %d”,vowels,cons,digits,ws,other);
return(0);
}
void scan_line(char line[], int *pv, int *pc, int *pd, int *pw,int *po)
{
char c;
int count = 0;
while((c = toupper(line[count])) != ‘\0’)
{
if (c = = ‘A’ | | c = = ‘E’ | | c = =’I’ || c = = ‘O’ || c = = ‘U’)
++ *pv;
else if (c > = ‘A’ && c < = ‘Z’)
++ *pc;
else if ( c > = ‘0’ && c < = ‘9’)
++ *pd ;
else if (c = = ‘ ‘ | | c = = ‘\0’)
++ *pw;
else
++ *po;
++ count;
}
return;
}
#include <stdio.h>
void main()
{
int n,i,j,x=1;
clrscr();
printf("\t\t\tFloyds Triangle\n");
printf("\t\t\t===============\n");
printf("Enter the no of Lines:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%4d",x);
x++;
}
printf("\n");
}
getch(); }
15 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
#include <stdio.h>
void main()
{
int i=1,j,k,m,n;
clrscr();
printf("\t\t\tPascal Triangle\n");
printf("\t\t\t===============\n");
printf("Enter the no of Lines:");
scanf("%d",&n);
for(j=0;j<n;++j)
{
for(k=35-2*j;k>0;k--)
printf(" ");
for(m=0;m<=j;++m)
{
if((m==0)||(j==0))
i=1;
else
i=(i*(j-m+1))/m;
printf("%4d",i);
}
printf("\n");
}
getch();
}
#include <stdio.h>
#include <math.h>
void main()
{
float d,x,sum=0,fact(int);
int terms,sign=1,i;
clrscr();
printf("\t\t\t Sine Series \n");
printf("\t\t\t =========== \n");
printf("\nEnter the X value:");
scanf("%f",&d);
printf("\nEnter the number of terms:");
scanf("%d",&terms);
x=3.14/180*d;
16 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
for(i=1;i<=terms;i+=2)
{
sum=sum+sign*pow(x,i)/fact(i);
sign=-sign;
}
printf("\nThe value of sine(%4.2f)is %8.4f",d,sum);
getch();
}
float fact(int n)
{
float f=1;
int i;
for(i=1;i<=n;++i)
f*=i;
return(f);
}
#include <stdio.h>
void main()
{
int ch,i,j,l,m,sign,c,l1,k;
char name[80],name1[80],name2[80],namer[80],nameff[80],ans='y';
clrscr();
printf("\t\t\tManipulations on Strings\n");
printf("\t\t\t========================\n");
printf("1.Concatenation\n");
printf("2.Reverse\n");
printf("3.Find\n");
printf("4.Replace\n");
printf("5.Length\n");
printf("Choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:
{
printf("\t\tConcatenation\n");
printf("\t\t=============\n");
printf("Enter the first string \n");
scanf("%s",name);
printf("Enter the second string \n");
scanf("%s",name1);
i=j=0;
while(name[i]!='\0')
17 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
{
name2[i]=name[i];
i++;
}
while(name1[j]!='\0')
{
name2[i]=name1[j];
i++;
j++;
}
name2[i]='\0';
printf("Resultant String in name2 is%s",name2);
break;
}
case 2:
{
printf("\t\tReverse\n");
printf("\t\t=======\n");
printf("Enter the string \n");
scanf("%s",name);
i=j=0;
while(name[i]!='\0')
i++;
while(--i>=0)
name1[j++]=name[i];
name1[j]='\0';
printf("\nThe reversed String is%s",name1);
break;
}
case 3:
{
printf("\n\t\tFind\n");
printf("\t\t====\n");
printf("\nEnter first string:");
scanf(" %[^\n]",name);
printf("Enter search string:");
scanf(" %[^\n]",name1);
l=strlen(name);
l1=strlen(name1);
for(i=0;i<l;++i)
{
c=0;
if(name[i]==name1[c])
{
m=i;
sign=0;
18 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
while(name1[c]!='\0'&&sign!=1)
{
if(name[m]==name1[c])
{
m++;
c++;
}
else
sign=1;
}
if(sign==0)
{
printf("The given string is present");
printf("\nIts starting position is%d",i+1);
exit(1);
k=-1;
}
}
if(k<0)break;
}
if(sign!=0)
printf("The given string is not present");
break;
}
case 4:
{
i=0;
j=0;
strcpy(nameff," ");
puts("Enter the string:");
scanf(" %[^\n]",name);
fflush(stdin);
puts("Enter find string");
scanf(" %[^\n]",name1);
fflush(stdin);
puts("Enter replace string:");
scanf(" %[^\n]",namer);
fflush(stdin);
l=strlen(name);
strcat(namer," ");
while(i<l)
{
j=0;
for(k=0;k<80;++k)
name2[k]=' ';
19 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
while(name[i]!=' '&&name[i]!='\0')
{
name2[j]=name[i];
++i;
++j;
}
name2[j]='\0';
++i;
if((strcmp(name2,name1))==0)
{
strcat(nameff," ");
strcat(nameff,namer);
}
else
{
strcat(nameff," ");
strcat(nameff,name2);
}
}
puts("string after replacement");
puts(nameff);
break;
}
case 5:
{
i=0;
printf("Enter String:");
scanf(" %[^\n]",name);
while(name[i]!='\0')
i++;
printf("\nThe length of the given string is%d",i);
break;
}
}
getch();
}
20 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Data Structures
An introduction to C:
After the program is compiled, we may run it and view the output by typing
Filename <Enter>
To implement the above steps, the programmer develops a program and the
developed program is entered and edited with the help of an editor. Normally the editor is
provided along with the compiler. After editing the program, the compilation commands
us used for the translation process. Then the execution command is used to run the
program to get the desired output.
21 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Compilation:
High-level languages allow some English –like words and mathematical
expressions that facilitate the better understanding of the logic involved in a program.
High-level languages are machine independent. Since a computer system cannot follow
programs written in a high language, high language programs are translated into low-
level language programs and then executed.
Translation of a high-level language program to allow level language
program is done by software known as Compiler. Object code is an intermediate code
between the source code and the executable code.
Linking:
Linker performs the linking of libraries with the object code, to make the
generated object code into an executable machine code. Thus the object code becomes an
input to the linker, which produces an executable machine code. Sometimes programs are
divided into modules and these modules are compiled separately and then linked by the
linker and executed.
When running a program, the following files will be created automatically.
Classification
22 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Array
An array is a finite collection of similar elements stored in contiguous location.
The operations done on an array are: -
• Insertion
• Deletion
• Changing a particular element
Linked List
Node structure
Data Pointer
Field Field
The data field contains the data elements that have to be stored in the list. The
pointer will point the next node in the list.
The operations done on a list are: -
Insertion
Deletion
Insertion
Temp → data = X;
Head → next = head
23 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
To insert in the middle node we need to change two pointers. Let the new
node be ‘Temp’ and the present node is ‘Present’ and, the next node to the
present node is ‘future’. The pointers used are ‘data’ for the data field, ‘next’
to the pointer field, the data to be inserted is ‘X ’then the insertion is
Temp → data = X
Present → next = temp
Temp → next = future
To insert an element in the last position just change the pointer field of the present
last node to point to the new node, then set the pointer field of the new node to
NULL. Let the new node be ‘Temp’ and the present node is ‘Present’. The
pointers used are ‘data’ for the data field, ‘next’ to the pointer field, the data to be
inserted is ‘X ’then the insertion is
Present → next =Temp
Temp → next =null
Temp → data = X
Deletion
To delete a node in the head node, just point the head node as the second node.
Let the head node be ‘Head’, and then the deletion is
Head → next = head
24 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
The advantage of using Circular Linked List is the last null pointer is replaced and the
pointer field of the last node points to the first node, due to this circular arrangement the
traversing become quite easier. The insertion and deletion in the first and middle are
same as singly linked list except the last node.
Insertion
Stack
An important subclass of lists permits the insertion and deletion of an
element to occur only at one end. A linear list of this type is known as ‘stack’.
The insertion is referred to as ‘push’. The deletion is referred to as ‘pop’. The two
pointers used for accessing is top & bottom pointer.
Queue
The information in this list is processed in the same order as it was received, that is
first in first out order (FIFO) or a first – come first – served (FCFS) basis. This type of
25 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
frequently used list is known as queue. We have two pointers to access the queue. They
are
1. Front (used for deletion)
2. Rear (Used for insertion)
Insertion :
if rear>n queue overflow
else
increment the rear pointer and insert the value in the rear position.
Deletion :
If front =0 then queue underflow
Else
Increment the front pointer and return the front-1 value
Tree
Binary Tree
If a tree has at most of two children, then such tree is called as Binary tree. If the
elements in the binary tree are arranged in the following order
Left element is lesser than the root
Right element is greater then the root
No duplication of elements
Traversing Methods
26 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
In – order method
This method gives the tree key value in the following manner: -
1. Traverse the left sub tree
2. Process the root
3. Traverse the right Sub tree
Sorting
Issues in Sorting
Increasing or Decreasing Order? - The same algorithm can be used by both all we need
do is change to in the comparison function as we desire.
What about equal keys? – May be we need to sort on secondary keys, or leave in the
same order as the original permutations.
27 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
What about non-numerical data? - Alphabetizing is sorting text strings, and libraries
have very complicated rules concerning punctuation, etc. Is Brown-Williams before or
after Brown America before or after Brown, John?
We can ignore all three of these issues by assuming a comparison function which
depends on the application. Compare (a,b) should return ``<'', ``>'', or ''=''.
Applications of Sorting
One reason why sorting is so important is that once a set of items is sorted, many
other problems become easy.
Heaps
A heap is a complete binary tree with values stored in its nodes such that no child has a
value bigger than the value of the parent.
Below is a heap.
9
/\
8 2
/\
6 4
9
/\
8 2
/\
6 4
then we reheapify by copying rightmost leaf to root (4 becomes the root)
4
/\
8 2
/
6
28 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
and then we recursively reestablish the heap property as follows: if the parent is greater
than a child, swap the parent with the highest priority child. Keep swapping until no more
swaps are possible. So in the above tree, first we would swamp 4 with 8.
8
/\
4 2
/
6
Then we would swap 4 with 6.
8
/\
6 2
/
4
The final swap yields a heap!
The cost of removing an item (reheapifiying after removing the item) is O(log n). The
algorithm just traverses one path in the tree, which is O(log n) in length. For each node
on that path it performs at most two comparisons and one swap (3 operations -> constant
time). So overall the algorithm has a worst case time complexity of O(log n).
Quick sort
As we will see, most of the work is done in the partition phase - it works out where to
divide the work. The sort phase simply sorts the two smaller problems that are generated
in the partition phase.
This makes Quick sort a good example of the divide and conquers strategy for solving
problems. (You've already seen an example of this approach in the binary search
procedure.) In quick sort, we divide the array of items to be sorted into two partitions and
then call the quick sort procedure recursively to sort the two partitions, i.e. we divide the
problem into two smaller ones and conquer by solving the smaller ones. Thus the
conquer part of the quick sort routine looks like this:
29 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
For the strategy to be effective, the partition phase must ensure that all the items in one
part (the lower part) and less than all those in the other (upper) part.
To do this, we choose a pivot element and arrange that all the items in the lower part are
less than the pivot and all those in the upper part greater than it. In the most general case,
we don't know anything about the items to be sorted, so that any choice of the pivot
element will do - the first element is a convenient one.
Dijkstra's Algorithm
Djikstra's algorithm (named after its discover, E.W. Dijkstra) solves the problem of
finding the shortest path from a point in a graph (the source) to a destination. It turns out
that one can find the shortest paths from a given source to all points in a graph in the
same time, hence this problem is sometimes called the single-source shortest paths
problem.
Graph Traversal
Systematic traversals of graph are similar to preorder and post order traversal for trees.
There are two graph traversals, depth-first and breadth-first search. Frequently the graph
searches start at an arbitrary vertex. The searches are efficient if they are done in O(n +
m), where n is the number of vertices and m the number of edges.
Graph traversal can be used to determine the general characteristic of the graph, or to
solve a specific problem on a particular graph, for example:
30 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Depth-first Search
We start the graph traversal at arbitrary vertices, and go down a particular branch until we
reach a dead end. Then we back up and go as deep possible. In this way we visit all
vertices, and all edges.
Breath-First Search
Breadth-first search visit all adjacent vertices before going deeper. Then we go deeper in
one of the adjacent vertices.
Sparse Matrix :
A matrix consists of more number of zeros is called sparse matrix. Once the matrix
is stored as it is then there is wastage of memory. For an efficient memory utilization the
sparse matrix can be stored in a linear form. The linear form can be of array type or
linked list type.
DATA STRUCTURES
Definition:
Data structure is collection of data elements organized in a specified manner and
accessing functions are defined to store and retrieve individual data elements. Data
structures are sometimes called Data types.
Stacks
Definition:
A stack is an ordered collection of items into which new items may be inserted and
from which items may be deleted at one end, called the top of the stack. The first
example of stack, which permits the selection of only its end element , is a pile of coins.
Second example could be a pile of trays or a books lying one above the other.
5 top
9
1
3
7 31 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Here, 5 is the current of the stack. If we add any element in the stack, it will be placed on
top of 5 , and if we delete an element , it will be 5, which is on top of the stack.
Operations on Stacks:
Associated with the stack , there are several primitives operations. We can define
the following necessary operations on stack.
c) pop(s) - To remove the top element of the stack and to return the removed
element as a function value.
e) empty(s) - To check whether the stack is empty or not. It returns true if stack is
empty and returns false otherwise.
If a stack is empty and it contains no element, it is not possible to pop the stack.
Therefore, before popping an element, we must ensure that the stack is not empty.
8 top
5
9
1 Push (4) on to stack
3
7 4 top
8
5
9
1
3
7
32 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
We may notice that the last item pushed onto a stack is always the first that will be
popped from the stack. That is why stack is called last in, first out or LIFO in short.
Implementation of Stacks
There are two ways to implement stacks, one using arrays and other is
using linked list.
Array:
Since the elements of the stack are ordered , an obvious choice would be an array
as a structure t contains a stack. We can fix one end of the array as bottom of the stack.
The other end of the array may be used as a top of the stack, which keeps shifting
constantly as items are popped and pushed. We must store the index of the array
containing the top element.
33 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
We can , therefore, declare a stack as a structure containing two fields- an array to hold
the elements of the stack, and an integer top to indicate the position of the current top of
the stack within the array.
# define MAX 50
struct stack{
int top;
int elements [5];
};
struct stack s;
A stack is empty when it contains no elements we can indicate this by making top as –1.
We can write our function clearstack as
clearstack(ts)
struct stack *ts;
{
ts->top = -1;
}
Another operation is to check whether the stack is empty. To do this we must check
whether s.top = = -1.
Let us now consider the PUSH operation . To push or add an element we must perform
the two steps:
i. increment top indicator
ii. put the new element at the new top.
push(ts,x)
Struct stack *ts;
Int x;
{
if (fullstack(ts)){
printf( “ %s”, “ Stack overflow”);
exit(1);
34 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
}
else
ts->elements[++(ts->top)] = x;
return;
}
This routine increments the top by 1 and puts x into array s.elements at the new top
position. In this routine we use another routine Full Stack which checks whether the stack
is full, before we push an element onto stack. A stack is full when ts->top = = MAX-1.
fullstack (ts)
struct stack *ts;
{
if ( ts->top = = MAX-1)
return(1);
else
return(0);
}
To remove an element or pop an element from the stack, we must first check
the possibility of underflow as it is quite possible that somebody tries to pop an element
from an empty stack. Therefore, we can write function POP as,
Pop(ts)
struct stack *ts;
{
if (empty(ts))
printf( “ % s” , “ stack underflow”);
return(0);
else
return(ts->elements[ts->top--]);
}
We can write function empty (s) that returns 1 if the stack is empty and 0 if it is not
empty as follows:
empty(ts)
struct stack *ts;
{
if ( ts -> top = = -1)
return (1);
else
return(0);
}
35 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Node structure: Each node has two fields. i.e. Data and Next field
A B C D
Stack End node
Top element
# include <iostream.h>
# include < process.h>
class sta{
struct node {
int data;
node * next;
} *stack ;
public :
void push();
void pop();
void disp();
}
PUSH OPERATION:
36 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
POP Operation:
stack 2 4 3
Void sta :: pop()
{ temp
node *temp;
if (stack= = NULL)
cout << “ Stack is empty “ << endl;
else { stack
temp= stack;
stack= stack->next; temp
cout << “Popped element “ << endl;
cout << temp->data;
delete temp;
}
}
TREE TRAVERSAL:
When traversing a binary tree, we want to treat each node and its sub trees in the
same fashion. If we let L, V, and R stand for moving left, visiting the node, and moving
right when at a node, then there are six possible combinations of tree traversal: LVR,
LRV, VLR, VRL, RVL, and RLV. If we adopt the convention that we traverse left before
right, then only three traversals remain : LVR, LRV and VLR. To these we assign the
names inorder, postorder, and preorder, respectively, because of the position of the V
with respect to the L and the R.
37 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Example:
Fig.1
The result is : + A B
Algorithm:
Fig.2
38 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
The result is : A + B
Fig.3
The result is : A B +
39 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Fig.4
IN ORDER : B,D,A,E,F,C
POSTORDER : D,B,F,E,C,AND A
Fig.5.
40 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
PREORDER : * +AB/CD
INORDER : A+B*C/D
POSTORDER : AB+CD/*
Definition:
A binary search tree is a binary tree. It may be empty. If it is not empty then
it satisfies the following properties:
1. Every element has a key and no two elements have the same key.
2. The keys in the left sub tree are smaller than the key in the root.
3. The keys in the right sub tree are larger than the key in the root.
4. The left and right sub trees are also binary search trees.
Example Fig.
41 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
To construct (Insertion) the Binary search tree for the following elements:
42 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
43 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
1. Leaf node
Deletion of a leaf node is quite easy. To delete 28 from the
below tree the left child field of its parent is set to 0 and the node disposed. To delete the
17 from this tree, the right-child field of 15 is set to 0 , and the node containing 17 is
disposed.
2. Non-leaf node:
44 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
The deletion of a non-leaf element or node that has only one child is also easy. The
node containing the element to be deleted is disposed, and the single-child takes the place
of the disposed node.
So, to delete the element 15 from the above tree, we simply change the pointer from the
parent node (25) to the single-child node(13).
3. Root node:
45 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
If we wish to delete the element with key 25 from the above tree, then we replace it by
either the largest element, 17 , in its left sub tree or the smallest element , 26 , in its right
sub tree. Suppose we opt for the largest element in the left sub tree. The 17 is moved in
to the root and the following tree is obtained.
HEAPS
Priority Queue:
46 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
The priority queue is a data structure in which the intrinsic ordering of the
elements does determine the results of its basic operations. There are two types of priority
queues:
An ascending priority queue and a descending priority queue.
An ascending priority queue is a collection of items into which items can be inserted
arbitrarily and from which only the smallest item can be removed. A descending priority
queue is similar but allows deletion of only the largest item.
Heaps Definition:
A max (min) heap is a tree in which the key value in each node is no smaller
(larger) than the key values in its children (if any). A max heap is a complete binary tree
that is also a max tree. A min heap is a complete binary tree that is also a min tree.
Max. Heap
Min. Heap
47 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
QUEUE
Definition:
A queue is an ordered collection of items from which items may be deleted at one
end ( called the front of the queue) and into which items may be inserted at the other end
( called rear of the queue). This data structure is commonly known as FIFO or first-in-
first-out.
Fig.1
3 6
Fig.2
3 6 8
OPERATION S ON QUEUES:
48 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Insertion
Deletion
We can obtain the queue by the following sequence of operations. We assume that the
queue in initially empty.
ENQ(q,8)
5 7 8
ENQ(q,9)
5 7 8 9
ENQ(q,4)
49 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
5 7 8 9 4
7 8 9 4
8 9 4
There are two ways to implement queue, one using arrays, and
another is using Linked list.
i. Array :
Let us implement the queue within an array so that the array holds the
elements of the queue. There are two variables front and rear to indicate the positions of
the first and last element of the queue within the array.
Let the size of the array be 4. Initially let us assume that the queue is empty which means
front = 0 and rear = -1.
50 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Empty Queue:
Insertion:
There are two variables front and rear to indicate the positions of the first and
last element of the queue within the array. Let the size of the array be 4. Initially let us
assume that the queue is empty which means front = 0 and rear = -1.After we have added
three elements to the queue rear becomes 2 and front becomes 0. Now if we add one
more elements to the queue from the rear, the value of rear changes to 3. Now the queue
becomes full.
ENQ(q,3)
front = 0 rear =0
ENQ(q,5)
3 5
front = 0 rear = 1
ENQ(q,7)
3 5 7
front = 0 rear = 2
51 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
ENQ(q,9) [ Q is full ]
3 5 7 9
front = 0 rear = 3
Deletion:
At this point, we delete one element. The element which is deleted is 3. This
leaves a hole in the first position. To delete this element we must increment front, to
indicate the true first element of the queue and assign the value of that slot to x. To check
whether queue is empty or not, we must check whether front = rear.
To add an element we must increment rear so that it points to the location next to the rear
and place an element in that slot of the array. If we wish to add another element, and we
increment rear by 1, rear becomes equal to front, which indicates that the queue is full.
X= DEQ(q)
5 7 9
front = 1 rear = 3
x=DEQ(q)
7 9
front = 2 rear = 3
x=DEQ(q)
front = 3 rear = 3
52 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Therefore, the condition for full queue is that the next slot of rear is equal to front and the
condition for empty queue is that front = rear. Before we DEQ an element from queue we
must make sure that queue is not empty and before we ENQ an element we must ensure
that the queue is not full.
class qu{
Public :
Int front, rear, n , q[10];
void get(){
cout<< “ Enter the Queue size “ << endl;
cin>> n;
front = rear =-1;
}
void enq();
void deq();
};
int I, a[10];
void qu :: enq(){
int item;
if ( rear >= n)
{
cout << “ Queue is full \n”;
return;
}
else
{
cout << “ Enter the item to be inserted” <<endl;
cin>>item;
rear = rear+1;
53 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
q[rear] = item;
i++;
}
}
void qu :: deq()
{
int t;
if ( front >= rear)
{
cout << “ Queue is Empty” << endl;
return;
}
else
{
front = fornt +1;
t = q[front];
cout << “ The deleted element : “ << t << endl;
}
}
front 8
rear
.
class que {
struct node
{
int data;
node *next;
} * front, *rear;
54 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
public:
void insq();
void delq();
que(){
front = rear = NULL;
}
};
DEQUE:
55 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
A single queue behaves in a FIFO manner in the sense that each deletion removes the
oldest remaining item in the structure. A double ended queue or deque, in short is a linear
list in which insertions and deletions are made to or from either end of the structure.
Deletion Insertion
Insertion Deletion
Front Rear
We can have two variations of a deque, namely, the input-restricted deque and the output
–restricted deque. The output-restricted deque allows deletion from only one end and
input-restricted deque allows insertions at only one end.
Queue Applications:
The most useful application of queues is the simulation of a real world
situation so that it is possible to understand what happens in a real world in a particular
situation without actually observing its occurrence.
Queues are also very useful in a time-sharing computer system where many users share
the system simultaneously. Whenever a user requests the system to run a particular
program, the operating system adds the request at the end of the queue of jobs waiting to
be executed. Whenever the CPU is free, it executes the job, which is at the front of the
job queue. Similarly there are queues for sharing I/O devices. Each device maintains its
own queue of request.
LINKED LIST
Definition:
A collection of node is called list. Each node or item in a linked list must
contain at least two fields, an information field or data field and the next address field.
The first, field contains the actual element on the list which may be a simple integer, a
character, a string or even a large record. The second field, which is a pointer, contains
the address of the next node in the list used to access the next node. A node of a linked
list may be represented by the following figure.
Data or Next
List Info
( External pointer)
56 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
The entire linked list is accessed from an external pointer List pointing to the first node in
the list. We can access the first node through the external pointer, the second node
through next pointer of the first node, the third node through the next pointer of the
second node till the end of the list.
The next address field of the last node contains a special value, known as the NULL
value. This is not a valid address. This only tells us that we have reached the end of the
list. We will draw linked lists as an ordered sequence of nodes with links being
represented by arrows.
List
4 5 6
There are five basic types of operations associated with the list
data abstraction:
1. To determine if the list is empty. Returns true
if the list contains no elements.
2. Add new elements any in the list
3. To check if a particular element is present in
the list.
4. To delete a particular element from the list
placed anywhere in the list.
5. To print all the elements of the list.
57 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
else return(false)
This routine will return true if the list is empty, otherwise it will return false.
To traverse or to print the elements of a linked list, we need to use a
temporary pointer, p known as a traversal pointer.
P = list
while list < > null do
begin
print( info(p))
p= next(p)
end
To add a new node containing data value x in the beginning of the list we need
to follow the step:
i. To get a new node which is not in use.
ii. To set the data field of the new node to x
iii. To set the next field of the new node to point to list
iv. To set pointer list point to the new node.
getnode(p)
info(p) = x
next(p) = list
list = p
We are assuming that the operation getnode(p) obtains an empty node and sets the
contents of a variable named p to the address of that node.
Getnode(p)
p
x
Info(x) = p
p List
x 5 6
58 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
next(p) = list
List
4 5 6
p
list = p
Sample programs :
Program:
#include<stdio.h>
#include<conio.h>
int top=1;
int a[20];
void main()
{
int n,x,b,c,i,temp;
clrscr();
printf("Enter the no of elements\n");
scanf("%d",&n);
do
{
printf("1.PUSH\n");
printf("2.POP\n");
printf("3.DISPLAY\n");
printf("4.EXIT\n");
break; printf("enter your choice\n");
scanf("%d",&b);
switch(b)
{
case 1:
printf("enter the number\n");
if(top>=n+1)
printf("\nstack is overflow\n");
else
scanf("%d",&x);
a[top]=x;
top=top+1;
59 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
break;
case 2:
if (top<=0)
printf("stack is underflow\n");
else
{
top=top-1;
temp=a[top];
}
break;
case 3:
for(i=1;i<top-1;i++)
printf("%d-->",a[i]);
printf("%d",a[top-1]);
break;
case 4:
exit(0);
}
printf("\ndo you want to continue(1/0)\n");
scanf("%d",&c);
}
while(c==1);
getch();
}
Program:
#include<stdio.h>
#include<conio.h>
int n,x,b,c,i,r=0,f=0,te;
int q[20];
void main()
{
clrscr();
printf("Enter the no of elements\n");
scanf("%d",&n);
do
{
printf("1.insertion\n");
printf("2.deletion\n");
printf("3.display\n");
printf("4.exit\n");
60 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
case 4:
exit(0);
}
printf("\ndo you want to continue(1/0)\n");
scanf("%d",&c);
}
while(c==1);
getch();
}
insert()
{
if(r>=n)
printf("\nqueue is overflow\n");
else
{
printf("enter the number\n");
scanf("%d",&x);
r=r+1;
q[r]=x;
}
if(f==0)
f=1;
return(0);
}
int delet()
{
int te;
if (f==0)
61 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
printf("queue is underflow\n");
else if (f==r)
{
f=0;r=0;
}
else
{
te=q[f];
f=f+1;
}
return(te);
}
display()
{
if(r==0)
{
printf(" queue is empty");
}
else
{
for(i=f;i<r;i++)
printf("%d-->",q[i]);
printf("%d",q[r]);
}
return(0);
}
Program:
#include<stdio.h>
#include<conio.h>
#define null 0
int a,s;
struct node
{
int data;
struct node *link;
};
struct node *head,*first,*previous,*temp;
void main()
{
first=null;
head=null;
62 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
clrscr();
do
{
printf("1.creation\n");
printf("2.display\n");
printf("3.insert first\n");
printf("4.insert last\n");
printf("5.insert middle\n");
printf("6.delete first\n");
printf("7.delete last\n");
printf("8.delete middle\n");
printf("enter your choice");
scanf("%d",&a);
switch(a)
{
case 1:
create();
display();
break;
case 2:
display();
break;
case 3:
insfirst();
display();
break;
case 4:
inslast();
display();
break;
case 5:
insmiddle();
display();
break;
case 6:
delfirst();
display();
break;
case 7:
dellast();
display();
break;
case 8:
delmiddle();
63 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
display();
break;
case 9:
exit(0);
}
printf("\ndo you want to continue(1/0)\n");
scanf("%d",&s);
}
while(s==1);
}
create()
{
int s;
s=sizeof (struct node);
first=(struct node*) malloc (s);
printf("enter the data");
scanf("%d",&first->data);
first->link=null;
if(head==null)
head=first;
else
{
previous=head;
while(previous->link !=null)
previous=previous->link;
}
previous->link=first;
previous=first;
return(0);
}
display()
{
if(head==null)
printf("null first");
else
temp=head;
while(temp!=null)
{
printf("%d->",temp->data);
temp=temp->link;
}
printf("null\n");
return(0);
}
64 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
insfirst()
{
int s;
if (head==null)
printf("list is null");
else
{
s=sizeof (temp);
temp=(struct node*) malloc(s);
printf("enter data\n");
scanf("%d",&temp->data);
temp->link=head;
head=temp;
}
return(0);
}
delfirst()
{
int s;
if(head==null)
printf("list is null");
else
head=head->link;
return(0);
}
inslast()
{
int s;
struct node *temp,*last;
if (head==null)
printf("list is null");
else
{
s=sizeof (last);
last=(struct node*) malloc(s);
printf("enter the data\n");
scanf("%d",&last->data);
last->link=null;
temp=head;
while(temp->link!=null)
temp=temp->link;
temp->link=last;
}
65 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
return(0);
}
dellast()
{
int s,m;
struct node *pre,*next;
if(head==null)
printf("list is null");
else
{
next=head;
next=head->link;
pre=head;
while(next->link!=null)
{
next=next->link;
pre=pre->link;
}
pre->link=next->link;
}
return(0);
}
insmiddle()
{
int s,f,count;
struct node *next,*pre,*nex;
if (head==null)
printf("list is null");
else
{
s=sizeof (temp);
temp=(struct node*) malloc(s);
pre=head;
next=pre->link;
count=2;
printf("enter the position of the element");
scanf("%d",&f);
printf("enter the data\n");
scanf("%d",&nex->data);
while((count<f) && (next->link!=null))
{
next=next->link;
pre=pre->link;
count=count+1;
}
66 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
return(0);
}
delmiddle()
{
int s,f,count;
struct node *next,*pre,*nex;
if (head==null)
printf("list is null");
else
{
s=sizeof (temp);
temp=(struct node*) malloc(s);
pre=head;
next=pre->link;
count=2;
printf("enter the position of the element");
scanf("%d",&f);
while((count<f) && (next->link!=null))
{
next=next->link;
pre=pre->link;
count=count+1;
}
if((count<f) && (next->link==null))
{
printf("not possible to insert. the list is contains %d elements",count);
}
pre->link=next->link;
}
return(0);
}
67 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Program:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
struct student
{
int rollno;
struct student *prev;
struct student *next;
};
typedef struct student list;
new_elt=(list *)malloc(sizeof(list));
new_elt->rollno=rollno;
new_elt->next=NULL;
while(temp->next!=NULL)
temp=temp->next;
new_elt->prev=temp;
temp->next=new_elt;
}
new_elt=(list *)malloc(sizeof(list));
new_elt->rollno=rollno;
for(i=1;i<position;i++)
temp=temp->next;
adj_elt=temp->next;
adj_elt->prev=new_elt;
68 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
new_elt->next=adj_elt;
new_elt->prev=temp;
temp->next=new_elt;
}
predecsor=del_elt->prev;
successor=del_elt->next;
predecsor->next=del_elt->next;
successor->prev=del_elt->prev;
free(del_elt);
69 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
{
list *temp=head->next;
printf("\nThe List:\n");
while(temp!=NULL)
{
printf("%d--> ",temp->rollno);
temp=temp->next;
}
printf("Null");
}
else
printf("\n The List is Empty");
}
void make_emptylist(list *head)
{
head->prev=NULL;
head->next=NULL;
printf("\nThe List has been deleted!");
}
void main()
{
list *head;
int position,rollno,option;
head=(list *)malloc(sizeof(list*));
head->prev=NULL;
head->next=NULL;
clrscr();
while(1)
{
printf("\n\n1.Add\n2.Insert a Item\n3.Remove a Item\n4.Find\n5.Print the
70 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
scanf("%d",&position);
insert(head,rollno,position);
break;
case 3:
printf("\nEnter the Rollno of the element to Removed:");
scanf("%d",&rollno);
removeElt(head,rollno);
break;
case 4:
printf("Enter rollno of Item to be found:");
scanf("%d",&rollno);
position=find(head,rollno);
if(position!=0)
printf("\nElement has been found!Position=%d",position);
else
printf("\nElement has not found in the List!");
break;
case 5:
print_list(head);
break;
case 6:
make_emptylist(head);
break;
case 7:
exit(0);
}
} getch(); }
Program :
#include<stdio.h>
#include<conio.h>
int a,s;
struct node
{
int data;
struct node *link;
};
struct node *head,*first,*previous,*last,*temp;
void main()
{
71 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
first=NULL;
head=NULL;
previous=NULL;
clrscr();
do
{
printf("1.creation\n");
printf("2.display\n");
printf("3.insert first\n");
printf("4.insert last\n");
printf("5.insert middle\n");
printf("6.delete first\n");
printf("7.delete last\n");
printf("8.delete middle\n");
printf("enter your choice");
scanf("%d",&a);
switch(a)
{
case 1:
create();
display();
break;
case 2:
display();
break;
case 3:
insfirst();
display();
break;
case 4:
inslast();
display();
break;
case 5:
insmiddle();
display();
break;
case 6:
delfirst();
display();
break;
case 7:
dellast();
72 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
display();
break;
case 8:
delmiddle();
display();
break;
case 9:
exit(0);
}
printf("\ndo you want to continue(1/0)\n");
scanf("%d",&s);
}
while(s==1);
}
create()
{
int s;
s=sizeof (struct node);
first=(struct node*) malloc (s);
printf("enter the data");
scanf("%d",&first->data);
first->link=first;
if(head==NULL)
{
head=first;
previous=first;
}
else
{
previous=head;
while(previous->link !=head)
previous=previous->link;
previous->link=first;
previous=first;
}
last=first;
return(0);
}
display()
{
if(head==NULL)
printf("list is null");
else
{
73 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
temp=head;
while(temp!=last)
{
printf("%d->",temp->data);
temp=temp->link;
}
if(temp==last)
{
printf("%d ->",temp->data);
temp=temp->link;
}
}
return(0);
}
insfirst()
{
int s;
if (head==NULL)
printf("list is null");
else
{
s=sizeof (temp);
temp=(struct node*) malloc(s);
printf("enter data\n");
scanf("%d",&temp->data);
temp->link=head;
head=temp;
first=temp;
last->link=temp;
}
return(0);
}
delfirst()
{
int s;
if(head==NULL)
printf("list is null");
else
head=head->link;
last->link=head;
if(last->link==head)
head=NULL;
74 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
return(0);
}
inslast()
{
int s;
struct node *last1,*first1;
if (head==NULL)
printf("list is null");
else
{
s=sizeof (last1);
last1=(struct node*) malloc(s);
printf("enter the data\n");
scanf("%d",&last1->data);
last1->link=NULL;
temp=head;
while(temp->link!=head)
temp=temp->link;
temp->link=last1;
last1->link=head;
last=last1;
}
return(0);
}
dellast()
{
int s,m;
struct node *pre,*next;
if(head==NULL)
printf("list is null");
else
{
if(head==last)
head=last=NULL;
else
{
next=head;
while(next->link!=last)
next=next->link;
next->link=head;
last=next;
}
75 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
}
return(0);
}
insmiddle()
{
int s,f,count;
struct node *next,*pre,*nex;
if (head==NULL)
printf("list is null");
else
{
s=sizeof (temp);
temp=(struct node*) malloc(s);
pre=head;
next=pre->link;
count=2;
printf("enter the position of the elemant");
scanf("%d",&f);
printf("enter the data\n");
scanf("%d",&nex->data);
while((count<f) && (next->link!=head))
{
next=next->link;
pre=pre->link;
count=count+1;
}
if((count<f) && (next->link==head))
{
printf("not possible to insert. the list is contains %d elements",count);
}
else
{
pre->link=nex;
nex->link=next;
}
}
return(0);
}
delmiddle()
{
int s,f,count;
struct node *next,*pre,*nex;
if (head==NULL)
printf("list is null");
else
76 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
{
s=sizeof (temp);
temp=(struct node*) malloc(s);
pre=head;
next=pre->link;
count=2;
printf("enter the position of the elemant");
scanf("%d",&f);
while((count<f) && (next->link!=head))
{
next=next->link;
pre=pre->link;
count=count+1;
}
if((count<f) && (next->link==head))
{
printf("not possible to insert. the list is contains %d elements",count);
}
pre->link=next->link;
}
return(0);
}
Program :
#include<stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node *lchild;
struct node *rchild;
}
void creation()
{
printf("\n Enter the value of the root node \n");
t=(struct node*)malloc(sizeof(struct node));
77 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
scanf("%d",&t->data);
t->lchild=NULL;
t->rchild=NULL;
}
void insert(int n,struct node *a)
{
struct node *x;
if(a->data !=0)
{
if(a->data>n)
insert(n,a->lchild);
else
insert(n,a->rchild);
}
x=(struct node*) malloc(sizeof(struct node));
x->data=n;
if(a->data>n)
{
if((a->lchild)==NULL)
{
a->lchild=x;
a->lchild->lchild=NULL;
a->lchild->rchild=NULL;
}
}
else
if(a->rchild==NULL)
{
a->rchild=x;
a->rchild->lchild=NULL;
a->rchild->rchild=NULL;
}
}
78 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
79 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Program:
7. Write a C program to implement the binary tree operations – insert, delete, and search.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
struct bstree
{
int data;
struct bstree *left;
struct bstree *right;
};
struct bstree *root,*temp;
80 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
if(t==NULL)
return NULL;
else
if(t->right != NULL)
return findMax(t->right);
else
return t;
}
81 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
if (t==NULL)
printf("\nNode is not available");
else if(key < t->data)
t->left=removeElt(t->left,key);
else if(key > t->data)
t->right=removeElt(t->right,key);
else if(t->left != NULL && t->right != NULL)
{
temp=findMin(t->right);
t->data=temp->data;
t->right=removeElt(t->right,t->data);
}
else
{
temp=t;
if(t->left==NULL)
t=t->right;
else if(t->right==NULL)
t=t->left;
free(temp);
}
return t;
}
void print_list(struct bstree *root)
{
if(root!=NULL)
{
if(root->left != NULL)
print_list(root->left);
printf(" %d",root->data);
if(root->right != NULL)
print_list(root->right);
}
}
void main()
{
struct bstree *new_elt;
int option,rollno,info;
root=NULL;
clrscr();
82 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
while(1)
{
printf("\n\n1.Insert a Item\n2.Remove a Item\n3.Find\n4.Find Minimum
Value\n5.Find Maximum Value\n6.Print the List\n7.Exit");
printf("\nEnter your Choice:");
scanf("%d",&option);
switch(option)
{
case 1:
printf("\nEnter Rollno of Element to be Inserted:");
scanf("%d",&rollno);
root=insertbst(root,rollno);
break;
case 2:
printf("\nEnter the Rollno of the element to Removed:");
scanf("%d",&rollno);
root=removeElt(root,rollno);
break;
case 3:
printf("Enter rollno of Item to be found:");
scanf("%d",&rollno);
info=find(root,rollno);
if(info!=0)
printf("\nElement has been found! at Position=%d",info);
if(info == 0)
printf("\nElement has not found in the List!");
break;
case 4:
if(root == NULL)
printf("\nTree is empty");
else
{
info=find_min(root);
printf("\n The Minimum Value is:%d",info);
}
break;
case 5:
if(root == NULL)
printf("\nTree is empty");
else
{
info=find_max(root);
printf("\n The Maximum Value is:%d",info);
}
83 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
break;
case 6:
if(root == NULL)
printf("\nTree is empty");
else
print_list(root);
break;
case 7:
exit(0);
}
}
getch();
}
#include <stdio.h>
#include<conio.h>
int n,a[30],pass=1;
void quicksort(int low, int high)
{
if(low<high)
{
int k,i;
k=partition(low,high);
printf("pass %d\n",pass++);
for(i=1;i<=n;i++)
printf("%6d",a[i]);
printf("\n");
quicksort(low,k-1);
quicksort(k+1,high);
}
}
int partition(int low,int high)
{
int v,i,t;
v=a[low];
i=low;
do
{
while(a[i]<=v)
i++;
while(a[high]>v)
high--;
84 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
if(i<high)
{
t=a[i];
a[i]=a[high];
a[high]=t;
}
}
while(i<high);
a[low]=a[high];
a[high]=v;
return high;
}
void main()
{
int low,high,i;
clrscr();
printf(" Enter the array size \n");
scanf("%d",&n);
printf("Enter the elements \n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
low=1;
high=n;
quicksort(low,high);
getch();
}
Program:
#include<conio.h>
#include<stdio.h>
int x[20],n,n1;
void heapsort();
void adjust();
void heapify();
void main()
{
int i;
clrscr();
printf("ENTER THE NO. OF ELEMENTS :");
scanf("%d",&n);
n1=n;
85 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
int i,t,j;
heapify();
for(i=n;i>=2;i--)
{
t=x[i];
x[i]=x[1];
x[1]=t;
adjust(1,i-1);
printf("\npass %d \n",n-(i-1));
for(j=1;j<=n1;j++)
printf(" %d\t",x[j]);
}
}
void adjust(int i,int n)
{
int j;
int t;
j=2*i;
t=x[i];
while(j<=n)
{
if(j<n && x[j] < x[j+1])
j++;
if(t>=x[j])
break;
x[j/2]=x[j];
j=2*j;
}
x[j/2]=t;
86 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
}
void heapify()
{
int i,j;
for(i=n/2;i>=1;i--)
adjust(i,n);
}
Program:
10. Write a C program to implement the Depth First Search.
#include<conio.h>
#include<stdio.h>
int graph[10][10];
int visited[10];
87 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
DFS(i,no_v);
}
}
}
void main()
{
int no_v,no_e;
int s_v,e_v,start_v;
int i,j;
clrscr();
printf("\nEnter the No of Vertices in the Graph:");
scanf("%d",&no_v);
printf("Enter the no of Edges in the Graph:");
scanf("%d",&no_e);
getch();
}
88 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
Program:
int start_V[20],end_V[20],weight[20];
int no_v,no_e;
struct VertexInfo
{
int known;
int distance;
int prev_vertex;
}vertex[20];
void Intilize_VertexInfo()
{
int i,j;
for(i=1;i<=no_v;i++) //Intialize the Graph
{
vertex[i].known=0;
vertex[i].distance=1000;
vertex[i].prev_vertex=0;
}
}
89 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
void main()
{
int s_v,e_v,start_v;
int i,j;
int v,w,index;
int min,qw,next_v;
char ch;
clrscr();
printf("\nEnter the No of Vertices in the Graph:");
scanf("%d",&no_v);
printf("Enter the no of Edges in the Graph:");
scanf("%d",&no_e);
scanf("%d %d %d",&start_V[i],&end_V[i],&weight[i]);
}
Intilize_VertexInfo();
printf("\nEnter Vertices to find the Shortest Path:");
scanf("%d %d",&s_v,&e_v);
vertex[s_v].distance=0;
next_v=s_v;
while(next_v)
{
v=next_v;
vertex[v].known=1;
for(i=1;i<=no_e;i++)
{
if(start_V[i]==v)
{
w=end_V[i];
if(vertex[v].distance+weight[i] < vertex[w].distance)
{
vertex[w].distance=vertex[v].distance+weight[i];
vertex[w].prev_vertex=v;
}
}
}
90 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
min=1000;
for(j=1;j<=no_v;j++)
{
if(vertex[j].known==0 && min>vertex[j].distance)
{
min=vertex[j].distance;
next_v=j;
}
}
if(min==1000)
next_v=0;
}
print_Path(e_v);
while(1)
{
printf("\nDo you want shortest to one more destination:");
fflush(stdin);
ch=getchar();
if(ch=='y' | ch=='Y')
{
printf("\nEnter the Destination Vertex:");
scanf("%d",&e_v);
print_Path(e_v);
}
else
break;
}
getch();
}
1. Represent the given sparse matrix using one-dimensional array and linked list.
2. Create a Stack and do the following operations using arrays and linked lists
(i)Push (ii) Pop (iii) Peep
91 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
3. Create a Queue and do the following operations using arrays and linked lists
(i)Add (ii) Remove
4. Implement the operations on singly linked list, doubly linked list and circular
linked list.
7. Sort the given list of numbers using heap and quick sort.
92 www.technicalsymposium.com
For More Notes and questions log on to www.technicalsymposium.com
5. Create the sales report for M sales person and N products using two-dimensional
array.
93 www.technicalsymposium.com