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