Top Banner
MCA 26 Data structure Lab Manual page 2 of 2 Dept. of M C A B M S College of Engineering, B’lore Data Structures Definition : Data structure is a representation of logical relationship existing between individual elements of data. Or A data structure is a way of organizing all the data items that considers not only the elements stored but also their relationship to each other. Complete Classification of Data Structures Data structures Primitive Data Structures Non-Primitive Data Structures int float char Pointer s Lists Files Arrays Linear Lists Non-Linear Lists Stacks Queues Trees Graphs
57

Data Structure Lab_MCA16-L

Apr 11, 2015

Download

Documents

api-3732063
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

Data Structures

Definition:

Data structure is a representation of logical relationship existing between individual

elements of data.

Or

A data structure is a way of organizing all the data items that considers not only the

elements stored but also their relationship to each other.

Complete Classification of Data Structures

Data structures

Primitive Data

Structures

Non-Primitive

Data Structures

int float char Pointer

s

Lists Files Arrays

Linear Lists Non-Linear

Lists

Stacks

Queues

Trees

Graphs

Page 2: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

1 /* Write a program to create a sequential file with at least five records each record

having the structure shown below

USN Name Marks1 Marks2 Marks3

Non-Zero

positive

integer

25 characters Positive

integer

Positive

integer

Positive

integer

Write necessary functions 1.To display all the records in the file. 2. To search for a

specific record based on USN in case the required record is not found suitable

message should be displayed both the options in this case must be demonstrated. */

#include<stdio.h>

struct file

{

int usn;

char name[25];

int m[3];

};

typedef struct file S;

main()

{

int ch;

while(1)

{

clrscr();

printf(" 1 Create\n 2 Display\n 3 Search\n 4 Exit\n");

printf("Enter your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: create(); break;

case 2: display(); break;

case 3: search(); break;

case 4: exit(0);

}

getch();

}

}

/* ************************End of main() ****************/

Page 3: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

create()

{

FILE *fp;

int i,j,n;

S s[10];

fp=fopen("stud.c","w");

if(fp==NULL)

printf("Error..............\n");

else

{

printf("Enter the number of records\n");

scanf("%d",&n);

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

{

printf("Enter the %d student record\n",i+1);

scanf("%d%s",&s[i].usn,s[i].name);

printf("Enter the 3 marks\n");

for(j=0;j<3;j++)

scanf("%d",&s[i].m[j]);

}

}

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

{

fprintf(fp,"\t%d\t%s\t\t",s[i].usn,s[i].name);

for(j=0;j<3;j++)

fprintf(fp,"%d\t",s[i].m[j]);

fprintf(fp,"%c",'\n');

}

fclose(fp);

}

/*********************Create function***************************/

display()

{

FILE *fp;

char ch;

fp=fopen("stud.c","r");

printf("The Contents of The file is\n");

printf("\tUSN\t NAME\t\tM1\tM2\tM3\n");

printf("______________________________________________\n");

while((ch=getc(fp))!=EOF)

Page 4: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

{

printf("%c",ch);

}

printf("\n\n__________________________________________\n");

printf("End OF File..............\n");

fclose(fp);

}

/**********************display function()**************************/

search()

{

FILE *fp;

char name[25];

int id,un;

int m1,m2,m3;

fp=fopen("stud.c","r");

if(fp==NULL)

printf("Error......................\n");

else

{

printf("Enter the University number of stud\n");

scanf("%d",&id);

for(;;)

{

fscanf(fp,"%d%s%d%d%d",&un,name,&m1,&m2,&m3);

if(feof(fp))

{ printf("Sorry NOT FOund\n");

break;

}

if(un==id)

{ printf("RECORD is Found\n");

printf("\tUSN is %d\n\tNAME is

%s\n\tM1=%d\n\tM2=%d\n\tM3=%d\n\t",un,name,m1,m2,m3);

return;

}

}

}

fclose(fp);

}

/*** End of search()***********/

/*************************End of program **************/

Page 5: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

/* 2. Write a C program to construct a stack of integers and to perform the following

options on it PUSH 2.POP 3. DISPLAY

The program should print appropriate messages for stack overflow, stack underflow

and stack empty.*/

#include<stdio.h>

#include<conio.h>

#define MAX 5

int stack[MAX];

int top=0;

void main()

{

int ch;

while(1)

{ clrscr();

printf("1 PUSH\n2 POP\n3 DISPLAY\n4 EXIT\n");

printf("Enter Your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: push(); break;

case 2: pop(); break;

case 3: display(); break;

case 4: exit(0);

default: printf("Invalid choice\n");

}

getch();

}

}

/* ****** ** End of main function ******** */

push()

{

if(top==MAX)

printf("Stack Overflow\n");

else

{

printf("Enter the element to be Push\n");

scanf("%d",&stack[top++]);

printf("Operation Success\n");

}

} /* End of push() ***** ** */

Page 6: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

pop()

{

if(top==0)

printf("Stack Under flow\n");

else

printf("The Poped element is %d\n",stack[--top]);

}

/* *** End pop() **** */

display()

{ int i;

if(top==0)

printf("Stack Empty\n");

else

{

printf("The Elements in Stack are\n");

for(i=top-1;i>=0;i--)

printf("%d\n",stack[i]);

}

}

/* End of Display() ****** */

/* End of Program *** */

Page 7: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

3 /* Write a C program to convert and print a given valid parenthesized Infix arithmetic

expressions to postfix expressions. The expression consists of single character

operands and binary operators + (plus) - (minus) *(multiplication) / (divide). */

Algorithm to Convert Infix to Postfix Expression;

Step1: Scan Infix Expression from left to right

Step2: a) If the scanned symbol is left parentheses, push it into the stack.

b) If the scanned symbol is right parentheses, then go on popping all the items

from the stack and place them in the postfix expression till we get the

matching left parentheses.

c) If the scanned symbol is an operand, then place directly in the postfix

expression.

d) If the scanned symbol is an operator, then go on removing all the operators

from the

stack and place them in the postfix expression, as long as precedence of the

operator, which is on the top of the stack, is greater than or equal to the

precedence of the scanned symbol, otherwise push the scanned symbol onto

the stack.

Step3: Repeat the above steps as long as symbols present in infix expression.

/* Program: to convert Infix to Postfix */

#include<stdio.h>

#include<string.h>

char infix[20],pfix[20],stack[20];

int pos,i,len,top=-1;

void main()

{

clrscr();

printf("Enter the valid infix expression\n");

scanf("%s",infix);

Page 8: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

convert();

printf("The postfix Expression is :%s",pfix);

getch();

}

/* End of main function */

convert()

{

char temp,sym;

len=strlen(infix);

push('#');

while(i<len)

{

sym=infix[i];

switch(sym)

{

case '(': push(sym); break;

case ')': temp=pop();

while(temp!='(')

{ pfix[pos++]=temp;

temp=pop();

}

break;

case '+':

case '-':

case '*':

case '/':

case '^': while(preced( stack[top])>=preced(sym))

{

temp=pop();

pfix[pos++]=temp;

}

push(sym);//condition fails push symbol into stack

break;

default: pfix[pos++]=sym;

}

i++;

}

Page 9: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

//any items left in the stack pop and add them to postfix expression

while(top>0)

{

pfix[pos++]=pop();

}

}

/* End of convert function */

preced(char c)

{

int p;

switch(c)

{ case '^': p=3; break;

case '/':

case '*': p=2; break;

case '+':

case '-': p=1; break;

case '(':

case ')': p=0; break;

case '#': p=-1; break;

}

return p;

}

/* End of precedence function it returns precedence of operators*/

push(char c)

{

stack [++top]=c;

}

/* End of Push */

pop()

{

char r;

r=stack [top--];

return r;

}

/* End of POP */

Page 10: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

4. /* Write a C program to Evaluate Valid Suffix/postfix expressions using stack.

Assume that the suffix /postfix expression is read as a single line consisting of non-

negative single digit operands and binary arithmetic operators. The arithmetic

operators are + (add),-(minus),*(multiply) and / (divide).*/

Algorithm to Evaluate Postfix Expression

Step1: Scan the given Postfix Expression from left to right.

Step2: Store the Numeric values corresponding to each operand, in an array.

Step3: a) If the scanned symbol is an operand, then push its value onto the stack.

b) If the scanned symbol is an operator, then pop out two values from the stack

and store

them in some variable viz op1 and op2.

Step 4: Depending on the operator perform the required arithmetic operation

If the operator is +

Case +: result=op1+op2;

Case -: result=op1-op2;

Case *: result=op1*op2;

Case /: result= op1/op2;

Step5: push the result onto the stack

Step6: Repeat the above steps as long as symbols present in the Postfix Expression

program to Evaluate Valid Suffix/postfix expressions

#include<stdio.h>

char pfix[20];

int stack[20],top=0;

int value[20];

void main()

{

int i=0,r;

clrscr();

printf("Enter the valid suffix expression\n");

Page 11: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

scanf("%s",pfix);

while(pfix[i]!='\0')

{

if(isalpha(pfix[i])) //isalpha() checks of the charcter

{

printf("Enter the value of %c\n",pfix[i]);

scanf("%d",&value[i]);

}

i++;

}

// after storing values in value[] array we call the evaluate function

r=evaluvate();

printf("The result is :%d\n",r);

getch();

}

/* End of main() function */

evaluvate()

{

int i=0;

int p1,p2,t;

char c;

while(pfix[i]!='\0')

{

c=pfix[i];

if(isalpha(c))

push(value[i]);

else

{

p2=pop();

p1=pop();

Page 12: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

switch(c)

{

case '+': push(p1+p2);break;

case '-': push(p1-p2); break;

case '/': push(p1/p2); break;

case '*': push(p1*p2); break;

case '^': push(pow(p1,p2)); break;

}

}

i++;

}

t=pop();

return t;

}

/* End of Evaluate Function */

push(int n)

{

stack[++top]=n;

}

/* End of Push function */

pop()

{

int n;

n=stack[top--];

return n;

}

/* end of POP function */

Page 13: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

5 /* Write a program to simulate the working of a queue of integers using an array.

Provide the following operations.

1. Insert

2. delete

3. display */

#include<stdio.h>

#include<conio.h>

#define MAX 5

int queue[MAX];

int r=0,f=0;

void main()

{

int ch;

while(1)

{ clrscr();

printf("1 Insert\n2 Delete\n3 Display\n4 Exit\n");

printf("Enter Your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: insert(); break;

case 2: del(); break;

case 3: display(); break;

case 4: exit(0);

default: printf("Invalid choice\n");

}

getch();

}

}

/* ****** ** End of main function ******** */

insert()

{

if(r==MAX)

printf("Queue Overflow\n");

else

{

printf("Enter the element to be Insert\n");

Page 14: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

scanf("%d",&queue[r++]);

printf("Operation Success\n");

}

}

/* End of insert() ***** ** */

del()

{

if(r==f)

printf("Queue Under flow\n");

else

printf("The Deleted element is %d\n",queue[f++]);

}

/* *** End del() **** */

display()

{

int i;

if(r==f)

printf("Queue Empty\n");

else

{

printf("The Elements in Queue are\n");

for(i=f;i<r;i++)

printf("%d\n",queue[i]);

}

}

/* End of Display() ****** */

/* End of Program *** */

Page 15: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

6 /* Write a C program to simulate the working of a circular queue of integers

using an array. Provide the following operations

1. Insert

2. Delete

3. Display*/

#include<stdio.h>

#define SIZE 5

int queue[SIZE];

void insert(),deletee(),display();

main()

{ int f=0,r=-1,s=0,n;

int ch;

while(1)

{ clrscr();

printf("MENU\n 1 INSERT\n 2 DELETE\n 3 DISPLAY\n 4 EXIT\n");

printf("Enter your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: printf("Enter the element\n");

scanf("%d",&n);

insert(n,&r,&s); break;

case 2: deletee(&f,&s); break;

case 3: display(f,s); break;

case 4: exit(0); break;

default: printf("Invalid choice\n");

}

getch();

}

}

/* *****************End o f main function ********** */

void insert(int n,int *r,int *s)

{

if(*s==SIZE)

printf("Queue is full\n");

else

{ *r=*r%SIZE+1;

Page 16: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

queue[*r]=n;

*s=*s+1;

printf("Insert success\n");

}

}

/* End of Insert() */

void delete(int *f,int *s)

{

if(*s==0)

printf("Queue Empty\n");

else

{

printf("The deleted element is %d\n",queue[*f]);

*f=*f%SIZE+1;

*s=*s-1;

}

}

/* ****** End of Deletee() ****** */

void display(int f,int s)

{ int i,k;

if(s==0)

printf("Queue Empty\n");

else

{

printf("Elements of CQ are\n");

k=f;

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

{

printf("%d\t",queue[k]);

k=(k%SIZE)+1;

}

}

}

/* **************** End of Display() ******** */

Page 17: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

7 /* Write a program to design a priority queue which is maintained as a set of queues

(maximum of three queues). The elements are inserted based upon the given priority;

the deletion of an element is to be done starting from the 1st queue, if it is not empty.

If it is empty from the 2nd queue will be deleted and so on.*/

#include<stdio.h>

#define SIZE 5

int q1[SIZE],q2[SIZE],q3[SIZE];

void main()

{ int f1=0,f2=0,f3=0,r1=0,r2=0,r3=0;

int ch,p,n;

while(1)

{ clrscr();

printf("MENU\n 1 INSERT\n 2 DELETE\n 3 DISPLAY\n 4 EXIT\n");

printf("Enter your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: printf("Enter priority and element to be inserted\n");

scanf("%d%d",&p,&n);

switch(p)

{

case 1: if(r1==SIZE)

printf("Q1 is full\n");

else

{

insert(q1,n,r1);

r1++;

}

break;

case 2: if(r2==SIZE)

printf("Q2 is full");

else

{

insert(q2,n,r2);

r2++;

}

break;

case 3: if(r3==SIZE)

printf("Q3 is full\n");

else

Page 18: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

{

insert(q3,n,r3);

r3++;

}

break;

default: printf("Invalid priority element discarded re-enter\n");

}

break;

case 2: if(f1==r1)

{ printf("Q1 is empty\n");

if(f2==r2)

{ printf("Q2 is empty\n");

if(f3==r3)

printf("Q3 is Empty\n");

else

{ printf(" The deleted element is

d\n",deletee(q3,f3));

f3++;

} }

else

{

printf("The deleted element is

\n",deletee(q2,f2));

f2++;

} }

else

{

printf("The deleted element is %d\n",deletee(q1,f1));

f1++;

}

break;

case 3: if(r1==f1)

printf("Q1 is empty\n");

else

{ printf("Elements in Q1 are \n");

display(q1,f1,r1);

}

if(r2==f2)

printf("Q2 is empty\n");

else

Page 19: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

{ printf("Elements in Q2 are \n");

display(q2,f2,r2);

}

if(r3==f3)

printf("Q3 is empty\n");

else

{ printf("Elements in Q3 are \n");

display(q3,f3,r3);

}

break;

case 4: exit(0); break;

default: printf("Invalid choice\n");

}

getch();

}

} /* *********** End of main Function *********** */

insert(int q[],int m,int r)

{

q[r++]= m;

}

/* *********** End of Insert() *********** */

deletee(int q[],int f)

{

return (q[f++]);

}

/* ************ End of Deletee() function ********** */

display(int q[],int f,int r)

{ int i;

for(i=f;i<r;i++)

printf("|%d|\t",q[i]);

printf("\n");

}

/* ************* End Of display () ********* */

Page 20: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

OR

#include<stdio.h>

#include<conio.h>

#define MAX 5

struct pq

{

int queue[MAX];

int f,r;

}Q[3];

void main()

{

int ch,i;

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

{

Q[i].f=0;

Q[i].r=0;

}

while(1)

{ clrscr();

printf("1 Insert\n2 Delete\n3 Display\n4 Exit\n");

printf("Enter Your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: insert(); break;

case 2: del(); break;

case 3: display(); break;

case 4: exit(0);

default: printf("Invalid choice\n");

}

getch();

}

}

/* ****** ** End of main function ******** */

Page 21: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

insert()

{

int qn,n;

printf("Enter the Q number and Element to be insert\n");

scanf("%d%d",&qn,&n);

if(Q[qn-1].r==MAX)

printf(" %d Queue Overflow\n",qn);

else

{

Q[qn-1].queue[Q[qn-1].r++]=n;

printf("Operation success\n");

}

}

/* End of Insert() ***** ** */

del()

{ if(Q[0].f==Q[0].r)

{

printf("%d Queue Underflow\n",1);

if(Q[1].f==Q[1].r)

{

printf("%d Queue Underflow\n",2);

if(Q[2].f==Q[2].r)

printf("%d Queue Underflow\n",3);

else

printf("The Deleted item is %d\n",Q[2].queue[Q[2].f++]);

}

else

printf("The Deleted item is %d\n",Q[1].queue[Q[1].f++]);

}

else

printf("The Deleted item is %d\n",Q[0].queue[Q[0].f++]);

}

/* *** End pop() **** */

Page 22: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

display()

{ int i,j;

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

{

if(Q[i].f==Q[i].r)

printf(" Queue%d Empty\n",i+1);

else

{

printf("The elements In %d Queue are\n",i+1);

for( j=Q[i].f;j<Q[i].r;j++)

printf("%d\t",Q[i].queue[j]);

}

printf("\n");

}

}

/* End of Display() ****** */

/* End of Program *** */

Page 23: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

8 /*Write a C program using dynamic variables and pointers, to construct a singly

linked list consisting of the followings information in each node, student id (integer),

student name (character string) and semester (integer).The operations to be supported

are.

a. The insertion operation

1. at the front of the list

2. at the back of the list

3. at any position in the list

b. Deleting a node based on student id.

If the specified node is not present in the list an error message should be displayed.

Both the options should be demonstrated.

c. Searching a node based on student id and updates the information content. If the

specified node is not present in the list an error message should be displayed. Both

situations should be displayed.

d. Displaying all the nodes in the list. */

#include<stdio.h>

#include<string.h>

#define NULL 0

struct stud

{

int rno;

char name[12];

int sem;

struct stud *next;

};

typedef struct stud N;

N *head;

void getdata();

int m,s,p;

char n[12];

main()

{

int ch;

head=(N *)malloc(sizeof(N));

head=NULL;

while(1)

{ clrscr();

printf("\n\t1 InsertFront\n\t2 InsertBack\n\t3 InsertAtpos\n\t4 Delete\n\t5

Display\n\t6 SearchRec\n\t7 Exit\n");

Page 24: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

printf("\tEnter your choice\n\t");

scanf("%d",&ch);

switch(ch)

{

case 1: insertfront();

break;

case 2: insertback();

break;

case 3: insertatspos();

break;

case 4: deletee();

break;

case 5: display(head); break ;

case 6: search(head,p);

break;

case 7: printf("Byeeeeeeeeeee %c%c",2,2);

getch();

exit(0); break;

default: printf("Invalid choice\n");

}

getch();

}

}

/* ******************End of main() ********** */

void getdata()

{

printf("Enter the student id\n");

scanf("%d",&m);

printf("Enter the student name\n");

scanf("%s",n);

printf("Enter the semester\n");

scanf("%d",&s);

}

/* End of getdata() */

Page 25: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

insertfront()

{

N *temp;

temp=(N*)malloc(sizeof(N));

getdata();

if(head==NULL)

{ temp->rno=m ;

strcpy(temp->name,n);

temp->sem=s;

temp->next=NULL;

head=temp;

}

else

{

temp->rno=m;

strcpy(temp->name,n);

temp->sem=s;

temp->next=head;

head=temp;

}

}

/* ************* End of InsertFront Function ************ */

insertback()

{

N *temp,*p;

p=head;

temp=(N *)malloc(sizeof(N));

getdata();

if(head==NULL)

printf("List is Empty\n");

else

{

while(p->next!=NULL)

{

p=p->next;

}

Page 26: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

temp->rno=m;

strcpy(temp->name,n);

temp->sem=s;

temp->next=NULL;

p->next=temp;

}

}

/* **********End of insertBack function************* */

insertatspos()

{

int c=1,pos;

N *temp,*p;

p=head;

temp=(N*)malloc(sizeof(N));

getdata();

printf("Enter the position\n");

scanf("%d",&pos);

if(head==NULL)

printf("List is Empty\n");

else

{ while(c<pos)

{

p=p->next;

if(p==NULL)

{

printf("Number of nodes Less than the postion\n");

break;

}

else

c++;

}

temp->rno=m;

strcpy(temp->name,n);

temp->sem=s;

temp->next=p->next;

p->next=temp;

}

}

/* ********** End of insertat specified position ***** */

Page 27: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

display()

{

N *temp;

temp=head;

printf("The list is \n");

printf("____________________________________________________________\n");

printf("SID\t\tNAME\t\tSEM\n");

printf("____________________________________________________________\n");

while(temp!=NULL)

{

printf("%3d\t%12s\t\t%2d\n",temp->rno,temp->name,temp->sem);

temp=temp->next;

}

printf("_________________________________________________________NULL");

}

/* *********** End of Display() ************** */

search()

{

N *temp;

int f=0,id;

printf("Enter the student id\n");

scanf("%d",&id);

if(head==NULL)

{

printf("Not Found\n");

return;

}

temp=head;

while(temp!=NULL)

{

if(temp->rno==id)

{

printf("RECORD FOUND IN THE LIST\n");

printf("\nRNO %d\nNAME %s\nSEM %d",temp->rno,temp->name,temp->sem);

f=1;

break;

}

temp=temp->next;

}

Page 28: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

if(f==0)

printf("Record Not Found\n");

}

/* ***************End of search Function *********** */

deletee()

{

N *t1,*t2;

int id;

t1=head;

printf("Enter the student id to delete?");

scanf("%d",&id);

if(head==NULL)

printf("List is Empty\n");

else

if(t1->rno==id)

{ t1=t1->next;

head=t1;

}

else

{

while(t1->rno!=id)

{

if(t1->next==NULL)

{printf("NOT Found\n");

return;

}

t2=t1;

t1=t1->next;

}

t2->next=t1->next;

}

printf("The %d is deleted from list\n",id);

}

/* End of Deletee */

/* End of Program */

Page 29: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

9 /* Write a C program using dynamic variables and pointers to construct a stack of

integers using singly linked list and to perform the following operations.

a. PUSH

b. POP

c. Display

The program should print appropriate messages for stack overflow and stack

underflow **/

#include<stdio.h>

struct stack

{

int data;

struct stack *next;

};

typedef struct stack S;

S *top;

void push();

void pop();

void display();

void main()

{

int ch;

top=(S*)malloc(sizeof(S));

top=NULL;

while(1)

{ clrscr();

printf("1 Push\n2 Pop\n3 Display\n4 Exit\n");

printf("Enter your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: push(); break;

case 2: pop(); break;

case 3: display(); break;

case 4: exit(0); break;

default: printf("invalid choice\n");

}

getch();

}

}

/* end of main function */

Page 30: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

void push()

{

S *temp;

temp=(S*)malloc(sizeof(S));

printf("Enter the element\n");

scanf("%d",&temp->data);

if(top==NULL)

{

temp->next=NULL;

top=temp;

}

else

{

temp->next=top;

top=temp;

}

printf("Element pushed successfully\n");

}

/* *** End of push function ************ */

void pop()

{ S *temp;

temp=top;

if(top==NULL)

printf("Stack Underflow\n");

else

{

top=top->next;

printf("Element deleted is %d",temp->data);

free(temp);

}

} /*** End of delete function **** */

Page 31: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

void display()

{ S *temp;

temp=top;

if(top==NULL)

printf("Stack Empty\n");

else

{

printf("Elements in stack are\n");

while(temp!=NULL)

{

printf("%d\n",temp->data);

temp=temp->next;

}

}

}

/* *********** end of display ******* */

Page 32: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

10/* Program using Dynamic Variables and pointers to construct a queue of Integers

using SLL and to perform the following operations.

1. Insert

2. Delete

3. Display

Also check for appropriate conditions like overflow, underflow, Empty.*/

#include<stdio.h>

struct queue

{

int data;

struct queue *next;

};

typedef struct queue Q;

Q *front;

void insert();

void deletee();

void display();

void main()

{

int ch;

front=(Q*)malloc(sizeof(Q));

front=NULL;

while(1)

{ clrscr();

printf("1 Insert\n2 Delete\n3 Display\n4 Exit\n");

printf("Enter your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: insert(); break;

case 2: deletee(); break;

case 3: display(); break;

case 4: exit(0); break;

default: printf("invalid choice\n");

}

getch();

}

}

/* end of main function */

Page 33: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

void insert()

{

Q *temp,*t;

temp=(Q*)malloc(sizeof(Q));

printf("Enter the element to be insert\n");

scanf("%d",&temp->data);

if(front==NULL)

{

temp->next=NULL;

front=temp;

}

else

{ t=front;

while(t->next!=NULL)

{

t=t->next;

}

temp->next=NULL;

t->next=temp;

}

} /* ************************ End of insertQ *********/

void deletee()

{

Q *temp;

if(front==NULL)

printf("Queue underflow\n");

else

{ temp=front;

front=front->next;

printf("Deleted element is %d\n",temp->data);

free(temp);

}

}

/* **************** End of Delete function ************/

void display()

{ Q *temp;

temp=front;

if(front==NULL)

Page 34: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

printf("Queue Empty\n");

else

{

printf("The elements in Queue are\n");

while(temp!=NULL)

{

printf("%d\t",temp->data);

temp=temp->next;

}

}

}

Page 35: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

11./* Write a program to support the following operations on doubly linked list where

each node consists of integers.

a Create a doubly linked list by adding each node at the front.

b Insert a new node to the left if the node whose key value is read as an input

c Delete the node of a given data, if it is found, otherwise display appropriate

message.

d Display the contents of the list. */

#include<stdio.h>

#include<conio.h>

struct list

{

int data;

struct list *next;

struct list *prev;

};

typedef struct list NODE;

NODE *head;

main()

{

int ch;

head=(NODE*)malloc(sizeof(NODE));

head=NULL;

while(1)

{

clrscr();

printf("1 InsertB\n2 Display\n3 InsertAtPosition\n4 Delete\n5 Exit\n");

printf("Enter your choice\n");

scanf("%d",&ch);

switch(ch)

{

case 1: insert(); break;

case 2: display(); break;

case 3: insertp(); break;

case 4: deletee(); break;

case 5: exit(0);

}

getch();

}

}

/* End of main function ********* */

Page 36: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

insert()

{

NODE *temp;

temp=(NODE*)malloc(sizeof(NODE));

printf("Enter the data\n");

scanf("%d",&temp->data);

if(head==NULL)

{

temp->next=NULL; /* if list emty temp is the first and last node*/

temp->prev=NULL;

head=temp;

}

else

{

temp->next=head;

temp->prev=NULL; /* if list is not empty make temp as first node*/

head->prev=temp;

head=temp;

}

}

/* **** End of Insert function ********/

display()

{

NODE *temp,*b;

temp=head;

if(head==NULL)

{

printf("List is Empty\n");

return;

}

printf("Forward Traversing is\n");

while(temp!=NULL)

{

b=temp;

printf("%d->",temp->data);

temp=temp->next;

}

Page 37: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

printf("\nBackword Traversing is\n");

while(b!=NULL)

{

printf("%d->",b->data);

b=b->prev;

}

}

/* End of Display ****/

insertp()

{

NODE *temp,*t;

int p;

t=head;

temp=(NODE *)malloc(sizeof(NODE));

printf("Enter the data and position\n");

scanf("%d%d",&temp->data,&p);

while(p>1)

{

if(t->next==NULL)

{

printf("Number of nodes less than position\n");

return;

}

p--;

t=t->next;

}

temp->next=t->next;

temp->prev=t;

t->next=temp;

temp->next->prev=temp;

}

/* End of insert at position *****/

deletee()

Page 38: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

{

NODE *temp,*t,*d;

int n;

temp=head;

printf("Enter the data to be delete?\n");

scanf("%d",&n);

if(temp->data==n)

{ d=temp;

temp=temp->next; /* if n is first node delete it*/

temp->prev=NULL;

head=temp;

free(d);

return;

}

while(temp->data!=n) /* traverse list until u get the element */

{

if(temp==NULL)

{ /* while traversing u encounter the end of list generate error*/

printf("%d is not present in list\n",n);

break;

}

t=temp;

temp=temp->next;

d=temp;

}

t->next=temp->next;

temp->next->prev=t;

free(d);

}

/* End of Deletee function *****/

Page 39: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

12 /* Write Recursive C program for

a. Search an element on a given list of integers using the binary

search method.

b. Solving the tower of Hanoi problem.*/

#include<stdio.h>

void main()

{

int a[20],n,i,j,temp;

int low,high,k,R;

clrscr();

printf("Enter the number of elements\n");

scanf("%d",&n);

printf("Enter the elemets\n");

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

scanf("%d",&a[i]);

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

{ for(j=0;j<n;j++)

{ if(a[i]<=a[j])

{

temp=a[i]; /* if elements are unsorted it sorts the elements*/

a[i]=a[j]; /* because binary search works for only sorted array*/

a[j]=temp;

}

}

}

printf("Enter the element to be search\n");

scanf("%d",&k);

low=0;

high=n-1;

R=bsearch(a,low,high,k);

if(R>=0)

printf("Search Success..... elemet found at %d",R+1);

else

printf("Element not Found\n");

getch();

}

/* End of main() *********** */

Page 40: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

bsearch(int a[],int l,int h,int k)

{ int mid;

mid=(l+h)/2;

if(l<=h)

{ if(a[mid]==k) return mid;

if(k<a[mid]) bsearch(a,l,mid-1,k);

else

bsearch(a,mid+1,h,k);

}

else

return -1;

}

/* End of bsearch() ****************** */

b)

/* Program to solve Tower of hanoi problem */

#include<stdio.h>

main()

{ int n;

clrscr();

printf("Enter the number of discks\n");

scanf("%d",&n);

tower(n,'S','D','T');

getch();

}

/* End of main()****/

tower(int n,char s,char d,char t)

{

if(n>0)

{

tower(n-1,s,t,d);

printf("%d is moved from %c to %c\n",n,s,d);

tower(n-1,t,d,s);

}

return;

}

/* ***** End of display ***/

/* End of program */

Page 41: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

13. /* Write a C program to sort a list of N strings using insertion sort algorithm. The

necessary data must be read from a sequential file.*/

#include<stdio.h>

main()

{

int i=0,j,k,m;

char fname[10],name[200][30],s[30];

FILE *fp;

clrscr();

printf("Enter the file name\n");

scanf("%s",fname);

fp=fopen(fname,"r");

if(fp==NULL)

{ printf("Can't open........................\n");

exit(0);

}

printf("The names in %s file are\n",fname);

for(;;)

{

fscanf(fp,"%s",s);

if(feof(fp)) /* reads the names from the file */

break;

strcpy(name[i++],s); /*store the name taken from the file int array*/

printf("%s ",s);

}

m=i;

printf("\nThe sorted order is \n");

for(j=0;j<m;j++)

{ strcpy(s,name[j]);

for(k=j-1; (k>=0&&strcmp(name[k],s)>0);k--)

{

strcpy(name[k+1],name[k]);

}

strcpy(name[k+1],s);

}

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

printf("%s\n",name[i]);

getch();

}

Page 42: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

ALGORITHM for Linear and Binary Search

Algorithm for Linear Search

Step 1 : /* Read number of elements */

Read n

Step 2 : for I = 0 to n-1

Read A[i]

Step 3 : /*Read the key value to be searched */

Read key

Step 4 : /* Search key in Array A */

For i=0 to n-1

If A[i] = key then

Pos = i+1

Go to step 5

Else

Pos = -1

End if

End for

Step 5 : If pos = -1 then

Write “key value not found”

Else

Write “Key value found at position “ pos

End if

Step 6 : Stop

Algorithm for Binary Search

Step 1 : /* Read number of elements */

Read n

Step 2 : for I = 0 to n-1

Read A[i]

Step 3 : /*Read the key value to be searched */

Read key

Step 4 : lowerbound = 0,

Step 5 : Sort the array A

Step 6 : /* Search key in Sorted Array A */

While lowerbound < = upperbound

Mid = (lowerbound + upperbound)/2

Page 43: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

If A[mid] = key then

Pos = i+1

Go to step 7

Else if A[mid] > key

Upperbound = mid -1

Else

Lowerbound = mid + 1

End if

End while

Pos = -1

Step 7 : If pos = -1 then

Write “key value not found”

Else

Write “Key value found at position “ pos

C code for Linear Search and Binary Search

#include<stdio.h>

#define max 20

void input(int *,int *,int *);

int lsearch(int *,int,int);

void bsort(int *,int);

int bsearch(int *,int,int);

void main()

{

int i,a[max],key,pos1=0,pos2=0,n;

clrscr();

for(;;)

{

clrscr();

printf("\n List of searching Techniques");

printf("\n 1. Linear Search");

printf("\n 2. Binary Search");

printf("\n Exit");

printf("\n Enter your choice");

fflush(stdin);

switch(getchar())

{

case '1':

input(a,&n,&key);

Page 44: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

pos1= lsearch(a,n,key);

break;

case '2':

input(a,&n,&key);

bsort(a,n);

printf("\n Sorted array is:\n\n");

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

printf("%5d",a[i]);

pos2= bsearch(a,n,key);

break;

case '3':

exit(1);

default: printf("\n Envalid Choice");

}

if(pos1)

printf("\n key Found at position %d",pos1);

else if(pos2)

printf("\n key Found at position %d in Sorted Array",pos2);

else

printf("\n Key Not Found");

getch();

}

}

void input(int a[],int *n,int *key)

{

int i;

printf("\n Enter Size of array:");

scanf("%d",n);

printf("\n Enter Array element:");

for(i=0;i<*n;i++)

scanf("%d",&a[i]);

printf("\n Enter the searching key");

scanf("%d",key);

}

int lsearch(int a[],int n,int key)

{

int i;

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

Page 45: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

if(a[i]==key)

return(i+1);

return(0);

}

void bsort(int a[],int n)

{

int i,j,temp;

for(i=0;i<n-1;i++)

for(j=0;j<n-1-i;j++)

if(a[j]>a[j+1])

{

temp = a[j];

a[j] = a[j+1];

a[j+1] =temp;

}

}

int bsearch(int a[],int n,int key)

{

int low,high,mid;

low=0;

high=n;

while(low<=high)

{

mid =(low+high)/2;

if(a[mid]==key)

return(mid+1);

if(a[mid]<key)

low =mid+1;

if(a[mid]>key)

high = mid-1;

}

return(0);

}

Page 46: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

Algorithm to Create and Traverse a Binary Tree

Algorithm to Create a Binary Tree

Step 1 : Read the Root node value as root->info.

Step 2 : Read the next value as item.

Step 3 : If item < root->info then

While root->left != NULL

root = root->left

End while

Store item as left child.

Else

While root->right != NULL

root = root-> right

End while

Store item as right child.

Step 4: Repeat step 2 thru step 4 until EOF.

RECURSIVE ALGORITHM for Pre-order Tree Traversal

Step 1 : Write the Root node value.

Step 2 : Traverse the Left Sub-tree in Pre-order.

Step 3 : Traverse the Right Sub-tree in Pre-order.

RECURSIVE ALGORITHM for Post-order Tree Traversal

Step 1 : Traverse the Left Sub-tree in Post-order.

Step 2 : Traverse the Right Sub-tree in Post-order.

Step 3 : Write the Root node value.

RECURSIVE ALGORITHM for In-order Tree Traversal

Step 1 : Traverse the Left Sub-tree in In-order.

Step 2 : Write the Root node value.

Step 3 : Traverse the Right Sub-tree in In-order.

Page 47: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

C – code for the Binary creation and Traversals

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

struct bst

{

int info;

struct bst *right, *left;

};

typedef struct bst * NODEPTR;

void main()

{

int ch,item;

NODEPTR root=NULL;

for(;;)

{

clrscr();

printf("\nOperations on BST");

printf("\n-----------------");

printf("\n1. Create BST");

printf("\n2. Preorder traversal");

printf("\n3. Postorder traversal");

printf("\n4. Inorder traversal");

printf("\n5. Exit");

printf("\n\nEnter Your Choice: ");

scanf("%d",&ch);

switch(ch)

{

case 1: printf("\nEnter the item to be inserted : ");

scanf("%d",&item);

root=create(root,item);

break;

case 2: printf("\nPreorder Traversal: ");

preorder(root);

break;

case 3: printf("\nPostorder Traversal: ");

postorder(root);

break;

Page 48: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

case 4: printf("\nInorder Traversal: ");

inorder(root);

break;

case 5: exit(1);

default: printf("\nInvalid Choice");

}

printf("\n\nPress any key to continue....");

getch();

}

}

NODEPTR create(NODEPTR root, int item)

{

NODEPTR p;

if(root != NULL)

{

if(item < root->info)

root->left = create(root->left,item);

else

root->right = create(root->right,item);

return root;

}

else

{

p=(NODEPTR)malloc(sizeof(struct bst));

p->info=item;

p->left=p->right=NULL;

return p;

}

}

void preorder(NODEPTR root)

{

if(root!=NULL)

{

printf(" %d",root->info);

preorder(root->left);

preorder(root->right);

}

Page 49: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

}

void postorder(NODEPTR root)

{

if(root!=NULL)

{

postorder(root->left);

postorder(root->right);

printf(" %d",root->info);

}

}

void inorder(NODEPTR root)

{

if(root!=NULL)

{

inorder(root->left);

printf(" %d",root->info);

inorder(root->right);

}

}

Page 50: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

/* ALGORITHM FOR QUICK SORT*/

QUICK(A,N,LB,UB)

HERE A IS AN ARRAY OF N ELEMENT LB IS LOWER BOUND AND UB IS UPPER

BOUND ,

CHOOSE A ELEMENT P FROM SPECIFIC POSITION OF ARRAY LET P =A[0]

BY USING PARTITION FUNCTION WE WILL PARTITION ARRAY A SO THAT

ELEMENT A IS PLACED INTO POSITION J AND FOLLOWING CONDITION HOLDS

GOOD:

1. EACH OF THE ELEMENT IN POSITION 0 THROUGH J-1 IS LESS THAN OR

EQUAL TO P.

2. EACH OF THE ELEMENT IN POSITION J +1 THROUGH N-1 IS GREATER THAN

OR EQUAL TO P.

IF THE FORGOING PROCESS IS REPEATED WITH SUBARRAY A[0] AND A[J-1] AND

A[J+1] THROUGH A[N-1]

AND ANY SUBARRAY CREATED BY THE PROCESS IN SUCCESSIVE ITERATIONS

THE FINAL RESULT IS A SORTED FILE.

PARTITION(A,LB,UB)

THE OBJECT OF PARTITION IS TO ALLOW A SPECIFIC ELEMENT TO FIND ITS

PROPER POSITION WITH RESPECT TO OTHER IN THE SUBARRAY.

TWO POINTERS UP AND DOWN ARE INITIALIZED TO UPPER AND LOWER

BOUNDS OF SUBARRAY RESPECTIVELY

AT ANY POINT DURING EXECUTION EACH ELEMENT IN P POSITION ABOVE UP

IS GREATER THAN OR EQUAL TO P

AND EACH ELEMENT IN A POSITION BELOW DOWN IS LESS THAN OR EQUAL

TO A.THE TWO POINTERS UP AND DOWN

ARE MOVE TOWARDS EACH OTHER IN FOLLOWING FASHION.

STEP 1: REPEATEDLY INCREASE THE POINTER DOWN BY ONE POSITION UNTIL

A[DOWN]>A

STEP 2: REPEATEDLY DECREASE THE POINTER DOWN BY ONE POSITION UNTIL

A[UP]<=A

STEP 3: IF UP > DOWN INTERCHANGE A[DOWN] WITH A[UP].

THE PROCESS IS REPEATED UNTIL THE CONDITION IN STEP 3 FAILS AT WHICH

POINT A[UP] IS INTERCHANGED WITH A[LB],WHOSE FINAL POSITION WAS

SOUGHT AND J IS SET TO UP.

Page 51: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

C code for Quick Sort Algorithm

#include<stdio.h>

#include<conio.h>

void quick(int x[],int lb,int ub)

{

int j;

if(lb<ub) /* array is sorted*/

{

j=partition(x,lb,ub);

/* partition element of the subarray such that one of the elements

possibly x[lb]) is now at x[j](j is an output parameter) and :

1. x[i]<=x[j] for lb<=i<j

2. x[i]>=x[j] for j<i<=ub

x[j] is now at its final position*/

quick(x,lb,j-1);

/* recursively sort the subarray between position lb aND J-1*/

quick(x,j+1,ub);

/* recursively sort the subarray between position J+1 aND ub*/

}

}

int partition(int x[],int lb,int ub)

{

int a,down,temp,up;

a=x[lb]; /* a is the element whose final position is sougth */

up=ub;

down=lb;

while(down<up)

{

while(x[down]<=a)

down++; /* move up the array */

while(x[up]>a)

up--; /* move down the array */

if(down<up)

{

temp=x[down];

Page 52: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

x[down]=x[up];

x[up]=temp;

}

}

x[lb]=x[up];

x[up]=a;

return(up);

}

void main()

{

int n,i;

int x[100];

clrscr();

printf("\n Enter the number element");

scanf("%d",&n);

printf("\n Enter array element:");

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

scanf("%d",&x[i]);

quick(x,0,n-1);

printf("\n sorted array is:\n\n");

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

printf("%d",x[i]);

getch();

}

Page 53: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

HEAP SORT

Heap sort is simply an implementation of the general selection sort using the input array

'A' as a heap representing a descending priority queue.

ALGORITHM for HEAP SORT (Ascending Order)

Step 1 : /* Read the size of the array */

Read n.

Step 2 : /* Read array elements */

for i -> 0 to n-1

Read A[i].

Step 3 : /* Create Descending Heap using procedure pq_insert */

for i -> 1 to n-1

pq_insert(A,i,A[i]);

Step 4 : /* Re-arrange the elements in the Heap using procedure pq_maxdel */

for i -> n-1 to 1 by -1

A[i] <- pq_maxdel(A,i+1);

Step 5 : /* Display the sorted array as output */

for i -> 0 to n-1

Write A[i].

Step 6 : Stop.

ALGORITHM for the Procedure pq_insert

procedure pq_insert(A,k,ele)

Step 1 : /* Assign son node index */

s <- k.

Step 2 : /* Calculation of father node index */

f <- (s-1)/2

Step 3 : /* Find the proper position of the inserted element in the Heap */

While s > 0 and A[f] < ele repeat Step 4 thru Step 6

Step 4 : /* Shift down the father node to its sons position */

A[s] <- A[f]

Step 5 : /* Set new value for son node index */

s <- f

Step 6 : /* Calculate new father node index */

f <- (s-1)/2

Step 7 : /* Store the element in the Heap */

A[s] <- ele

Step 8 : Return.

Page 54: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

ALGORITHM for the Procedure pq_maxdel

procedure pq_maxdel(A,k+1)

Step 1 : /* Store root value in the Heap */

p <- A[0]

Step 2 : /* Call another procedure adjust to re-arrange Heap */

adjust(0,k-1);

Step 3 : /* Return the value */

Return p

ALGOTRITHM for the Procedure adjust

procedure adjust(root,k)

Step 1 : /* Store root value as father node index */

f <- root

Step 2 : /* Store the key value */

val <- A[k]

Step 3 : /* Calculate son node index using procedure largeson */

s <- largeson(f,k-1);

Step 4 : /* Re-arrange the Heap */

While s>=0 and val < A[s] repeat Step 5 thru Step Step 7

Step 5 : /* Change value in father node */

A[f] <- A[s]

Step 6 : /* Set new value for father node index */

f <- s

Step 7 : /* Calculate new son node index using procedure largeson */

s <- largeson(f,k-1)

Step 8 : /* Store the key value in Heap */

A[f] <- val

Step 9 : Return

Page 55: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

ALGORITHM for the Procedure largeson

procedure largeson(p,m)

Step 1 : /* Calculate son node index */

s <- 2*p+1

Step 2 : /* Find out largest son index of the current father node */

if s+1 <= m and A[s] < A[s+1] then

s <- s+1

Step 3 : /* Check for Adjusted Heap boundary */

if s > m then

Return -1

else

Retrun s

C – program for Heap Sort

#include<stdio.h>

#include<math.h>

int a[31];

void main()

{

register int i;

int n,y;

while(1)

{

clrscr();

printf("\nEnter the number of elements in the Array\t:\t");

scanf("%d",&n);

printf("\n\nEnter the elements in the Array\n");

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

scanf("%d",&a[i]);

clrscr();

printf("\nArray Before Sorting\n");

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

printf("%d ",a[i]);

for(i=1;i<n;i++)

pqins(i,a[i]);

printf("\n\nInitial Heap\n");

Page 56: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

display(n,10);

getch();

for(i=n-1,y=30;i>0;i--,y+=20)

{

a[i]=pqmaxdel(i+1);

if(y>=50)

{

clrscr();

y=10;

}

printf("\nHeap After a[%d]=pqmaxdel(%d)",i,i+1);

display(n,y);

getch();

}

printf("\n\nArray After Sorting\n");

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

printf("%d ",a[i]);

printf("\n\n\nDo You Want to Continue?(Y/N) :\t");

fflush(stdin);

if(toupper(getchar())!='Y')

break;

}

}

void pqins(int k,int elt)

{

int s,f;

s=k;

f=(s-1)/2;

while(s>0&&a[f]<elt)

{

a[s]=a[f];

s=f;

f=(s-1)/2;

}

a[s]=elt;

}

int pqmaxdel(int k)

{

Page 57: Data Structure Lab_MCA16-L

MCA 26 Data structure Lab Manual page 2 of 2

Dept. of M C A B M S College of Engineering, B’lore

int p;

p=a[0];

adjust(0,k-1);

return(p);

}

void adjust(int r,int k)

{

int f,s,key;

f=r;

key=a[k];

s=largeson(f,k-1);

while(s>=0&&a[s]>key)

{

a[f]=a[s];

f=s;

s=largeson(f,k-1);

}

a[f]=key;

}

int largeson(int p,int m)

{

int s;

s=2*p+1;

if(s+1<=m&&a[s]<a[s+1])

s=s+1;

if(s>m)

return -1;

return s;

}

void display(int n,int y)

{

int i,j,x,k,c=0;

for(i=0,k=40 ; ;i++,k/=2,y+=3)

for(j=0,x=k ;j<pow(2,i) ;j++,x+=80/pow(2,i))

{

gotoxy(x,y);

printf("%d",a[c++]);

if(c==n)

return; }