0% found this document useful (0 votes)
96 views

Linked List

1) The document contains code examples for implementing various data structures like singly linked lists, doubly linked lists, circular singly linked lists, stacks, and queues using C programming language. 2) Code snippets show how to create node structures for each data type and include functions for operations like insertion, deletion, traversal and checking empty/full conditions. 3) Examples demonstrate creating instances of different data structures, performing operations on them like push, pop, insert, remove etc and printing the elements to showcase their implementation.

Uploaded by

Jerlin Pratheepa
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
96 views

Linked List

1) The document contains code examples for implementing various data structures like singly linked lists, doubly linked lists, circular singly linked lists, stacks, and queues using C programming language. 2) Code snippets show how to create node structures for each data type and include functions for operations like insertion, deletion, traversal and checking empty/full conditions. 3) Examples demonstrate creating instances of different data structures, performing operations on them like push, pop, insert, remove etc and printing the elements to showcase their implementation.

Uploaded by

Jerlin Pratheepa
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

Singly Linked List using C

#include <stdio.h>

#include <stdlib.h>

struct Node {

int data;

struct Node* next;

};

void printList(struct Node* n)

while (n != NULL) {

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

n = n->next;

// Program to create a simple linked

// list with 3 nodes

int main()

struct Node* head = NULL;

struct Node* second = NULL;

struct Node* third = NULL;

// allocate 3 nodes in the heap

head = (struct Node*)malloc(sizeof(struct Node));

second = (struct Node*)malloc(sizeof(struct Node));

third = (struct Node*)malloc(sizeof(struct Node));


head->data = 1; // assign data in first node

head->next = second; // Link first node with

// assign data to second node

second->data = 2;

// Link second node with the third node

second->next = third;

third->data = 3; // assign data to third node

third->next = NULL;

printList(head);

return 0;

Double Linked List


#include <stdio.h>

struct Node {

int data;

struct Node* next; // Pointer to next node in DLL

struct Node* prev; // Pointer to previous node in DLL

};

void printList(struct Node* node)

struct Node* last;

printf("\nTraversal in forward direction \n");

while (node != NULL) {

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

last = node;

node = node->next;
}

printf("\nTraversal in reverse direction \n");

while (last != NULL) {

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

last = last->prev;

int main()

struct Node* head = NULL;

struct Node* second = NULL;

struct Node* third = NULL;

// allocate 3 nodes in the heap

head = (struct Node*)malloc(sizeof(struct Node));

second = (struct Node*)malloc(sizeof(struct Node));

third = (struct Node*)malloc(sizeof(struct Node));

head->data = 1; // assign data in first node

head->next = second;// Link first node with

head->prev=NULL;

// assign data to second node

second->data = 2;

// Link second node with the third node

second->next = third;

second->prev=head;

third->data = 3; // assign data to third node

third->next = NULL;
third->prev=second;

printList(head);

return 0;

Circular singly linked list


#include <stdio.h>

#include <stdlib.h>

struct Node {

int data;

struct Node* next;

};

void printList(struct Node* n)

struct Node *p;

// If list is empty, return.

if (n == NULL)

printf("List is empty.");

return;

// Pointing to first Node of the list.

p = n->next;

// Traversing the list.

do

{
printf("%d", p -> data );

p = p-> next;

while(p != n->next);

// Program to create a simple linked

// list with 3 nodes

int main()

struct Node* head = NULL;

struct Node* second = NULL;

struct Node* third = NULL;

// allocate 3 nodes in the heap

head = (struct Node*)malloc(sizeof(struct Node));

second = (struct Node*)malloc(sizeof(struct Node));

third = (struct Node*)malloc(sizeof(struct Node));

head->data = 1; // assign data in first node

head->next = second; // Link first node with

// assign data to second node

second->data = 2;

// Link second node with the third node

second->next = third;

third->data = 3; // assign data to third node

third->next = head;

printList(head);

return 0;

}
Stack
#include <stdio.h>

int MAXSIZE = 8;

int stack[8];

int top = -1;

int isempty() {

if(top == -1)

return 1;

else

return 0;

int isfull() {

if(top == MAXSIZE)

return 1;

else

return 0;

int peek() {

return stack[top];

}
int pop() {

int data;

if(!isempty()) {

data = stack[top];

top = top - 1;

return data;

} else {

printf("Could not retrieve data, Stack is empty.\n");

int push(int data) {

if(!isfull()) {

top = top + 1;

stack[top] = data;

} else {

printf("Could not insert data, Stack is full.\n");

int main() {

// push items on to the stack

push(3);

push(5);

push(9);
push(1);

push(12);

push(15);

printf("Element at top of the stack: %d\n" ,peek());

printf("Elements: \n");

// print stack data

while(!isempty()) {

int data = pop();

printf("%d\n",data);

printf("Stack full: %s\n" , isfull()?"true":"false");

printf("Stack empty: %s\n" , isempty()?"true":"false");

return 0;

Queue
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAX 6

int intArray[MAX];
int front = 0;
int rear = -1;
int itemCount = 0;

int peek() {
return intArray[front];
}

bool isEmpty() {
return itemCount == 0;
}

bool isFull() {
return itemCount == MAX;
}

int size() {
return itemCount;
}

void insert(int data) {

if(!isFull()) {

if(rear == MAX-1) {
rear = -1;
}

intArray[++rear] = data;
itemCount++;
}
}

int removeData() {
int data = intArray[front++];

if(front == MAX) {
front = 0;
}

itemCount--;
return data;
}

int main() {
/* insert 5 items */
insert(3);
insert(5);
insert(9);
insert(1);
insert(12);

// front : 0
// rear : 4
// ------------------
// index : 0 1 2 3 4
// ------------------
// queue : 3 5 9 1 12
insert(15);

// front : 0
// rear : 5
// ---------------------
// index : 0 1 2 3 4 5
// ---------------------
// queue : 3 5 9 1 12 15

if(isFull()) {
printf("Queue is full!\n");
}
// remove one item
int num = removeData();

printf("Element removed: %d\n",num);


// front : 1
// rear : 5
// -------------------
// index : 1 2 3 4 5
// -------------------
// queue : 5 9 1 12 15

// insert more items


insert(16);

// front : 1
// rear : -1
// ----------------------
// index : 0 1 2 3 4 5
// ----------------------
// queue : 16 5 9 1 12 15

// As queue is full, elements will not be inserted.


insert(17);
insert(18);

// ----------------------
// index : 0 1 2 3 4 5
// ----------------------
// queue : 16 5 9 1 12 15
printf("Element at front: %d\n",peek());

printf("----------------------\n");
printf("index : 5 4 3 2 1 0\n");
printf("----------------------\n");
printf("Queue: ");

while(!isEmpty()) {
int n = removeData();
printf("%d ",n);
}
}

You might also like