exp 2,4: init

Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
2022-12-27 18:00:31 +05:30
parent e5d487757c
commit 0ed96f58dd
2 changed files with 163 additions and 0 deletions

93
2.c Normal file
View File

@@ -0,0 +1,93 @@
#include <stdio.h>
#include <stdlib.h>
typedef struct Student student;
struct Student {
int sid;
struct Student *next;
};
void insert(student **head, int idx, uint sid) {
student *new = malloc(sizeof(student));
new->sid = sid;
int i = 0;
student *prev = NULL, *cur = *head;
for (int i = 0;; i++) {
if (i == idx) {
if (prev != NULL)
prev->next = new;
else
*head = new;
new->next = cur;
return;
}
if (cur == NULL)
return;
prev = cur;
cur = cur->next;
}
printf("Index %d does not exist\n", idx);
return;
}
void delete (student **head, int idx) {
student *prev = NULL, *cur = *head;
for (int i = 0; cur != NULL; i++) {
if (i == idx) {
if (prev != NULL)
prev->next = cur->next;
else
*head = cur->next;
free(cur);
return;
}
prev = cur;
cur = cur->next;
}
printf("Index %d does not exist\n", idx);
return;
}
void reverse(student **head) {
student *prev = NULL, *cur = *head;
while (cur->next != NULL) {
student *next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
cur->next = prev;
*head = cur;
return;
}
int main() {
student *head = NULL;
insert(&head, 0, 1);
insert(&head, 1, 2002);
insert(&head, 2, -9);
insert(&head, 3, 52);
insert(&head, 1, 4);
delete (&head, 2);
reverse(&head);
while (head != NULL) {
printf("%d ", head->sid);
head = head->next;
}
// free
while (head != NULL)
delete(&head, 0);
}

70
4.c Normal file
View File

@@ -0,0 +1,70 @@
#include <stdio.h>
#include <stdlib.h>
typedef struct Node node;
struct Node {
int collegeid;
struct Node *next;
};
void insert(node **last, int collegeid) {
node *dst = malloc(sizeof(node));
dst->collegeid = collegeid;
if (*last == NULL)
*last = dst;
if ((*last)->next == NULL)
(*last)->next = dst, dst->next = *last;
else {
dst->next = (*last)->next;
(*last)->next = dst;
}
}
void delete (node **last) {
node *prev = NULL;
if ((*last)->next == NULL)
goto cleanup;
prev = *last;
while (prev->next != *last)
prev = prev->next;
if (prev->next->next == prev)
prev->next = NULL;
else
prev->next = (*last)->next;
cleanup:
free(*last);
*last = prev;
}
void display(node *last) {
node *cur = last;
while (cur->next != last) {
printf("%d ", cur->next->collegeid);
cur = cur->next;
}
printf("%d\n", last->collegeid);
}
int main() {
node *last = NULL;
insert(&last, 1);
insert(&last, 4);
insert(&last, 99);
insert(&last, 1223);
display(last);
delete (&last);
display(last);
// free
while (last != NULL)
delete (&last);
}