* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download File
Survey
Document related concepts
Transcript
DATA STRUCTURE LAB (ETCS 257) Faculty Name: Deepak Gupta Student Name: Vikash Kr.Das Roll No.: 05396402812 Semester: 3rd Batch : E-7 Department of Electronics & Communication Engineering (ECE) Maharaja Agrasen Institute of technology Maharaja Agrasen Chowk, Sector – 22, Rohini, New Delhi – 110086 VKD DATA STRUCTURE PRACTICAL RECORD PAPER CODE : ETCS257 Name of the student : VIKASH KUMAR DAS University Roll No. : 05396402812 Branch : ECE Section/ Group : E-7 PRACTICAL DETAILS Exp. no Experiment Name Date of performance Date of checking Remarks Marks (10) VKD EXPERIMENT NO. 01 AIM: To implement traversal, insertion, deletion in a linear array. ALGORITHM: TRAVERSAL: This algorithm traverses a linear array A with lower bound 0 and upper bound 9. It traverses A searching the desired number NUMB. Step 1: Repeat for I=0 to 9 Apply search operation for A[I]==NUMB. End of loop. Step 2: Exit. INSERTION: In this A is a linear array with 10 elements and NUMB is any number and POS is the potion at which the NUMB is to be inserted. Step 1: Set I=10. [Initialize counter.] Step 2: Repeat steps 3 and 4 while I>=POS. Step 3: Set A[I+1]=A[I]. [Move Jth element downwards.] Step 4: Set I=I-1. [Decrease counter.] Step 5: Set A[POS]=NUMB. [Insert element.] Step 6: Set 10 to 11. [Reset number of elements.] Step 7: Exit. DELETION: In this A is a linear array with 10 elements and NUMB is any number and this deletes the NUMB number from the array A. Step 1: Repeat for I=0 to 9 Apply search operation for A[I]==NUMB. End of loop. Step 2: Repeat for I=POS to 8 Set A[I]=A[I+1] [Move Ith element upwards.] End of loop Step 3: Set 9 to 8. [Reset number of elements.] Step 4: Exit. VKD PROGRAM CODE: #include<iostream.h> #include<conio.h> void main () { clrscr(); int a[20],numb,pos,x,flag=0; cout<<"Enter 10 numbers: "<<endl; for(int i=0;i<10;i++) {cin>>a[i];} cout<<"1-TRAVERSE"<<endl; cout<<"2-INSERION"<<endl; cout<<"3-DELETION"<<endl; cin>>x; if(x==1) {cout<<"Enter number to be searched: "<<endl; cin>>numb; for(i=0;i<=10;i++) {if(a[i]==numb) {pos=i; cout<<"The position of th enumber is: "<<pos+1; flag++: } } if(flag==0) {cout<<"Number not in the series.";} } else if (x==2) {cout<<"Enter the number to insert: "<<endl; cin>>numb; cout<<"Enter the position at which you want to insert: "<<endl; cin>>pos; for(int i=10;i>pos-1;i--) {a[i]=a[i-1];} a[pos-1]=numb; cout<<"The new Array is: "<<endl; for(int j=0;j<11;j++) VKD {cout<<a[j]<<endl;} } else if (x==3) {cout<<"Enter the number to delete: "<<endl; cin>>numb; for(int i=0;i<10;i++) {if(a[i]==numb) {for(int j=i;j<10;j++) {a[j]=a[j+1];} } } cout<<"the new array is: "<<endl; for(int j=0;j<9;j++) {cout<<a[j]<<endl;} } getch(); } OUTPUT: VKD VKD EXPERIMENT NO. 02 AIM: To implement Stacks using arrays. ALGORITHM: PUSH OPERATION: Step 1: {Check for stack overflow} If TOS>=Size-1 Output ”Stack Overflow” Step 2: {Increment the counter value by one} TOS=TOS+1 Step 3: {Perform Insertion} a[TOS]=value Step 4: Exit. POP OPERATION: Step 1: {Check whether the stack is empty} If TOS=0 Output “Stack Underflow” Step 2: {Pop the TOS value} value=a[TOS} TOS=TOS-1 Step 3: {Print the top most value of the stack} Return (value) Step 4: Exit. VKD PROGRAM CODE: #include<iostream.h> #include<conio.h> #include<process.h> void main() { clrscr(); int TOS=0,i,a[5],value,ch; cout<<endl<<"Enter the operation you ant to perform"; cout<<endl<<"1:Push"<<endl<<"2:Pop"<<endl<<"3:Exit"<<endl; cin>>ch; do {if(ch==1) {if(TOS>4) {cout<<"Stack overflow";} else { cout<<endl<<"Enter the element you want to insert: "; cin>>value; TOS=TOS+1; a[TOS]=value; } cout<<endl<<"Enter "<<endl<<"1:Push"<<endl<<"2:Pop"<<endl<<"3:Exit"<<endl; cin>>ch; } if(ch==2) {cout<<endl<<"The top most element is: "<<endl; if(TOS==-1) {cout<<"Stack Underflow"<<endl;} else {value= a[TOS]; TOS=TOS-1; cout<<value<<endl; } cout<<endl<<"Enter "<<endl<<"1:Push"<<endl<<"2:Pop"<<endl<<"3:Exit"<<endl; cin>>ch; } VKD if(ch==3) {exit(0);} }while(ch==1 || ch==2); } OUTPUT: VKD EXPERIMENT NO. 03 AIM: To implement Linear and Circular Queue using arrays. ALGORITHM: Linear Queue: Inserting an element to linear Queue Step 1: If FRONT =1 and REAR=N or if FRONT=REAR+1 then : Print : Overflow and return Step 2: IF FRONT = NULL then Set FRONT =1 and REAR =1 Else If REAR =N then Set REAR = 1 Else Set REAR =REAR +1 Step 3: Set QUEUE[REAR]=ITEM Step 4: RETURN Deleting an element from a linear queue Step 1: If FRONT =NULL then : Print : Underflowflow and return Step 2: Set ITEM = QUEUE[FRONT] Step 3: IF FRONT = REAR then Set FRONT =0 and REAR =0 Else If FRONT =N then Set FRONT = 1 Else Set FRONT =FRONT +1 Step 4: RETURN VKD PROGRAM CODE: Linear Queue: #include<iostream.h> #include<conio.h> #include<process.h> #define MAX 50 int queue[50],rear=-1,front=-1,item; void insert() {if(rear==MAX-1) {cout<<"Queue is full.";} else {cout<<endl<<"Enter item: "; cin>>item; if(rear==-1 && front==-1) {rear=0; front=0; } else {rear++;} queue[rear]=item; cout<<"Item inserted: "<<item<<endl<<endl; } } void del() {if(front==-1) {cout<<endl<<"Queue is empty.";} else {item=queue[front]; if(front==rear) {front=-1; rear=-1; } else {front++;} cout<<"Item deleted: "<<item<<endl<<endl; } } VKD void display() {int i; if(front==-1) {cout<<endl<<"Queue is empty.";} else {cout<<endl; for(i=front;i<=rear;i++) {cout<<" "<<queue[i];} } cout<<endl; } void main() {clrscr(); int ch; do {cout<<endl<<"1=Insert"<<endl<<"2=Delete"<<endl<<"3=Display"<<e ndl<<"4=Exit"<<endl<<"Choice: "; cin>>ch; switch(ch) {case 1:insert(); break; case 2:del(); break; case 3:display(); break; case 4:exit(0); default:cout<<endl<<"Invalid entry."<<endl; } }while(1); } VKD OUTPUT: Linear Queue: VKD EXPERIMNET NO. 04 AIM: To implement Linear and Circular Queue using arrays. ALGORITHM: Circular Queue: Inserting an element to circular Queue Step 1: Initialize FRONT = – 1; REAR = 1 Step 2: REAR = (REAR + 1) % SIZE Step 3: If (FRONT is equal to REAR) (a) Display “Queue is full” (b) Exit Step 4: Else (a) Input the value to be inserted and assign to variable “DATA” Step 5: If (FRONT is equal to – 1) (a) FRONT = 0 (b) REAR = 0 Step 6: Q[REAR] = DATA Step 7: Repeat steps 2 to 5 if we want to insert more elements Step 8: Exit Deleting an element from a circular queue Step 1: If (FRONT is equal to – 1) (a) Display “Queue is empty” (b) Exit Step 2: Else (a) DATA = Q[FRONT] Step 3: If (REAR is equal to FRONT) (a) FRONT = –1 (b) REAR = –1 Step 4: Else (a) FRONT = (FRONT +1) % SIZE Step 5: Repeat the steps 1, 2 and 3 if we want to delete more elements Step 6: Exit VKD PROGRAM CODE: Circular Queue: #include<iostream.h> #include<conio.h> #include<process.h> #define SIZE 5 int queue[SIZE],rear=-1,front=-1,item; void insert() {if((front==0 && rear==SIZE-1) || (front==rear+1)) {cout<<endl<<"Queue is full.";} else {cout<<endl<<"Enter item: "; cin>>item; if(rear==-1) {rear=0; front=0; } else if(rear==SIZE-1) {rear=0;} else {rear++;} queue[rear]=item; cout<<"Item Inserted: "<<item<<endl<<endl; } } void del() {if(front==-1) {cout<<endl<<"Queue is empty.";} else {item=queue[front]; if(front==rear) {front=-1; rear=-1; } else if(front==SIZE-1) {front=0;} else VKD {front++;} cout<<endl<<"Item Deleted: "<<item<<endl<<endl; } } void display() {int i; if((front==-1) || (front==rear+1)) {cout<<"Queue is empty.";} else {cout<<endl; for(i=front;i<=rear;i++) {cout<<" "<<queue[i];} } cout<<endl; } void main() {clrscr(); int ch; do {cout<<endl<<"1=Insert"<<endl<<"2=Delete"<<endl<<"3=Display"<<e ndl<<"4=Exit"<<endl<<"Choice: "; cin>>ch; switch(ch) {case 1:insert(); break; case 2:del(); break; case 3:display(); break; case 4:exit(0); default:cout<<endl<<"Invalid entry."<<endl; } }while(1); } VKD OUTPUT: Circular Queue: VKD EXPERIMENT NO. 05 AIM: To perform linear or binary search as per the users choice. ALGORITHM: LINEAR SEARCH: Step 1: For each item in the list Check if value matches any item in the array. Step 2: If it matches. Return its index. Step 3: If it does not match. Continue searching until the end of the array. Step 4: Exit. BINARY SEARCH: While (beg<= end) Step 1: mid=(beg+end)/2 Step 2: if x==a[mid] Return mid Step 3: else if x>a[mid] beg=mid+1 Step 4: else end=mid-1 Step 5: Return x not found in the array. Step 6: Exit. VKD PROGRAM CODE: #include<iostream.h> #include<conio.h> class Search { public: int a[10],x,y,flag,i,j,temp; void getdata(); void linear(int x); void sort(int a[]); void binary(int x); }; void Search::getdata() {cout<<"Enter 10 numbers: "<<endl; for(i=0;i<10;i++) {cin>>a[i];} cout<<endl<<"Enter the number to be searched: "<<endl; cin>>x; cout<<endl<<"Select any one:"<<endl<<"1-Linear Search"<<endl<<"2Binary Search"<<endl; cin>>y; if(y==1) {linear(x);} else if(y==2) {sort(a); binary(x);} else {cout<<"Invalid choice.";} } void Search::linear(int x) {flag=0; for(int i=0;i<10;i++) {if(a[i]==x) {cout<<"The element exists at position: "<<i+1; flag++; break; } VKD } if(flag==0) {cout<<"The element doesnt exist.";} } void Search::sort(int a[]) {for(i=0;i<10;i++) {for(j=0;j<10;j++) {if(a[i]<a[j]) {temp=a[i]; a[i]=a[j]; a[j]=temp; } } } cout<<endl<<"The sorted array is: "<<endl; for(i=0;i<10;i++) {cout<<a[i]<<endl;} } void Search::binary(int x) {flag=0; int beg=0,last=10,mid; while(beg<=last) {mid=(beg+last)/2; if(x==a[mid]) {flag++; cout<<"The element exists at position: "<<mid+1; break;} else if (x>a[mid]) {beg=mid;} else {last=mid-1;} } if(flag==0) {cout<<"The element doesnt exist.";} } void main() { clrscr(); Search s; s.getdata(); getch(); VKD OUTPUT: VKD EXPERIMENT NO. 06 AIM: To perform various operations on a singly linked list. ALGORITHM: INSERTION OF A NODE: A) AT THE BEGINNING OF A LINKED LIST Step 1: {Check for free space} If new = NULL output “OVERFLOW” and exit. Step 2: {Allocate free space} New=new Link Step 3: {Read value of information part of a new node} Info[New]= Value Step 4: {Link address part of the currently created node with the address of start} Next[Next]=Start Step 5: {Now assign address of newly created node to the start} Start=New Step 6: Exit. B) AT THE END OF A LINKED LIST Step 1: {Check for free space} If new = NULL output “OVERFLOW” and exit. Step 2: {Allocate free space} New=new Link Step 3: {Read value of information part of a new node} Info[New]= Value Step 4: {Move the pointer to the end of the list} Repeat while Node<>NULL Node=Next[Node] Previous=Next[Previous] Step 5: {Link currently created node with the last node of the list} Next[New]=Node Next[Previous]=New Step 6: Exit. C) AT A DESIRED PLACE,WHEN NODE NUMBER IS KNOWN Step 1: {Check for free space} If new = NULL output “OVERFLOW” and exit. Step 2: {Initializaton} Node_number=0 Node=Start.Next[Points to first node of the list] Previous=Address of Start[Assign address of start to previous] Step 3: {Read node number that we want to insert} Input Insert_node Step 4: {Perform insertion operation} Repeat through Step 5 while NODE<>NULL Step 5: {Check if Insert_node is equal to the Node_number} If Node_number+1=Insert_node Next[New]=Node VKD Previous->Next=New Info[New]=Value Return Else {Move the pointer forward} Node=Next[Node] Previous=Next[Previous] Node_number=Node_number+1 Step 6: Exit. DELETION OF A NODE: A) FROM THE BEGINNING OF A LINKED LIST Step 1: {Initialization} Node=start.Next{Points to the first node in the list} Previous=assign address of start. Step 2: {Perform deletion operation } If node=NULL Output “UNDERFLOW” and exit. Else {Delete first node} Next[Previous]=Next[Node] {Move pointer to next node in the list} Free the space associated with Node Step 3: Exit. B) FROM THE END OF A LINKED LIST Step 1: {Initialization} Node=start.Next {Points to the first node in the list} Previous=assign address of start Node_number=0 Step 2: {Check list is empty or not} If node=NULL Output “UNDERFLOW” and exit. Step 3: {Scan the list to count the number of node in the list} Repeat while node<>NULL Node=Next[Node] Previous=next[Previous] Node_number=Node_number+1 Step 4: {Initialization once again} Node=start.Next Previous=Assign address of start Step 5: {Scan list for 1 less to size of the list} Repeat while Node_Number<>1 Node=next [Node] Previous=next [Node] Node_number=Node_number-1 Step 6: {Check if last node is arising} If node_number=1 Next[Previous]=Next[Node] Free(node) Step7: Exit. VKD PROGRAM CODE: #include<iostream.h> #include<conio.h> #include<process.h> struct node { int info; node *next, *prev; }; node *temp,*prev,*start=NULL,*ptr; void main() { clrscr(); int ch,item,i,loc; char wish; do {cout<<"\n MENU"; cout<<"\n 1.Insertion Of Node At Beginning"; cout<<"\n 2.Insertion Of Node At Specific Position"; cout<<"\n 3.Deletion Of Node From Beginning"; cout<<"\n 4.Traversal"; cout<<"\n 5.Exit"; cout<<"\n\n Enter Your Choice : "; cin>>ch; switch(ch) {case 1: ptr=new node; if(ptr==NULL) {cout<<"\n OVERFLOW";} else {cout<<"\n Enter the element to be inserted : "; cin>>item; ptr->info=item; if(start==NULL) {ptr->prev=NULL; ptr->next=NULL; start=ptr; } else {ptr->prev=NULL; ptr->next=start; start=ptr; } } break; VKD case 2: ptr=new node; if(ptr==NULL) {cout<<"\n OVERFLOW";} else {cout<<"\n Enter the element to be inserted : "; cin>>item; ptr->info=item; if(start==NULL) {ptr->prev=NULL; ptr->next=NULL; start=ptr; } else {i=1; cout<<"\n Enter the location where the element is to be inserted in the list: "; cin>>loc; temp=start; while(i<loc-1) {temp=temp->next; i++; } ptr->next=temp->next; ptr->prev=temp; temp->next=ptr; } } break; case 3: if(start==NULL) cout<<"\n UNDERFLOW"; else {ptr=start; if(start->next==NULL) {start=NULL; cout<<"\n "<<ptr->info<<" IS DELETED "; delete ptr; } else {start=start->next; start->prev=NULL; cout<<"\n "<<ptr->info<<" IS DELETED FROM THE BEGINNING"; delete ptr; } } break; case 4: if(start==NULL) VKD {cout<<"\nTHE LIST CONTAINS NO ELEMENT";} else {cout<<"\nTHE ELEMENTS OF THE LIST : "; ptr=start; while(ptr!=NULL) {cout<<" "<<ptr->info; ptr=ptr->next; } } break; case 5: exit(0); break; default:cout<<"\n\n\t WRONG CHOICE ENTERED "; } cout<<"\n\t Do you wish to continue......(y/n) "; cin>>wish; }while(wish=='y' || wish=='Y'); getch(); } VKD OUTPUT SCREEN: VKD VKD