mirror of
https://github.com/Manoj-HV30/ds-lab-codes.git
synced 2026-05-16 19:35:22 +00:00
init
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct {
|
||||
int *keys;
|
||||
int size;
|
||||
int front;
|
||||
int rear;
|
||||
|
||||
} cq;
|
||||
|
||||
cq *createqueue(int size) {
|
||||
cq *q = (cq *)malloc(sizeof(cq));
|
||||
q->size = size;
|
||||
q->front = -1;
|
||||
q->rear = -1;
|
||||
q->keys = (int *)malloc(size * sizeof(int));
|
||||
return q;
|
||||
}
|
||||
|
||||
bool isFull(cq *q) { return ((q->rear + 1) % q->size == q->front); }
|
||||
bool isEmpty(cq *q) { return q->front == -1; }
|
||||
|
||||
void enqueue(cq *q, int v) {
|
||||
if (isFull(q)) {
|
||||
printf("is full");
|
||||
}
|
||||
if (isEmpty(q)) {
|
||||
q->front = 0;
|
||||
q->rear = 0;
|
||||
} else {
|
||||
q->rear = (q->rear + 1) % q->size;
|
||||
}
|
||||
q->keys[q->rear] = v;
|
||||
}
|
||||
|
||||
int dequeue(cq *q) {
|
||||
if (isEmpty(q)) {
|
||||
printf("Queue is empty! Cannot delete.\n");
|
||||
return -1;
|
||||
}
|
||||
int v = q->keys[q->front];
|
||||
if (q->front == q->rear) {
|
||||
q->front = q->rear = -1;
|
||||
|
||||
} else {
|
||||
q->front = (q->front + 1) % q->size;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void display(cq *q) {
|
||||
if (isEmpty(q)) {
|
||||
printf("Queue is empty!\n");
|
||||
return;
|
||||
}
|
||||
int i = q->front;
|
||||
while (1) {
|
||||
printf("%d", q->keys[i]);
|
||||
if (i == q->rear) {
|
||||
break;
|
||||
}
|
||||
i = (i + 1) % q->size;
|
||||
}
|
||||
}
|
||||
int main() {
|
||||
int n;
|
||||
printf("Enter size of queue: ");
|
||||
scanf("%d", &n);
|
||||
|
||||
cq *q = createqueue(n);
|
||||
|
||||
enqueue(q, 10);
|
||||
enqueue(q, 20);
|
||||
enqueue(q, 30);
|
||||
display(q);
|
||||
|
||||
dequeue(q);
|
||||
display(q);
|
||||
|
||||
enqueue(q, 40);
|
||||
enqueue(q, 50);
|
||||
display(q);
|
||||
|
||||
dequeue(q);
|
||||
display(q);
|
||||
|
||||
free(q->keys);
|
||||
free(q);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct Node {
|
||||
int data;
|
||||
struct Node *ptr;
|
||||
};
|
||||
|
||||
struct Node *top = NULL;
|
||||
|
||||
void push(int v) {
|
||||
struct Node *new = (struct Node *)malloc(sizeof(struct Node));
|
||||
new->data = v;
|
||||
new->ptr = top;
|
||||
top = new;
|
||||
}
|
||||
|
||||
int pop() {
|
||||
struct Node *temp = top;
|
||||
int v = temp->data;
|
||||
top = temp->ptr;
|
||||
|
||||
free(temp);
|
||||
return v;
|
||||
}
|
||||
int peek() {
|
||||
if (top == NULL) {
|
||||
printf("Stack empty\n");
|
||||
return -1;
|
||||
}
|
||||
return top->data;
|
||||
}
|
||||
|
||||
void display() {
|
||||
struct Node *temp = top;
|
||||
printf("Stack: ");
|
||||
while (temp != NULL) {
|
||||
printf("%d ", temp->data);
|
||||
temp = temp->ptr;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
int main() {
|
||||
push(10);
|
||||
push(20);
|
||||
push(30);
|
||||
display();
|
||||
|
||||
printf("Popped: %d\n", pop());
|
||||
display();
|
||||
|
||||
printf("Top: %d\n", peek());
|
||||
}
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct Node {
|
||||
struct Node *ptr;
|
||||
int data;
|
||||
};
|
||||
|
||||
struct Node *head = NULL;
|
||||
|
||||
struct Node *createNode(int v) {
|
||||
struct Node *new = (struct Node *)malloc(sizeof(struct Node));
|
||||
new->data = v;
|
||||
new->ptr = NULL;
|
||||
return new;
|
||||
}
|
||||
|
||||
void insertend(int v, struct Node *new) {
|
||||
if (head == NULL) {
|
||||
head = new;
|
||||
return;
|
||||
}
|
||||
struct Node *temp = head;
|
||||
while (temp->ptr != NULL) {
|
||||
temp = temp->ptr;
|
||||
}
|
||||
temp->ptr = new;
|
||||
new->ptr = NULL;
|
||||
}
|
||||
|
||||
void insertstart(int v, struct Node *new) {
|
||||
struct Node *temp = head;
|
||||
head = new;
|
||||
new->ptr = temp;
|
||||
}
|
||||
|
||||
void insert(int v, struct Node *new, int x) {
|
||||
struct Node *temp = head;
|
||||
int w = 0;
|
||||
while (temp->ptr != NULL && w < x) {
|
||||
temp = temp->ptr;
|
||||
w++;
|
||||
}
|
||||
struct Node *temp2 = temp->ptr;
|
||||
temp->ptr = new;
|
||||
new->ptr = temp2;
|
||||
}
|
||||
void display() {
|
||||
struct Node *temp = head;
|
||||
while (temp != NULL) {
|
||||
printf("%d \n", temp->data);
|
||||
temp = temp->ptr;
|
||||
}
|
||||
}
|
||||
void deletestart() {
|
||||
if (head == NULL) {
|
||||
printf("list empty");
|
||||
return;
|
||||
}
|
||||
struct Node *temp = head;
|
||||
|
||||
head = temp->ptr;
|
||||
free(temp);
|
||||
}
|
||||
void deletelast() {
|
||||
if (head == NULL) {
|
||||
printf("list empty");
|
||||
return;
|
||||
} else {
|
||||
struct Node *temp = head;
|
||||
struct Node *prev = NULL;
|
||||
while (temp->ptr != NULL) {
|
||||
prev = temp;
|
||||
temp = temp->ptr;
|
||||
}
|
||||
prev->ptr = NULL;
|
||||
free(temp);
|
||||
}
|
||||
}
|
||||
|
||||
void deletex(int x) {
|
||||
if (head == NULL) {
|
||||
printf("list empty");
|
||||
return;
|
||||
} else {
|
||||
struct Node *temp = head;
|
||||
struct Node *prev = NULL;
|
||||
int k = 0;
|
||||
while (temp->ptr != NULL && k < x - 1) {
|
||||
prev = temp;
|
||||
temp = temp->ptr;
|
||||
k++;
|
||||
}
|
||||
// If x is beyond the last node
|
||||
if (temp == NULL) {
|
||||
printf("Position %d not found\n", x);
|
||||
return;
|
||||
}
|
||||
prev->ptr = temp->ptr;
|
||||
free(temp);
|
||||
}
|
||||
}
|
||||
int main() {
|
||||
struct Node *first = createNode(5);
|
||||
insertstart(5, first);
|
||||
display();
|
||||
struct Node *second = createNode(6);
|
||||
insertend(6, second);
|
||||
display();
|
||||
deletelast();
|
||||
display();
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
typedef struct {
|
||||
int top;
|
||||
int capacity;
|
||||
char *array;
|
||||
} stack;
|
||||
|
||||
stack *createStack(int c) {
|
||||
stack *Stack = (stack *)malloc(sizeof(stack));
|
||||
if (!Stack) {
|
||||
return NULL;
|
||||
}
|
||||
Stack->capacity = c;
|
||||
Stack->top = -1;
|
||||
Stack->array = (char *)malloc(Stack->capacity);
|
||||
if (!Stack->array) {
|
||||
free(Stack);
|
||||
return NULL;
|
||||
}
|
||||
return Stack;
|
||||
}
|
||||
|
||||
bool isfull(stack *s) { return s->top == s->capacity - 1; }
|
||||
bool isempty(stack *s) { return s->top == -1; }
|
||||
|
||||
int push(stack *s, char v) {
|
||||
if (isfull(s)) {
|
||||
printf("stack overflow");
|
||||
return -1;
|
||||
}
|
||||
s->array[++s->top] = v;
|
||||
return s->top;
|
||||
}
|
||||
int pop(stack *s) {
|
||||
if (isempty(s)) {
|
||||
printf("empty");
|
||||
return -1;
|
||||
}
|
||||
return s->array[s->top--];
|
||||
}
|
||||
|
||||
void display(stack *s) {
|
||||
for (int i = 0; i <= s->top; i++) {
|
||||
printf("%c", s->array[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
stack *ms = createStack(3);
|
||||
|
||||
push(ms, 'a');
|
||||
push(ms, 'b');
|
||||
display(ms);
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
#include <ctype.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
typedef struct {
|
||||
char key;
|
||||
} element;
|
||||
element stack[100];
|
||||
int top = -1;
|
||||
bool isfull() {
|
||||
if (top == 99) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool isempty() {
|
||||
if (top < 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void push(char key) {
|
||||
if (isfull()) {
|
||||
printf("stack overflow \n");
|
||||
return;
|
||||
}
|
||||
stack[++top].key = key;
|
||||
}
|
||||
|
||||
char pop() {
|
||||
if (isempty()) {
|
||||
printf("staxk is empyyt");
|
||||
return '\0';
|
||||
}
|
||||
return stack[top--].key;
|
||||
}
|
||||
|
||||
int precedence(char op) {
|
||||
switch (op) {
|
||||
case '^':
|
||||
return 3;
|
||||
case '*':
|
||||
case '/':
|
||||
return 2;
|
||||
case '+':
|
||||
case '-':
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
bool isRight(char op) {
|
||||
if (op == '^') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
char peek() {
|
||||
if (isempty()) {
|
||||
printf("stack is empty");
|
||||
}
|
||||
return stack[top].key;
|
||||
}
|
||||
|
||||
int main() {
|
||||
char infix[100];
|
||||
char postfix[100];
|
||||
printf("enter infix\n");
|
||||
scanf("%s", infix);
|
||||
|
||||
int k = 0;
|
||||
int i = 0;
|
||||
|
||||
while (infix[i] != '\0') {
|
||||
char current = infix[i];
|
||||
|
||||
if (isalpha(current)) {
|
||||
postfix[k++] = current;
|
||||
} else if (current == '(') {
|
||||
push(current);
|
||||
} else if (current == ')') {
|
||||
while (!isempty() && peek() != '(') {
|
||||
postfix[k++] = pop();
|
||||
}
|
||||
if (!isempty() && peek() == '(') {
|
||||
pop(); // Remove '(' from stack
|
||||
}
|
||||
} else { // Operator
|
||||
int currPrec = precedence(current);
|
||||
while (!isempty() && peek() != '(') {
|
||||
char topOp = peek();
|
||||
int topPrec = precedence(topOp);
|
||||
|
||||
if (topPrec > currPrec || (topPrec == currPrec && !isRight(current))) {
|
||||
postfix[k++] = pop();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
push(current);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
while (!isempty()) {
|
||||
postfix[k++] = pop();
|
||||
}
|
||||
|
||||
postfix[k] = '\0';
|
||||
printf("Postfix: %s\n", postfix);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user