You are on page 1of 5

Vivek Kumar MCA-B (91)

Q. Make a doubly linked list so that elements in linked list are always in
ascending order from left to right and print the contents of linked list in ascending
order and descending order.
#include <stdio.h>
#include <stdlib.h>

typedef struct node_type {


int info;
struct node_type* prev;
struct node_type* next;
} node_type;

void insert(node_type** front, node_type** rear);


void displayAscending(node_type* front);
void displayDescending(node_type* rear);

int main() {
node_type* front = NULL;
node_type* rear = NULL;
int num_elements;

printf("Enter total number of elements: ");


scanf("%d", &num_elements);

for (int i = 0; i < num_elements; ++i) {


insert(&front, &rear);
}

printf("Ascending order: ");


displayAscending(front);

1
Vivek Kumar MCA-B (91)

printf("Descending order: ");


displayDescending(rear);

return 0;
}

void insert(node_type** front, node_type** rear) {


node_type* temp = (node_type*)malloc(sizeof(node_type));
if (temp == NULL) {
printf("Not enough memory..!\n");
return;
}

printf("Enter a number: ");


scanf("%d", &(temp->info));
temp->prev = NULL;
temp->next = NULL;

if (*front == NULL) {
*front = temp;
*rear = temp;
return;
}

node_type* p = *front;
node_type* prev = NULL;

while (p != NULL && p->info < temp->info) {


prev = p;
p = p->next;

2
Vivek Kumar MCA-B (91)

if (prev == NULL) {
temp->next = *front;
(*front)->prev = temp;
*front = temp;
} else if (p == NULL) {
prev->next = temp;
temp->prev = prev;
*rear = temp;
} else {
prev->next = temp;
temp->prev = prev;
temp->next = p;
p->prev = temp;
}
}

void displayAscending(node_type* front) {


node_type* current = front;
while (current != NULL) {
printf("%d ", current->info);
current = current->next;
}
printf("\n");
}

void displayDescending(node_type* rear) {


node_type* current = rear;
while (current != NULL) {

3
Vivek Kumar MCA-B (91)

printf("%d ", current->info);


current = current->prev;
}
printf("\n");
}

4
Vivek Kumar MCA-B (91)

Output->

You might also like