Skip to content

Commit 745a520

Browse files
authored
Merge pull request ephremdeme#68 from Vivekagent47/master
Add many problems and algos
2 parents 60a371b + e957e24 commit 745a520

13 files changed

+1042
-0
lines changed

Algorithms/tower_of_hanoi.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
// Function for Tower of Hanoi algorithm
5+
void hanoi(int noOfDisks,char where,char to,char extra){
6+
if(noOfDisks == 0 )
7+
{
8+
return;
9+
}
10+
else
11+
{
12+
hanoi(noOfDisks-1, where, extra , to);
13+
printf("Move disk : %d from %c to %c\n",noOfDisks,where,to);
14+
hanoi(noOfDisks-1,extra,to,where);
15+
}
16+
}
17+
int main(void){
18+
int noOfDisks;
19+
20+
//Asks the number of disks in the tower
21+
printf("Number of disks: \n");
22+
scanf("%d", &noOfDisks);
23+
24+
hanoi(noOfDisks,'A','B','C');
25+
26+
return 0;
27+
28+
}

Algorithms/tower_of_hanoi.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
def towerOfHanoi(n, where, to, extra):
2+
if n == 0:
3+
return
4+
else:
5+
towerOfHanoi(n-1, where, extra, to)
6+
print("Move disk :", n, "from", where, "to", to)
7+
towerOfHanoi(n-1, extra, to, where)
8+
9+
n = int(input("number of Disks : "))
10+
11+
print("Process of moving all disks form A to C is -")
12+
13+
towerOfHanoi(n, "A", "B", "C")

linked-list/doubly_linked_list.c

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#include<stdio.h>
2+
#include<stdlib.h>
3+
typedef struct node{
4+
int data;
5+
struct node *prev;
6+
struct node *next;
7+
}node;
8+
9+
node *createList(){
10+
node *head=NULL,*temp,*prev=NULL;
11+
int data,num;
12+
printf("Enter the number of nodes: ");
13+
scanf("%d",&num);
14+
while(num--){
15+
printf("Enter the data: ");
16+
scanf("%d",&data);
17+
node *newNode = (node *)malloc(sizeof(node));
18+
newNode->prev=NULL;
19+
newNode->next=NULL;
20+
newNode->data=data;
21+
if(!head){
22+
head = newNode;
23+
temp=head;
24+
}else{
25+
temp->next = newNode;
26+
newNode->prev=temp;
27+
temp=newNode;
28+
}
29+
}
30+
return head;
31+
}
32+
void displayList(node *head){
33+
node *temp = head;
34+
if(temp){
35+
printf("%d ",temp->data);
36+
displayList(temp->next);
37+
}
38+
}
39+
void insertNodeEnd(node *head){
40+
node *temp = head;
41+
int data;
42+
printf("Enter the data: ");
43+
scanf("%d",&data);
44+
while(temp->next){
45+
temp=temp->next;
46+
}
47+
node *newNode = (node *)malloc(sizeof(node));
48+
newNode->data=data;
49+
newNode->next=NULL;
50+
newNode->prev=temp;
51+
temp->next=newNode;
52+
}
53+
void insertNodeMid(node *head, int pos){
54+
node *temp = head;
55+
node *newNode = (node *)malloc(sizeof(node));
56+
int data;
57+
printf("Enter the data: ");
58+
scanf("%d",&data);
59+
newNode->data = data;
60+
pos-=2;
61+
while(pos--){
62+
temp=temp->next;
63+
}
64+
newNode->prev=temp;
65+
newNode->next=temp->next;
66+
temp->next=newNode;
67+
}
68+
69+
int main(){
70+
node *head=NULL;
71+
head = createList();
72+
displayList(head);
73+
printf("\n");
74+
//insertNodeEnd(head);
75+
insertNodeMid(head,4);
76+
displayList(head);
77+
printf("\n");
78+
return 0;
79+
}

linked-list/linked_list.c

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
//AN IMPROVED IMPLEMENTATION OF LINKED LISTS WITH SEPARATE FUNCTIONS FOR OPERATIONS//
2+
#include<stdio.h>
3+
#include<stdlib.h>
4+
struct node{
5+
int i;
6+
struct node *next;
7+
};
8+
struct node *insertNodeEnd(struct node*, int);
9+
struct node *insertNodeBeg(struct node*, int);
10+
struct node *insertAfter(struct node*, int,int);
11+
struct node *deleteNode(struct node*, int);
12+
struct node *reverseList(struct node *head);
13+
void displayList(struct node*);
14+
void deleteList(struct node*);
15+
16+
int main(){
17+
struct node* head = NULL; //HEADER FOR LIST
18+
int n,data;
19+
printf("Enter the number of nodes you want to create: ");
20+
scanf("%d",&n);
21+
while(n--){
22+
printf("Enter the data: ");
23+
scanf("%d",&data);
24+
head = insertNodeEnd(head,data);
25+
}
26+
//head = insertNodeBeg(head,100);
27+
//displayList(head);
28+
//head = insertAfter(head,3,89);
29+
displayList(head);
30+
//head = deleteNode(head,5);
31+
head = reverseList(head);
32+
displayList(head);
33+
deleteList(head);
34+
return 0;
35+
}
36+
37+
struct node *insertNodeEnd(struct node* head,int data){
38+
struct node* temp,p;
39+
temp = head;
40+
struct node* newNode = (struct node*)malloc(sizeof(struct node));
41+
newNode->i = data;
42+
newNode->next = NULL;
43+
if(head==NULL){
44+
head = newNode;
45+
}else{
46+
while(temp->next!=NULL){
47+
temp=temp->next;
48+
}
49+
temp->next = newNode;
50+
}
51+
return head;
52+
}
53+
struct node *insertNodeBeg(struct node *head, int data){
54+
struct node *newNode = (struct node *)malloc(sizeof(struct node));
55+
newNode->next = head;
56+
newNode->i = data;
57+
head = newNode;
58+
return head;
59+
}
60+
struct node *insertAfter(struct node *head, int pos, int data){
61+
struct node *newNode = (struct node *)malloc(sizeof(struct node));
62+
struct node *temp = head;
63+
newNode->i = data;
64+
int i =0;
65+
while(i<(pos-1)){
66+
temp = temp->next;
67+
i++;
68+
}
69+
newNode->next = temp->next;
70+
temp->next = newNode;
71+
return head;
72+
}
73+
void displayList(struct node* head){
74+
struct node* temp;
75+
temp = head;
76+
if(temp!=NULL){
77+
printf("%d -> ",temp->i);
78+
displayList(temp->next);
79+
}
80+
}
81+
void deleteList(struct node *head){
82+
struct node *temp;
83+
while(head->next!=NULL){
84+
temp = head;
85+
free(temp->next);
86+
head = head->next;
87+
}
88+
free(head->next);
89+
}
90+
struct node *deleteNode(struct node* head, int pos){
91+
struct node *temp = head;
92+
struct node *pp = NULL;
93+
////// IF 1st node is deleted
94+
if(pos==1){
95+
head = head->next;
96+
free(temp);
97+
}else{
98+
int i = 0;
99+
while(i<(pos-2)){
100+
temp=temp->next;
101+
i++;
102+
}
103+
if((temp->next)->next != NULL){
104+
pp = (temp->next)->next;
105+
free(temp->next);
106+
temp->next = pp;
107+
}else{
108+
free(temp->next);
109+
temp->next = NULL;
110+
}
111+
}
112+
return head;
113+
}
114+
struct node *reverseList(struct node *curr){
115+
struct node *prev = NULL, *nextNode = NULL;
116+
while(curr){
117+
nextNode = curr->next;
118+
curr->next = prev;
119+
prev = curr;
120+
curr = nextNode;
121+
}
122+
return prev;
123+
}

queue/circularQueue_using_Array.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#include<stdio.h>
2+
#define MAX 100
3+
int queue[MAX];
4+
int front=-1,rear=-1;
5+
void enqueue(int data){
6+
rear = (rear+1)%MAX;
7+
if(front==rear){
8+
printf("\nQUEUE OVERFLOW\n");
9+
if(rear==0)rear = MAX-1;
10+
elserear = rear-1;
11+
return;
12+
}
13+
if(front==-1)front=0;
14+
queue[rear]=data;
15+
}
16+
int dequeue(){
17+
if(front==-1){
18+
printf("\nQUEUE UNDERFLOW! NO ITEMS IN THE QUEUE\n");
19+
return -1;
20+
}
21+
int data = queue[front];
22+
if(front==rear){
23+
front=-1;
24+
rear=-1;
25+
}else{
26+
front = (front+1)%MAX;
27+
}
28+
return data;
29+
}
30+
void printQueue(){
31+
int temp = front;
32+
if(temp==-1){
33+
printf("\nLMAO! NOTHING TO DISPLAY\n");
34+
return;
35+
}
36+
if(rear>=temp){
37+
while(temp<=rear){
38+
printf("%d ",queue[temp]);
39+
++temp;
40+
}
41+
}else{
42+
if(temp>rear){
43+
while(temp<MAX){
44+
printf("%d ",queue[temp]);
45+
++temp;
46+
}
47+
temp=0;
48+
while(temp<=rear){
49+
printf("%d ",queue[temp]);
50+
++temp;
51+
}
52+
}
53+
}
54+
printf("\n");
55+
}
56+
int main(){
57+
int num,data;
58+
printf("How many items you want to add in the queue?");
59+
scanf("%d",&num);
60+
while(num--){
61+
printf("Enter the data: ");
62+
scanf("%d",&data);
63+
enqueue(data);
64+
}
65+
printQueue();
66+
data = dequeue();
67+
printf("\nData dequeued is: %d\n",data);
68+
printQueue();
69+
return 0;
70+
}

0 commit comments

Comments
 (0)