Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Need to fill in code (using the template) for implementing a doubly linked list

ID: 3562737 • Letter: N

Question

Need to fill in code (using the template) for implementing a doubly linked list in C that hold sorted strings. I am not familiar with C so I need major help with this

#include<stdio.h>

#include<stdlib.h>

#include<strings.h>

#include "linkedlist.h"

struct N * make_node() {
        struct N * n = (struct N *) malloc(sizeof(struct N)) ;
        n->prev = n->next = NULL ;
        n->data = NULL ;
        return n ;
}

void free_node(struct N * n ) {
        free(n->data) ;
}

struct N * create_list() {
        struct N * n = make_node() ;
        // use strdup so that every n->data is "freeable"
        n->data = strdup("") ;
        return n ;
}

void print_list(struct N * n) {
        if (g_debug>0) printf("Entered print_list ") ;
        else printf(" ") ;

}

void insert_list(struct N * n, char * s) {

}

int destroy_list(struct N * n) {
       //returns number of items removed from list

      

      return 0;
}

int remove_list(struct N * n, char * s) {
        // returns 1 if item removed, else 0


        return 0 ;
}

Explanation / Answer

#include #include typedef struct Node { int data; struct Node *next; struct Node *prev; }node; void insert(node *pointer, int data) { /* Iterate through the list till we encounter the last node.*/ while(pointer->next!=NULL) { pointer = pointer -> next; } /* Allocate memory for the new node and put data in it.*/ pointer->next = (node *)malloc(sizeof(node)); (pointer->next)->prev = pointer; pointer = pointer->next; pointer->data = data; pointer->next = NULL; } int find(node *pointer, int key) { pointer = pointer -> next; //First node is dummy node. /* Iterate through the entire linked list and search for the key. */ while(pointer!=NULL) { if(pointer->data == key) //key is found. { return 1; } pointer = pointer -> next;//Search in the next node. } /*Key is not found */ return 0; } void delete(node *pointer, int data) { /* Go to the node for which the node next to it has to be deleted */ while(pointer->next!=NULL && (pointer->next)->data != data) { pointer = pointer -> next; } if(pointer->next==NULL) { printf("Element %d is not present in the list ",data); return; } /* Now pointer points to a node and the node next to it has to be removed */ node *temp; temp = pointer -> next; /*temp points to the node which has to be removed*/ pointer->next = temp->next; temp->prev = pointer; /*We removed the node which is next to the pointer (which is also temp) */ free(temp); /* Beacuse we deleted the node, we no longer require the memory used for it . free() will deallocate the memory. */ return; } void print(node *pointer) { if(pointer==NULL) { return; } printf("%d ",pointer->data); print(pointer->next); } int main() { /* start always points to the first node of the linked list. temp is used to point to the last node of the linked list.*/ node *start,*temp; start = (node *)malloc(sizeof(node)); temp = start; temp -> next = NULL; temp -> prev = NULL; /* Here in this code, we take the first node as a dummy node. The first node does not contain data, but it used because to avoid handling special cases in insert and delete functions. */ printf("1. Insert "); printf("2. Delete "); printf("3. Print "); printf("4. Find "); while(1) { int query; scanf("%d",&query); if(query==1) { int data; scanf("%d",&data); insert(start,data); } else if(query==2) { int data; scanf("%d",&data); delete(start,data); } else if(query==3) { printf("The list is "); print(start->next); printf(" "); } else if(query==4) { int data; scanf("%d",&data); int status = find(start,data); if(status) { printf("Element Found "); } else { printf("Element Not Found "); } } } }
Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote