datastructures notes

25
Q) Session 10 a)Execute program to remove negative values from list of values by using queues Program: #include <stdio.h> #include <stdlib.h> #define MAX 10 int queue[MAX],f=-1,r=-1; void enq(); void deq(); void display(); void deletenegative(); main() { int n,i; printf("enter the number of elements"); scanf("%d",&n); for(i=1;i<=n;i++) enq(); display(); printf("\nAfter deleting negative values\n"); deletenegative(); display(); } void enq() { int val; if(r==MAX-1) { printf("Queue full"); return; } else if(f == -1 && r == -1) f=r=0; else r=r+1; printf("enter the data to be entered\n"); scanf("%d",&val);

Upload: sarvani-videla

Post on 14-Feb-2017

11 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: DataStructures notes

Q) Session 10 a)Execute program to remove negative values from list of values by using queues

Program:

#include <stdio.h>#include <stdlib.h>#define MAX 10int queue[MAX],f=-1,r=-1;void enq();void deq();void display();void deletenegative();main(){

int n,i;printf("enter the number of elements");scanf("%d",&n);for(i=1;i<=n;i++)

enq();display();printf("\nAfter deleting negative values\n");deletenegative();display();

}void enq(){

int val;if(r==MAX-1){

printf("Queue full");return;

}else if(f == -1 && r == -1)

f=r=0;else

r=r+1;printf("enter the data to be entered\n");scanf("%d",&val);queue[r]=val;}void deq(){

if(f==-1){

Page 2: DataStructures notes

printf("underflow");return;

}if(f ==r)

f=r=-1;else

f=f+1;}

void display(){int i;if(f ==-1)

printf("queue empty\n");else

{for(i=f; i<=r;i++)     printf("%d\t",queue[i]);

}}void move(int i){

for( ;i<r;i++)queue[i]=queue[i+1];

}void deletenegative(){

int i;if(f ==-1)

printf("queue empty\n");else{

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

if(queue[i] <0){

if(i==f){

deq();i=i+1;

}else{

Page 3: DataStructures notes

move(i);r=r-1;i=i-1;

}}else

i=i+1;}

}}

To see output... See my blog

http://enthusiaststudent.blogspot.in/2017/01/removing-negative-values-in-queues-c.html

Q) 10 bEnqueue, Dequeue and Display operations in Circular Queue using Arrays

#include <stdio.h>#include <stdlib.h>#define MAX 5int cqueue[MAX], front=-1, rear=-1;

void deq();void enq();void display();main(){

int n,i;printf("enter the number of elements");scanf("%d",&n);for(i=1;i<=n;i++)

enq();display();deq();display();

}void enq(){

int val;if((front == 0 && rear == MAX-1)||(front == rear+1)){

printf("Queue full");return;

}if(front == -1 && rear == -1)

front = rear = 0; else if(rear == MAX-1)

Page 4: DataStructures notes

rear== 0;else

rear=rear+1;printf("enter the data to be entered\n");scanf("%d",&val);cqueue[rear]=val;}void deq(){

if(front == -1 && rear == -1){

printf("queue is empty");return;

}printf("\ndeleted element=%d\n ",cqueue[front]);if(front == rear)

front = rear = -1;else if(front == MAX-1)

front = 0;else

front = front+1;}void display(){int i;

if(front == -1 && rear == -1{

printf(“queue is empty”);return;

}if(front <= rear){

for(i=front;i<=rear;i++)printf("%d\t",cqueue[i]);

}else{

for(i=front;i<MAX;i++)printf("%d\t",cqueue[i]);

for(i=0;i<=rear;i++)printf("%d\t",cqueue[i]);

}}Q11a) Implement Input Restricted and output Restricted DEQUEUE(Double ended Queue)#include <stdio.h>#include <stdlib.h>#define MAX 100/*DEQUEUE IS ALWAYS IMPLEMENTED USING CIRCULAR QUEUE*/int dequeue[MAX],front=-1,rear=-1;

Page 5: DataStructures notes

void deleteFront();//deq();void deleteRear();void insertFront();void insertRear(); //enq()void display();main(){

int opt1,opt2;while(1){printf("Press 1. Input Restricted 2. Output Restricted 3. display 4. exit\n");scanf("%d",&opt1);switch(opt1){

case 1: do{

printf("Press 1. insertRear 2. deleteFront 3. deleteRear 4. Display() 5. Back\n");

scanf("%d",&opt2);switch(opt2){

case 1: insertRear();break;

case 2: deleteFront();break;

case 3: deleteRear();break;

case 4: display();break;

}}while(opt2>=1 && opt2 <= 4);

break;case 2:

do{

printf("Press 1. deleteFront 2. insertRear 3. insertFront 4. Display 5. Back \n");

scanf("%d",&opt2);switch(opt2){

case 1: deleteFront();break;

case 2: insertRear();break;

case 3: insertFront();break;

case 4: display();break;

}

Page 6: DataStructures notes

}while(opt2>=1 && opt2 <= 4);break;

case 3: display();break;

case 4: exit(0);}

}}void insertRear() // enq(){

int val;if((front == 0 && rear == MAX-1)||(front == rear+1)){

printf("Queue full");return;

}if(front == -1 && rear == -1)

front = rear = 0; else if(rear == MAX-1)

rear== 0;else

rear=rear+1;printf("enter the data to be entered\n");scanf("%d",&val);dequeue[rear]=val;}void deleteFront() //deq(){

if(front == -1 && rear == -1){

printf("queue is empty");return;

}printf("\ndeleted element=%d\n ",dequeue[front]);if(front == rear)

front = rear = -1;else if(front == MAX-1)

front = 0;else

front = front+1;}

void insertFront(){

int val;if((front == 0 && rear == MAX-1)||(front == rear+1)){

printf("Queue full");return;

}

Page 7: DataStructures notes

if(front == -1 && rear == -1)front = rear = 0;

else if(front == 0) front = MAX-1;

elsefront=front-1;

printf("enter the data to be entered\n");scanf("%d",&val);dequeue[front]=val;}

void deleteRear(){

if(front == -1 && rear == -1){

printf("queue is empty");return;

}printf("\ndeleted element=%d\n ",dequeue[front]);if(front == rear)

front = rear = -1;else if(rear == 0)

rear = MAX-1;else

rear = rear-1;}void display(){int i;

if(front == -1 && rear == -1){

printf("queue is empty");return;

}if(front <= rear){

for(i=front;i<=rear;i++)printf("%d\t",dequeue[i]);

}else{

for(i=front;i<MAX;i++)printf("%d\t",dequeue[i]);

for(i=0;i<=rear;i++)printf("%d\t",dequeue[i]);

}}

Q) 12 Program to implement Ascending Priority queue

Page 8: DataStructures notes

#include<stdio.h>#include <stdlib.h>struct node{

int data,pri;struct node *next;

};struct node *head=NULL,*c,*p;void create();void display();void deleteMin();main(){

int n,i;printf("enter the number of elements");scanf("%d",&n);for(i=1;i<=n;i++)

create();display();deleteMin();printf("\n after deleting one element, the contents of apq are :\n");display();

} void create(){

int v,priority;printf("enter value and priority\n");scanf("%d%d",&v,&priority);struct node *newnode = (struct node *)malloc(sizeof(struct node));newnode->data =v;newnode->pri=priority;newnode->next = NULL;if(head == NULL)

head = newnode;else if( newnode->pri < head->pri){

newnode->next=head;head=newnode;

}else{

c=head;while(newnode->pri >= c->pri && c->next != NULL){

p=c;c=c->next;

}if(c->next == NULL && newnode->pri >= c->pri)

c->next=newnode;else

Page 9: DataStructures notes

{p->next = newnode;newnode->next=c;

}}

}void display(){

if(head == NULL)printf("list is empty");

else{

c=head;while(c != NULL){

printf("%d  %d->",c->data,c->pri);c=c->next;

}}

}

void deleteMin(){

/* delete the first node as the first node is minimum in ascending priority queue*/c=head;head=head->next;free(c);

}

Session -13 A) What is a recursive solution to summing up a list of numbers? First you should note that the sum of [2 13 4 25 66 71 82 91]) is equal to 2 + sum of [ 13 4 25 66 71 82 91]

#include <stdio.h>int sum(int *a,int index,int n){

if(index == n) return 0;

return(a[index]+sum(a,index+1,n));}main(){

int n,i,a[100]; printf("enter size of array\n"); scanf("%d",&n); for(i=0;i<n;i++)

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

Page 10: DataStructures notes

printf("array sum =%d",sum(a,0,n));}

Session -13b) . Write a recursive function called elfish? that, given a word, tells us if that word is elfish or not.

#include <stdio.h>int elfish(char *s,char *b, int i){

if(b[i]=='\0')return 1;

int k,flag=0;for(k=0;s[k]!='\0';k++){

if(s[k]==b[i]){

flag=1;break;

}

}if(flag == 1)

return elfish(s,b,i+1);else

return 0;}main(){

char s[100],b[4]="elf";int result;printf("enter the string\n");gets(s);result=elfish(s,b,0);if(result ==0)

printf("given string is not elfish");else

printf("given string is elfish");}Session -14a)Write a recursive function to Find the total number of sequences of length n (using H and T) such that no two Hs are next to each other.

#include <stdio.h>int total_seq(int n){

if(n == 1)return 2;

if(n ==2)return 3;

return(total_seq(n-1)+total_seq(n-2));

Page 11: DataStructures notes

}main(){

int n,i;printf("enter n value");scanf("%d",&n);printf("\n Total number of sequences = %d",total_seq(n));

}

Session 14 b) Given an array of positive numbers, find the maximum sum of a subsequence with the constraint that no 2 numbers in the sequence should be adjacent in the array.

#include<stdio.h>int excl,incl;/*Function to return max sum such that no two elements are adjacent */int FindMaxSum(int *a, int index, int n){  int temp;  if(index == n)    return incl;   else   {        temp=incl;    if(incl<(excl+a[index]))    incl=excl+a[index];    excl = temp;  return FindMaxSum(a,index+1,n);   } }main(){  int n, a[100],i; printf(“enter the number of elements\n”); scanf(“%d”, &n); printf(“enter array elements\n”); for(i=0;i<n;i++)

scanf(“%d”, &a[i]);  incl = a[0];  excl = 0;  printf("\nMaximum sum of non- adjacent elements= %d \n", FindMaxSum(a,1, n));  }

Session-15a)Infix to postfix conversion#include<stdio.h>#include <process.h>

Page 12: DataStructures notes

#define MAX 50char stack[MAX];int top=-1;int getpriority(char);void push(char);char pop();main(){

char infix[50],temp,ch,postfix[50];int i,j=0;printf("enter the infix expression\n");scanf("%s",&infix);for(i=0; infix[i] != '\0'; i++){

ch=infix[i]; if(ch == '(')

push(ch); else if(ch == ')') { while(stack[top]!='(') postfix[j++]=pop(); temp=pop();// popping the ( } else if(isalnum(ch)) postfix[j++]=ch; else { while(getpriority(stack[top])>=getpriority(ch))

postfix[j++]=pop(); push(ch);

}}while(top != -1)

postfix[j++]=pop();postfix[j]='\0';puts(postfix);

}int getpriority(char ch){ if( ch == '*'|| ch == '/'|| ch == '%') return 2; else if(ch == '+' || ch == '-') return 1; else return 0;}void push(char item){ if(top == MAX-1) {

Page 13: DataStructures notes

printf("stack is full"); return; } top=top+1; stack[top]=item;}

char pop(){ if(top == -1) { printf("stack empty"); return; } char temp; temp=stack[top]; top=top-1; return temp;}

Evaluating PostFix expression#include<stdio.h>#include <process.h>#include <string.h>#define MAX 50char stack[MAX];int top=-1;void push(float);float pop();void main(){char exp[MAX],temp,ch;int i;float op1,op2,value;printf("Enter an expression : ");gets(exp);for(i=0;i<strlen(exp);i++){

ch=exp[i];if(isdigit(ch))

push((float)ch-'0');else{

op2=pop();op1=pop();switch(ch)

Page 14: DataStructures notes

{case '+':

value=op1+op2;break;

case '-':value=op1-op2;break;

case '*':value=op1*op2;break;

case '/':value=op1/op2;break;

case '%':value=(int)op1%(int)op2;break;

}push(value);}

}printf("\n Result=%f",pop());}

void push(float item){

if(top == MAX-1){

printf("stack is full");return;

}top=top+1;stack[top]=item;

}

float pop(){

if(top == -1){

printf("stack empty");return;

}float temp;temp=stack[top];top=top-1;

Page 15: DataStructures notes

return temp;}

15b) symbol Balancing Using Stacks#include<stdio.h>#include <process.h>#include <string.h>#define MAX 50char stack[MAX];int top=-1;void push(char);char pop();void main(){

char exp[MAX],temp; int i, flag=1;printf("Enter an expression : ");gets(exp);for(i=0;i<strlen(exp);i++){

if(exp[i]=='(' || exp[i]=='{' || exp[i]=='[') push(exp[i]);

if(exp[i]==')' || exp[i]=='}' || exp[i]==']')if(top == -1){

flag=0; break;}else{

temp=pop();if(exp[i]==')' && (temp=='{' || temp=='['))

flag=0;if(exp[i]=='}' && (temp=='(' || temp=='['))

flag=0;if(exp[i]==']' && (temp=='(' || temp=='{'))

flag=0;}

}if(top>=0) flag=0;if(flag==1)

printf("\n Valid expression");else

printf("\n Invalid expression");

Page 16: DataStructures notes

}void push(char item){

if(top == MAX-1) {

printf("stack is full"); return;

} top=top+1; stack[top]=item;

}

char pop(){

if(top == -1) {

printf("stack empty"); return;

} char temp; temp=stack[top]; top=top-1; return temp;

}17a) Use Queue data structure to print binary numbers from 1 to n.

1) Create an empty queue of strings2) Enqueue the first binary number “1” to queue.3) Now run a loop for generating and printing n Binary Numbers.

a) Dequeue and Print the front of queue.b) Append “0” at the end of front item and enqueue it.c) Append “1” at the end of front item and enqueue it.

Input: n=5Output: 1,10,11,100,101#include <stdio.h>#include <string.h>#define MAX 20char queue[MAX][MAX],temp[MAX];int front=-1, rear=-1;void enq(char *s){

if(rear == MAX-1){

printf("Queye full");return;

}if(front == -1 && rear == -1)

front=rear=0;else

rear=rear+1;strcpy(queue[rear],s);

}char* deq()

Page 17: DataStructures notes

{if(front == -1)

printf("stack is empty");else{

strcpy(temp,queue[front]);if(front == rear)

front = rear = -1;else

front=front+1;return temp;

}}void bin(){

char temp2[MAX];strcpy(temp,deq());printf("Binary numbers = %s\n",temp);strcpy(temp2,temp);strcat(temp,"0");enq(temp);strcat(temp2,"1");enq(temp2);

}main(){

int i;char temp[2]="1";enq(temp);for(i=1;i<=5;i++)

bin();

}18a) Implementing Stacks using linked list#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};struct node *top=NULL,*c,*p;void push();void pop();void display();main(){ int opt; while(1) { printf("\nPress 1. Push\t 2. Pop\t3. Display \t4. Exit \n");

scanf("%d",&opt);switch(opt){

case 1: push();break;

case 2: pop();break;

case 3: display();break;

case 4: exit(0);}

Page 18: DataStructures notes

} }void push(){ int val; printf("\nenter a value to insert into stack\n"); scanf("%d",&val); struct node * newnode=malloc(sizeof(struct node)); newnode->data=val; newnode->next = NULL; if(top == NULL) top = newnode; else

{ newnode->next=top;

top=newnode; }}void pop(){

if(top == NULL) {

printf("\n Stack is EMPTY..Deletion is not possible"); return;

} printf("\n Deleted element = %d\n",top->data);

c=top; top=top->next; free(c);

}void display(){

if(top == NULL) {

printf("stack is empty"); return;

} else {

for(c=top;c!=NULL;c=c->next) printf("%d\t",c->data);

}

}

18b) Implementing Queues using Linked List#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};struct node *f=NULL,*r = NULL,*c;void enq();void deq();void display();main()

Page 19: DataStructures notes

{ int opt; while(1) { printf("\n Press 1. Enq\t 2. Deq\t 3. Display \t 4. Exit\n"); scanf("%d",&opt); switch(opt) { case 1: enq(); break; case 2: deq(); break; case 3: display(); break; case 4: exit(0); } }} void enq(){ int val;

printf("enter value to be enqueued\n");scanf("%d",&val);struct node *newnode = (struct node *)malloc(sizeof(struct node));newnode->data=val;newnode->next=NULL; if(f == NULL && r == NULL)

f=r=newnode; else {

r->next=newnode; r= newnode;

}}

void deq(){ if(f == NULL && r == NULL)

{ printf("queue is empty"); return;

}if(f == r) f = r = NULL;else {

c=f; f=f->next; free(c);

}}

void display(){

if(f == NULL && r == NULL) {

printf("queue is empty"); return;

} else

Page 20: DataStructures notes

{ c=f; while(c != NULL) {

printf("%d\t",c->data); c=c->next;

} }

}

Applications of Stack:Reversing a listParentheses checkerConversion of an infix expression into a postfix expressionEvaluation of a postfix expressionConversion of an infix expression into a prefix expressionEvaluation of a prefix expressionRecursionTower of Hanoi

Applications of Queue:

Operating systems often maintain a queue of processes that are ready to execute or that are waiting for a particular event to occur.

Computer systems must often provide a “holding area” for messages between two processes, two programs, or even two systems. This holding area is usually called a “buffer” and is often implemented as a queue.

.In real life, Call Center phone systems will use Queues, to hold people calling them in an order, until a service representative is free. We wait in queues to buy pizza, to enter movie theaters etc, queue data structure help us simulate and analyze such real world queues.

Handling of interrupts in real-time systems. The interrupts are handled in the same order as they arrive, First come first served.

Q)Addition of Two polynomials using linked list algorithm

Let p and q be the two polynomials represented by the linked list.1. while p and q are not null, repeat step 2.2. If exponents of the two terms are equalthen if the terms do not cancel then insert the sum of the terms into the sum PolynomialAdvance pAdvance qElse if the exponent of the first polynomial> exponent of secondThen insert the term from first polynomial into sum polynomialAdvance pElse insert the term from second polynomial into sum polynomialAdvance q3. copy the remaining terms from the non empty polynomial into thesum polynomial.