ساختارهای داده یکی از بخشهای اساسی در علوم کامپیوتر هستند که برای سازماندهی و مدیریت دادهها مورد استفاده قرار میگیرند. این مقاله به معرفی هفت ساختار داده مهم شامل آرایهها، لیستهای پیوندی، هَش مَپ ها، پشتهها، صفها، درختها و گرافها میپردازد. همچنین در این مقاله برخی از مفاهیم با استفاده از مثالهای تایپ اسکریپت توضیح داده میشوند.
تعریف: آرایهها مجموعهای از عناصر هستند که به ترتیب در حافظه قرار میگیرند و هر عنصر از طریق یک اندیس دسترسیپذیر است.
مثال در تایپاسکریپت:
const numbers: number[] = [10, 20, 30, 40]; console.log(numbers[1]); // خروجی: 20 numbers.push(50); // افزودن عنصر console.log(numbers); // خروجی: [10, 20, 30, 40, 50]
کاربرد:
ذخیره دادههای متوالی
دسترسی سریع به عناصر با اندیس
---
تعریف: لیستهای پیوندی مجموعهای از گرهها هستند که هر گره شامل داده و اشارهگر به گره بعدی است.
ساختار در تایپاسکریپت:
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
کاربرد:
درج و حذف سریع
ذخیره دادههای پویا
---
تعریف: هشمپها ساختارهایی برای ذخیره و دسترسی سریع به دادهها با استفاده از کلید هستند.
مثال در تایپاسکریپت:
const hashMap: { [key: string]: number } = {}; hashMap["a"] = 1; hashMap["b"] = 2; console.log(hashMap["a"]); // خروجی: 1 delete hashMap["b"]; console.log(hashMap); // خروجی: { "a": 1 }
کاربرد:
ذخیره دادههای کلید-مقدار
جستجوی سریع
تعریف: پشتهها از اصل آخرین ورودی، اولین خروجی (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
کاربرد:
بازگشت از توابع
مدیریت حافظه
---
تعریف: صفها از اصل اولین ورودی، اولین خروجی (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
کاربرد:
صفهای پردازش
مدیریت منابع
---
تعریف: درختها ساختارهای سلسلهمراتبی هستند که از گرههایی تشکیل شدهاند.
ساختار ساده در تایپاسکریپت:
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); // ساختار درختی
کاربرد:
جستجوهای سریع
مدیریت سلسله مراتب دادهها
---
تعریف: گرافها مجموعهای از گرهها (راسها) هستند که از طریق لبهها به هم متصل میشوند.
ساختار پایه در تایپاسکریپت:
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("A"); graph.addVertex("B"); graph.addEdge("A", "B"); graph.showGraph(); // خروجی: { A: ["B"], B: ["A"] }
کاربرد:
مسیریابی
مدلسازی شبکهها
ساختارهای داده مانند ابزارهایی هستند که در پروژههای نرمافزاری استفاده میکنید. با درک کاربردها و پیادهسازی هر ساختار داده، میتوانید کدنویسی بهینهتری داشته باشید. تمرین این ساختارها با استفاده از زبانهایی مانند تایپاسکریپت، درک عمیقتری از آنها فراهم میکند.