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

Problem 5: Implement in ARM assembly language for sorting with a linkedlist. In

ID: 3827876 • Letter: P

Question

Problem 5: Implement in ARM assembly language for sorting with a linkedlist. In the main function, open a file to read a sequence of unsorted integers. For the first input integer, create a root node (8 bytes), holding the integer and one empty pointer. For each of the following input integers, build a link (call it X) containing the number and insert it to the linked list such that for any link with smaller integer should go before X and any link with integer of bigger or equal value should go after X. After all integers 1 are inserted, the program would traverse the linked list and print out the sorted integers separated by space onto the screen. Specification: you should write Insert as a recursive function.

Explanation / Answer

#include<stdio.h>

#include<stdlib.h>

  

/* Link list node */

struct node

{

    int data;

    struct node* next;

};

  

/* Function to reverse the linked list */

static void reverse(struct node** head_ref)

{

    struct node* prev   = NULL;

    struct node* current = *head_ref;

    struct node* next;

    while (current != NULL)

    {

        next = current->next;

        current->next = prev;  

        prev = current;

        current = next;

    }

    *head_ref = prev;

}

  

/* Function to push a node */

void push(struct node** head_ref, int new_data)

{

    /* allocate node */

    struct node* new_node =

            (struct node*) malloc(sizeof(struct node));

             

    /* put in the data */

    new_node->data = new_data;

                 

    /* link the old list off the new node */

    new_node->next = (*head_ref);   

         

    /* move the head to point to the new node */

    (*head_ref)    = new_node;

}

  

/* Function to print linked list */

void printList(struct node *head)

{

    struct node *temp = head;

    while(temp != NULL)

    {

        printf("%d ", temp->data);   

        temp = temp->next;

    }

}   

  

/* Drier program to test above function*/

int main()

{

struct node* head = NULL;

    

     push(&head, 20);

     push(&head, 4);

     push(&head, 15);

     push(&head, 85);     

      

     printList(head);   

     reverse(&head);                     

     printf(" Reversed Linked list ");

     printList(head);   

     return 0;

}

#include<stdio.h>

#include<stdlib.h>

  

/* Link list node */

struct node

{

    int data;

    struct node* next;

};

  

/* Function to reverse the linked list */

static void reverse(struct node** head_ref)

{

    struct node* prev   = NULL;

    struct node* current = *head_ref;

    struct node* next;

    while (current != NULL)

    {

        next = current->next;

        current->next = prev;  

        prev = current;

        current = next;

    }

    *head_ref = prev;

}

  

/* Function to push a node */

void push(struct node** head_ref, int new_data)

{

    /* allocate node */

    struct node* new_node =

            (struct node*) malloc(sizeof(struct node));

             

    /* put in the data */

    new_node->data = new_data;

                 

    /* link the old list off the new node */

    new_node->next = (*head_ref);   

         

    /* move the head to point to the new node */

    (*head_ref)    = new_node;

}

  

/* Function to print linked list */

void printList(struct node *head)

{

    struct node *temp = head;

    while(temp != NULL)

    {

        printf("%d ", temp->data);   

        temp = temp->next;

    }

}   

  

/* Drier program to test above function*/

int main()

{

struct node* head = NULL;

    

     push(&head, 20);

     push(&head, 4);

     push(&head, 15);

     push(&head, 85);     

      

     printList(head);   

     reverse(&head);                     

     printf(" Reversed Linked list ");

     printList(head);   

     return 0;

}