0% found this document useful (0 votes)
62 views7 pages

C Source Code

This C program implements a linked list data structure with functions to insert, delete, find, sort and reverse nodes in the list. It creates a linked list with sample data, demonstrates each function by calling it and printing the list, then sorts and reverses the list at the end.

Uploaded by

Sela
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views7 pages

C Source Code

This C program implements a linked list data structure with functions to insert, delete, find, sort and reverse nodes in the list. It creates a linked list with sample data, demonstrates each function by calling it and printing the list, then sorts and reverses the list at the end.

Uploaded by

Sela
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 7

#include <stdio.

h>

#include <string.h>

#include <stdlib.h>

#include <stdbool.h>

struct node {

int data;

int key;

struct node *next;

};

struct node *head = NULL;

struct node *current = NULL;

//display the list

void printList() {

struct node *ptr = head;

printf("\n[ ");

//start from the beginning

while(ptr != NULL) {

printf("(%d,%d) ",ptr->key,ptr->data);

ptr = ptr->next;

printf(" ]");

//insert link at the first location

void insertFirst(int key, int data) {

//create a link

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

link->key = key;

link->data = data;

//point it to old first node

link->next = head;

//point first to new first node


head = link;

//delete first item

struct node* deleteFirst() {

//save reference to first link

struct node *tempLink = head;

//mark next to first link as first

head = head->next;

//return the deleted link

return tempLink;

//is list empty

bool isEmpty() {

return head == NULL;

int length() {

int length = 0;

struct node *current;

for(current = head; current != NULL; current = current->next) {

length++;

return length;

//find a link with given key

struct node* find(int key) {

//start from the first link

struct node* current = head;

//if list is empty


if(head == NULL) {

return NULL;

//navigate through list

while(current->key != key) {

//if it is last node

if(current->next == NULL) {

return NULL;

} else {

//go to next link

current = current->next;

//if data found, return the current Link

return current;

//delete a link with given key

struct node* delete(int key) {

//start from the first link

struct node* current = head;

struct node* previous = NULL;

//if list is empty

if(head == NULL) {

return NULL;

//navigate through list

while(current->key != key) {

//if it is last node

if(current->next == NULL) {

return NULL;

} else {
//store reference to current link

previous = current;

//move to next link

current = current->next;

//found a match, update the link

if(current == head) {

//change first to point to next link

head = head->next;

} else {

//bypass the current link

previous->next = current->next;

return current;

void sort() {

int i, j, k, tempKey, tempData;

struct node *current;

struct node *next;

int size = length();

k = size ;

for ( i = 0 ; i < size - 1 ; i++, k-- ) {

current = head;

next = head->next;

for ( j = 1 ; j < k ; j++ ) {

if ( current->data > next->data ) {

tempData = current->data;

current->data = next->data;

next->data = tempData;

tempKey = current->key;
current->key = next->key;

next->key = tempKey;

current = current->next;

next = next->next;

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;

main() {

insertFirst(1,10);

insertFirst(2,20);

insertFirst(3,30);

insertFirst(4,1);

insertFirst(5,40);

insertFirst(6,56);

printf("Original List: ");

//print list

printList();

while(!isEmpty()) {
struct node *temp = deleteFirst();

printf("\nDeleted value:");

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

printf("\nList after deleting all items: ");

printList();

insertFirst(1,10);

insertFirst(2,20);

insertFirst(3,30);

insertFirst(4,1);

insertFirst(5,40);

insertFirst(6,56);

printf("\nRestored List: ");

printList();

printf("\n");

struct node *foundLink = find(4);

if(foundLink != NULL) {

printf("Element found: ");

printf("(%d,%d) ",foundLink->key,foundLink->data);

printf("\n");

} else {

printf("Element not found.");

delete(4);

printf("List after deleting an item: ");

printList();

printf("\n");

foundLink = find(4);

if(foundLink != NULL) {

printf("Element found: ");

printf("(%d,%d) ",foundLink->key,foundLink->data);

printf("\n");

} else {
printf("Element not found.");

printf("\n");

sort();

printf("List after sorting the data: ");

printList();

reverse(&head);

printf("\nList after reversing the data: ");

printList();

If we compile and run the above program, it will produce the following
result

Output
Original List:
[ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]
Deleted value:(6,56)
Deleted value:(5,40)
Deleted value:(4,1)
Deleted value:(3,30)
Deleted value:(2,20)
Deleted value:(1,10)
List after deleting all items:
[]
Restored List:
[ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]
Element found: (4,1)
List after deleting an item:
[ (6,56) (5,40) (3,30) (2,20) (1,10) ]
Element not found.
List after sorting the data:
[ (1,10) (2,20) (3,30) (5,40) (6,56) ]
List after reversing the data:
[ (6,56) (5,40) (3,30) (2,20) (1,10) ]

You might also like