معرفی و آموزش هفت ساختار داده کلیدی در برنامه‌نویسی

ساختارهای داده یکی از بخش‌های اساسی در علوم کامپیوتر هستند که برای سازمان‌دهی و مدیریت داده‌ها مورد استفاده قرار می‌گیرند. این مقاله به معرفی هفت ساختار داده مهم شامل آرایه‌ها، لیست‌های پیوندی، هَش‌ مَپ‌ ها، پشته‌ها، صف‌ها، درخت‌ها و گراف‌ها می‌پردازد. همچنین در این مقاله برخی از مفاهیم با استفاده از مثال‌های تایپ‌ اسکریپت توضیح داده می‌شوند.




1. آرایه‌ها (Arrays)

تعریف: آرایه‌ها مجموعه‌ای از عناصر هستند که به ترتیب در حافظه قرار می‌گیرند و هر عنصر از طریق یک اندیس دسترسی‌پذیر است.

مثال در تایپ‌اسکریپت:

const numbers: number[] = [10, 20, 30, 40];
console.log(numbers[1]); // خروجی: 20
numbers.push(50); // افزودن عنصر
console.log(numbers); // خروجی: [10, 20, 30, 40, 50]

کاربرد:

ذخیره داده‌های متوالی

دسترسی سریع به عناصر با اندیس

---

2. لیست‌های پیوندی (Linked Lists)

تعریف: لیست‌های پیوندی مجموعه‌ای از گره‌ها هستند که هر گره شامل داده و اشاره‌گر به گره بعدی است.

ساختار در تایپ‌اسکریپت:

class Node {
  value: number;
  next: Node | null = null;
  constructor(value: number) {
    this.value = value;
  }
}

class LinkedList {
  head: Node | null = null;

  add(value: number): void {
    const newNode = new Node(value);
    if (!this.head) {
      this.head = newNode;
    } else {
      let current = this.head;
      while (current.next) {
        current = current.next;
      }
      current.next = newNode;
    }
  }

  print(): void {
    let current = this.head;
    while (current) {
      console.log(current.value);
      current = current.next;
    }
  }
}

const list = new LinkedList();list.add(10);
list.add(20);
list.add(30);
list.print(); // خروجی: 10, 20, 30

کاربرد:

درج و حذف سریع

ذخیره داده‌های پویا

---

3. هش‌مپ‌ها (Hash Maps)

تعریف: هش‌مپ‌ها ساختارهایی برای ذخیره و دسترسی سریع به داده‌ها با استفاده از کلید هستند.

مثال در تایپ‌اسکریپت:

const hashMap: { [key: string]: number } = {};
hashMap[&quota&quot] = 1;
hashMap[&quotb&quot] = 2;

console.log(hashMap[&quota&quot]); // خروجی: 1
delete hashMap[&quotb&quot];
console.log(hashMap); // خروجی: { &quota&quot: 1 }


کاربرد:

ذخیره داده‌های کلید-مقدار

جستجوی سریع




4. پشته‌ها (Stacks)

تعریف: پشته‌ها از اصل آخرین ورودی، اولین خروجی (LIFO) پیروی می‌کنند.

مثال در تایپ‌اسکریپت:

class Stack<T> {
  private items: T[] = [];

  push(item: T): void {
    this.items.push(item);
  }

  pop(): T | undefined {
    return this.items.pop();
  }

  peek(): T | undefined {
    return this.items[this.items.length - 1];
  }
}


const stack = new Stack<number>();
stack.push(10);
stack.push(20);
console.log(stack.peek()); // خروجی: 20
console.log(stack.pop()); // خروجی: 20
console.log(stack.pop()); // خروجی: 10

کاربرد:

بازگشت از توابع

مدیریت حافظه

---

5. صف‌ها (Queues)

تعریف: صف‌ها از اصل اولین ورودی، اولین خروجی (FIFO) پیروی می‌کنند.

مثال در تایپ‌اسکریپت:

class Queue<T> {
  private items: T[] = [];


  enqueue(item: T): void {
    this.items.push(item);
  }

  dequeue(): T | undefined {
    return this.items.shift();
  }


  front(): T | undefined {
    return this.items[0];
  }
}

const queue = new Queue<number>();
queue.enqueue(10);
queue.enqueue(20);
console.log(queue.front()); // خروجی: 10
console.log(queue.dequeue()); // خروجی: 10
console.log(queue.dequeue()); // خروجی: 20

کاربرد:

صف‌های پردازش

مدیریت منابع

---

6. درخت‌ها (Trees)

تعریف: درخت‌ها ساختارهای سلسله‌مراتبی هستند که از گره‌هایی تشکیل شده‌اند.

ساختار ساده در تایپ‌اسکریپت:

class TreeNode {
 value: number;
  left: TreeNode | null = null;
  right: TreeNode | null = null;

  constructor(value: number) {
    this.value = value;
  }
}

const root = new TreeNode(10);
root.left = new TreeNode(5);
root.right = new TreeNode(15);

console.log(root); // ساختار درختی

کاربرد:

جستجوهای سریع

مدیریت سلسله مراتب داده‌ها

---

7. گراف‌ها (Graphs)

تعریف: گراف‌ها مجموعه‌ای از گره‌ها (راس‌ها) هستند که از طریق لبه‌ها به هم متصل می‌شوند.

ساختار پایه در تایپ‌اسکریپت:

class Graph {
  adjacencyList: { [key: string]: string[] } = {};

  addVertex(vertex: string): void {
    if (!this.adjacencyList[vertex]) {
      this.adjacencyList[vertex] = [];
    }
  }

  addEdge(vertex1: string, vertex2: string): void {
    this.adjacencyList[vertex1].push(vertex2);
    this.adjacencyList[vertex2].push(vertex1);
  }
  showGraph(): void {
    console.log(this.adjacencyList);
  }
}
const graph = new Graph();
graph.addVertex(&quotA&quot);
graph.addVertex(&quotB&quot);
graph.addEdge(&quotA&quot, &quotB&quot);
graph.showGraph(); // خروجی: { A: [&quotB&quot], B: [&quotA&quot] }

کاربرد:

مسیریابی

مدل‌سازی شبکه‌ها



ساختارهای داده مانند ابزارهایی هستند که در پروژه‌های نرم‌افزاری استفاده می‌کنید. با درک کاربردها و پیاده‌سازی هر ساختار داده، می‌توانید کدنویسی بهینه‌تری داشته باشید. تمرین این ساختارها با استفاده از زبان‌هایی مانند تایپ‌اسکریپت، درک عمیق‌تری از آن‌ها فراهم می‌کند.