If you’ve read our previous post on the basics of DSA, you already know that data structures are how we organize data so a program can use it efficiently. But before you can understand arrays, stacks, or trees, you need to understand elementary data organization — the layers of structure that build up from a single byte in memory to a complex, interconnected data structure.
This post breaks down that hierarchy in detail, explains the difference between primitive and non-primitive data structures, and shows you exactly how each one looks in Java code — with real-world analogies throughout.
[IMAGE 1 — insert the “Data structures → Primitive types / Non-primitive structures” diagram here. Suggested alt text: “Tree diagram showing data structures split into primitive types and non-primitive structures”]
What Is Elementary Data Organization?
Elementary data organization refers to the different levels at which data is structured inside a computer system, from the smallest unit to the most complex. Think of it as a zoom lens — the further you zoom out, the more organized and structured your view of the data becomes.
The typical hierarchy looks like this:
- Bit — the smallest unit of data (a 0 or a 1).
- Byte — a group of 8 bits, enough to represent one character.
- Field — a single piece of data, like a person’s name or age.
- Record — a collection of related fields, like a student’s entire record (name, roll number, marks).
- File — a collection of related records, like a class register containing every student’s record.
- Database — a collection of related files, organized for easy access and management.
Real-world analogy: A school’s record room
Think of a school’s administrative office:
- A single mark obtained by a student in one subject is a field.
- All of a student’s fields together (name, roll number, marks in every subject, attendance) form that student’s record.
- All student records for Class 10 together form a file — like a physical folder labeled “Class 10 Records.”
- All such files, across all classes, organized in a filing cabinet system, form the school’s database.
This layered organization is exactly how data is structured in software — from a single variable all the way up to an entire database table.
Primitive Data Structures
Primitive data structures are the basic, built-in data types provided directly by a programming language. They are the fundamental building blocks — you can’t break them down any further, and the language itself knows exactly how to store and manipulate them.
In Java, the primitive data types are:
| Data Type | Size | Example Value |
|---|---|---|
int | 4 bytes | 25 |
float | 4 bytes | 3.14 |
double | 8 bytes | 3.14159265 |
char | 2 bytes | ‘A’ |
boolean | 1 bit (JVM-dependent) | true / false |
byte | 1 byte | 100 |
long | 8 bytes | 100000L |
short | 2 bytes | 30000 |
Real-world analogy: Basic ingredients
Think of primitive data types as the raw ingredients in a kitchen — salt, sugar, flour, water. You can’t break salt down into something simpler and still call it “salt.” Similarly, an int in Java is a fundamental unit — the language handles its storage and behavior natively, and you can’t decompose it further.
Code Example: Declaring Primitive Variables in Java
public class PrimitiveExample {
public static void main(String[] args) {
int age = 20; // whole number
float height = 5.9f; // decimal number
char grade = 'A'; // single character
boolean isPassed = true; // true/false value
System.out.println("Age: " + age);
System.out.println("Height: " + height);
System.out.println("Grade: " + grade);
System.out.println("Passed: " + isPassed);
}
}
Output:
Age: 20
Height: 5.9
Grade: A
Passed: true
Each of these variables directly stores a value in memory — there’s no internal structure or collection involved. That’s what makes them “primitive.”
Non-Primitive Data Structures
Non-primitive data structures are built using primitive data types. Unlike primitives, they don’t just store a single value — they organize multiple values together, often with relationships between them.
Non-primitive data structures are further divided into two categories:
1. Linear Data Structures
In a linear data structure, elements are arranged sequentially, one after another. Examples include arrays, linked lists, stacks, and queues.
Real-world analogy: A queue of people waiting at a bank counter — one person follows another in a single sequence. There’s a clear “first” and “last” person, and everyone else fits somewhere in between.
2. Non-Linear Data Structures
In a non-linear data structure, elements are arranged in a hierarchical or interconnected manner rather than sequentially. Examples include trees and graphs.
Real-world analogy: A company’s organizational chart. The CEO isn’t just “followed by” the next employee — instead, multiple managers report to the CEO, and multiple employees report to each manager. It branches, rather than following a single line.
Non-Primitive Structures in Detail (With Code)
Arrays
An array is a collection of elements of the same data type, stored in contiguous memory locations, and accessed using an index.
Real-world analogy: A row of numbered lockers in a gym. Each locker holds one item, and you access any locker directly if you know its number — you don’t need to open every locker before it.
public class ArrayExample {
public static void main(String[] args) {
int[] marks = {85, 90, 78, 92, 88};
// Accessing an element directly using its index
System.out.println("Marks of 3rd student: " + marks[2]);
// Traversing the array
for (int i = 0; i < marks.length; i++) {
System.out.println("Student " + (i + 1) + ": " + marks[i]);
}
}
}
Linked Lists
A linked list is a collection of nodes, where each node stores data and a reference (or “link”) to the next node in the sequence.
Real-world analogy: A treasure hunt. Each clue (node) doesn’t just sit in a fixed location — it tells you where to find the next clue. You can’t jump straight to the fifth clue; you have to follow the chain from the start.
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
public class LinkedListExample {
public static void main(String[] args) {
Node head = new Node(10);
head.next = new Node(20);
head.next.next = new Node(30);
// Traversing the linked list
Node current = head;
while (current != null) {
System.out.println(current.data);
current = current.next;
}
}
}
Stacks
A stack follows the LIFO (Last In, First Out) principle — the last element added is the first one removed.
Real-world analogy: A stack of plates in a canteen. You always add a new plate to the top, and you always pick up a plate from the top. The plate at the bottom is the last one you’d ever access.
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack stack = new Stack<>();
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("Top element: " + stack.peek());
System.out.println("Popped element: " + stack.pop());
System.out.println("Stack after pop: " + stack);
}
}
Queues
A queue follows the FIFO (First In, First Out) principle — the first element added is the first one removed.
Real-world analogy: A ticket counter line. The first person to join the line is the first person to be served.
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue queue = new LinkedList<>();
queue.add(10);
queue.add(20);
queue.add(30);
System.out.println("Front element: " + queue.peek());
System.out.println("Removed element: " + queue.poll());
System.out.println("Queue after removal: " + queue);
}
}
Trees (Non-Linear)
A tree is a hierarchical structure with a root node and child nodes, where each node can have multiple children but only one parent.
Real-world analogy: A family tree. One ancestor at the top, with children and grandchildren branching downward — but every person has exactly one direct parent (in a simplified single-parent tree model).
Graphs (Non-Linear)
A graph is a collection of nodes (vertices) connected by edges, where connections don’t have to follow any strict hierarchy.
Real-world analogy: A map of flight routes between cities. Delhi might connect directly to Mumbai, Dubai, and London — with no single “parent” city. Any node can connect to any other node.
[IMAGE 2 — optional: insert a simple photo or illustration of an organizational chart (for trees) and a flight-route map (for graphs) here, side by side, to visually reinforce the linear vs. non-linear distinction]
Primitive vs. Non-Primitive: A Side-by-Side Comparison
| Aspect | Primitive Data Structures | Non-Primitive Data Structures |
|---|---|---|
| Definition | Basic, built-in data types | Structures built using primitive types |
| Complexity | Simple, single values | Complex, hold multiple values |
| Examples | int, float, char, boolean | Array, linked list, stack, queue, tree, graph |
| Memory | Directly stores the value | Stores references/collections of values |
| Dependency | Independent, language-defined | Built on top of primitive types |
| Real-world analogy | A single ingredient (salt, sugar) | A dish made from multiple ingredients |
Real-World Applications: Where You’ve Already Used These
You interact with non-primitive data structures every day without realizing it:
- Your phone’s contact list is essentially an array — each contact sits at a specific position, and the list is a fixed, indexed structure (until it resizes).
- A music playlist with “next” and “previous” buttons works like a linked list — each song links to the next.
- Your browser’s back button uses a stack — the last page you visited is the first one you go back to.
- A printer’s job queue is a literal queue — the first document you send to print is the first one that comes out.
- Windows File Explorer’s folder structure is a tree — folders contain subfolders, which contain more subfolders.
- Facebook’s friend network or Google Maps’ road network is a graph — connections exist between entities without a strict hierarchy.
Wrapping Up
Elementary data organization gives us the vocabulary to talk about how data scales — from a single bit to an entire database. Within that hierarchy, primitive data structures are the simple, atomic building blocks provided by the language itself, while non-primitive data structures are the more complex, purpose-built containers — arrays, linked lists, stacks, queues, trees, and graphs — that we construct using those primitives to solve real problems efficiently.
Understanding this distinction is the foundation for everything that comes next in this course. In the next post, we’ll dive into array and string operations — the first non-primitive structure you’ll actually build and manipulate in code.
This post is part of a series covering the complete Data Structures & Algorithms syllabus (BCSC 0006). Read the previous post: “What Are Data Structures and Algorithms? A Beginner’s Guide to Basic Terminology.”