Course Code: CSE 2101
Course Title: Data Structures
Credit Hours: 3.00 (3 hours per week)
Textbook: Data Structures with C by Seymour Lipschutz (Schaum's Outlines)
This repository contains comprehensive materials, implementations, and resources for the Data Structures course. The course provides an in-depth study of fundamental and advanced data structures, their operations, and algorithmic analysis.
- Internal data representation
- Abstract data types
- Elementary asymptotic analysis: growth of functions, O, Ω and Θ notations
- Elementary data structures: arrays, linked lists, stacks, queues, trees and tree traversals, graphs and graph representations, heaps, binary search trees
- Sorting algorithms: heap sort, merge sort, quick sort
- Data structures for set operations
- Advanced data structures: balanced binary search trees (AVL trees, red-black trees, splay trees, skip lists), advanced heaps (Fibonacci heaps, binomial heaps)
- Hashing
This repository is organized according to the chapters in Data Structures with C by Seymour Lipschutz:
CSE-2101-Data-Structures/
│
├── Chapter-01-Introduction-and-Overview/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-02-Preliminaries/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-03-String-Processing/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-04-Arrays-Records-Pointers/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-05-Linked-Lists/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-06-Stacks-Queues-Recursion/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-07-Trees/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
├── Chapter-08-Graphs-and-Applications/
│ ├── README.md
│ ├── examples/
│ └── exercises/
│
└── Chapter-09-Sorting-and-Searching/
├── README.md
├── examples/
└── exercises/
- 1.1 Introduction
- 1.2 Basic Terminology; Elementary Data Organization
- 1.3 Data Structures
- 1.4 Data Structure Operations
- 1.5 Algorithms: Complexity, Time-Space Tradeoff
- 2.1 Introduction
- 2.2 Mathematical Notation and Functions
- 2.3 Algorithmic Notation
- 2.4 Control Structures
- 2.5 Complexity of Algorithms
- 2.6 Other Asymptotic Notations (Ω, O, Θ)
- 2.7 Subalgorithms
- 2.8 Variables, Data Types
- 3.1 Introduction
- 3.2 Basic Terminology
- 3.3 Storing Strings
- 3.4 Character Data Type
- 3.5 String Operations
- 3.6 Word Processing
- 3.7 Pattern Matching Algorithms
- 4.1 Introduction
- 4.2 Linear Arrays
- 4.3 Representation of Linear Arrays in Memory
- 4.4 Traversing Linear Arrays
- 4.5 Inserting and Deleting
- 4.6 Sorting; Bubble Sort
- 4.7 Searching; Linear Search
- 4.8 Binary Search
- 4.9 Multidimensional Arrays
- 4.10 Pointers; Pointer Arrays
- 4.11 Records; Record Structures
- 4.12 Representation of Records in Memory; Parallel Arrays
- 4.13 Matrices
- 4.14 Sparse Matrices
- 5.1 Introduction
- 5.2 Linked Lists
- 5.3 Representation of Linked Lists in Memory
- 5.4 Traversing a Linked List
- 5.5 Searching a Linked List
- 5.6 Memory Allocation; Garbage Collection
- 5.7 Insertion into a Linked List
- 5.8 Deletion from a Linked List
- 5.9 Header Linked Lists
- 5.10 Two-way Lists
- 6.1 Introduction
- 6.2 Stacks
- 6.3 Array Representation of Stacks
- 6.4 Linked Representation of Stacks
- 6.5 Arithmetic Expressions; Polish Notation
- 6.6 Quicksort, an Application of Stacks
- 6.7 Recursion
- 6.8 Towers of Hanoi
- 6.9 Implementation of Recursive Procedures by Stacks
- 6.10 Queues
- 6.11 Linked Representation of Queues
- 6.12 Deques
- 6.13 Priority Queues
- 7.1 Introduction
- 7.2 Binary Trees
- 7.3 Representing Binary Trees in Memory
- 7.4 Traversing Binary Trees
- 7.5 Traversal Algorithms using Stacks
- 7.6 Header Nodes; Threads
- 7.7 Binary Search Trees
- 7.8 Searching and Inserting in Binary Search Trees
- 7.9 Deleting in a Binary Search Tree
- 7.10 AVL Search Trees
- 7.11 Insertion in an AVL Search Tree
- 7.12 Deletion in an AVL Search Tree
- 7.13 m-way Search Trees
- 7.14 Searching, Insertion and Deletion in an m-way Search Tree
- 7.15 B Trees
- 7.16 Searching, Insertion and Deletion in a B-tree
- 7.17 Heap; Heapsort
- 7.18 Path Lengths; Huffman's Algorithm
- 7.19 General Trees
- 8.1 Introduction
- 8.2 Graph Theory Terminology
- 8.3 Sequential Representation of Graphs; Adjacency Matrix; Path Matrix
- 8.4 Warshall's Algorithm; Shortest Paths
- 8.5 Linked Representation of a Graph
- 8.6 Operations on Graphs
- 8.7 Traversing a Graph
- 8.8 Posets; Topological Sorting
- 9.1 Introduction
- 9.2 Sorting
- 9.3 Insertion Sort
- 9.4 Selection Sort
- 9.5 Merging
- 9.6 Merge-Sort
- 9.7 Radix Sort
- 9.8 Searching and Data Modification
- 9.9 Hashing
To use the code examples in this repository, you need:
- C Compiler (GCC recommended)
- Text Editor or IDE (VS Code, Code::Blocks, Dev-C++, or any C IDE)
- Basic understanding of C programming
-
Clone the repository
git clone https://github.com/M-F-Tushar/CSE-2101-Data-Structures.git cd CSE-2101-Data-Structures -
Compile a C program
gcc filename.c -o output ./output
-
Navigate to specific chapters
cd Chapter-04-Arrays-Records-Pointers/examples
Each chapter folder contains:
- README.md: Detailed explanation of concepts covered in that chapter
- examples/: Working code examples demonstrating the concepts
- exercises/: Practice problems with solutions
# Navigate to a chapter
cd Chapter-05-Linked-Lists/examples
# Compile the program
gcc linked_list_operations.c -o linked_list
# Run the program
./linked_listBy the end of this course, students will be able to:
- Understand and implement various data structures in C
- Analyze algorithm complexity using Big O, Omega, and Theta notations
- Choose appropriate data structures for specific problems
- Implement searching and sorting algorithms
- Work with advanced data structures like AVL trees, B-trees, and heaps
- Apply graph algorithms for real-world problems
- Design efficient algorithms with optimal time-space tradeoffs
- Seymour Lipschutz - Data Structures with C (Schaum's Outlines)
- Thomas H. Cormen et al. - Introduction to Algorithms (CLRS)
- Ellis Horowitz & Sartaj Sahni - Fundamentals of Data Structures in C
- Robert Sedgewick - Algorithms in C
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a new branch (
git checkout -b feature/improvement) - Make your changes
- Commit your changes (
git commit -m 'Add some feature') - Push to the branch (
git push origin feature/improvement) - Open a Pull Request
- Follow the existing code structure and naming conventions
- Add comments to explain complex logic
- Test your code before submitting
- Update documentation if necessary
- Write clear commit messages
- Chapter 1: Introduction and Overview
- Chapter 2: Preliminaries
- Chapter 3: String Processing
- Chapter 4: Arrays, Records and Pointers
- Chapter 5: Linked Lists
- Chapter 6: Stacks, Queues, Recursion
- Chapter 7: Trees
- Chapter 8: Graphs and Their Applications
- Chapter 9: Sorting and Searching
Note: Currently, 4 chapters have been completed. The repository will be updated as the course progresses.
Mahir Faysal Tusher
- 📧 Email: www.mahirfaysaltushar@gmail.com
- 🐙 GitHub: @M-F-Tushar
- 📍 Location: Chandpur, Bangladesh
This project is licensed under the MIT License - see the LICENSE file for details.
- Seymour Lipschutz for the excellent textbook
- Course instructors and teaching assistants
- Fellow students for discussions and collaboration
- Open source community for inspiration
Made with ❤️ for Data Structures learners
⭐ Star this repository if you find it helpful! ⭐