CodeCrafters
775 subscribers
90 photos
50 videos
41 files
170 links
Download Telegram
بزودی سلسله مراتبی از ویدیوهای آموزشی با محوریت الگوریتم‌ها براتون میزاریم

ویدیو‌ها زبان اصلی میباشد که توسط یکی از دوستان بررسی و مقالاتی بابتش ترجمه خواهد شد


این دست از ویدیوهارو میتونید با هشتک

#video
#algorithm

در کانال ما دنبال کنید


@code_crafters
🔥7
Media is too big
VIEW IN TELEGRAM
Stacks and Queues 3 Using arrays to write stacks and queues

#video
#algorithm

@code_crafters

لینک مشاهده از یوتیوب:
https://m.youtube.com/watch?v=sHgHZdZEjz4&list=PLpPXw4zFa0uKKhaSz87IowJnOTzh9tiBk&index=24&pp=iAQB
وب سایت کانال https://codecrafters.ir

لیست هشتک‌ها در کانال رو در زیر براتون خواهم گذاشت و آپدیت خواهد شد


#design_patterns الگوهای طراحی

#postgresql پستگرس

#k8s کوبرنتیز

#agile اجایل
#scrum

#algorithm الگوریتم

#video

#meeting متینگ‌

#principles اصول کدنویسی

#project_managment_system مدیریت تیم

#free خارج از مبحث کامپیوتر


#app برنامه‌های کاربردی

#Git #actions مباحث مربوط به گیت و گیتلب

#conda #env کار با

#Docker مباحث مربوط به داکر

#AI #ML مباحث هوش مصنوعی

#book معرفی کتاب

#monitoring بررسی وضعیت سیستم و کد

#concurrency همزمانی کتاب grokking concurrency


#blovkchain #web3

#DDD #domain_driven_design

#BDD #behavior_driven_development

#soa #sso #microservice


@Code_Crafters

Git Hub:
https://github.com/CodeCrafters-ir/
👍1
CodeCrafters
https://telegra.ph/Stacks-and-queues-09-30 #algorithm @code_crafters
Queue¹
صف²
یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف می‌کند.
عناصر از یک انتها اضافه می‌شوند که به آن rear⁴ می‌گویند و از انتهای دیگر به نام front⁵ حذف می‌شوند.

به این رفتار FIFO⁶ (First in First Out) گفته می‌شود.
برای تجسم عملکرد آن می توانید یک صف از افراد را در نظر بگیرید. افراد به ترتیب وارد صف می شوند. به مرور طول صف افزایش می‌یابد. سپس افراد به ترتیبی که وارد صف شده اند، از صف خارج می‌شوند. در این صورت اولین نفری که وارد صف شده، اولین نفری است که از صف خارج خواهد شد.

اصطلاح شناسی
فرآیند افزودن عناصر جدید به صف را enqueue⁷ می‌گویند.
فرآیند حذف یک عنصر از صف را dequeue⁸ می‌گویند.

برنامه‌های کاربردی
از صف‌ها هر زمان که نیاز به مدیریت اشیاء⁹ داشته باشیم به منظور شروع با اولین مورد وارد شده استفاده می‌شود.
سناریوها شامل چاپ اسناد¹⁰ بر روی چاپگر، سیستم‌های مرکز تماس پاسخگویی به افراد در انتظار و غیره است.

📌 لیست¹¹های پایتون ساده‌ترین راه برای پیاده‌سازی عملکرد یک صف هستند.


پانوشت:
1. به فارسی: صف
2. به انگلیسی: Queue
3. Stack (به فارسی: پُشته)
4. انتها، پشت
5. جلو
6. First in First Out
یا به اختصار FIFO یعنی خروج به ترتیب ورود، یکی از روش‌های سازماندهی کنترل داده با توجه به زمان و اولویت‌بندی است.
7. enqueue
کردن، عنصری را به انتهای Queue (صف) اضافه میکند.
8. dequeue
کردن، اولین عنصر یا همان عنصر جلوی صف را از Queue خارج و حذف خواهد کرد.
9. Object
10. Document
11. List

#data_structures
#algorithm

@code_crafters
👍4🔥3
CodeCrafters
Queue¹ صف² یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف می‌کند. عناصر از یک انتها اضافه می‌شوند که به آن rear⁴ می‌گویند و از انتهای دیگر به نام front⁵ حذف می‌شوند. به این رفتار FIFO⁶ (First in First Out) گفته می‌شود. برای تجسم…
صف در پایتون

بیایید کلاس Queue را با متُدهای enqueue، dequeue، is_empty و print مربوطه پیاده سازی کنیم.

ما از یک لیست برای ذخیره عناصر استفاده خواهیم کرد.
class Queue:
def __init__(self):
self.items = []

def is_empty(self):
return self.items == []

def enqueue(self, item):
self.items.insert(0, item)

def dequeue(self):
return self.items.pop()

def print_queue(self):
print(self.items)

q = Queue()
q.enqueue('a')
q.enqueue('b')
q.enqueue('42')
q.print_queue()

q.dequeue()
q.print_queue()


متُد enqueue یک عنصر را در ابتدای لیست اضافه می‌کند، در حالی که متُد dequeue آخرین عنصر را حذف می‌کند.

ℹ️ با کد بازی کنید و صف را در عمل ببینید!

#data_structures
#algorithm

@code_crafters
🔥4👍3👌1
Linked List¹

یک لینکدلیست² مجموعه‌ای از گره³ها است که در آن هر گره دادههای خود و پیوند⁵ی به گره بعدی را ذخیره می‌کند.

یک گره به گره دیگری پیوند دارد و آنچه را که می‌توان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل می‌دهد:


اولین گره سَر⁷ نامیده می‌شود و به عنوان نقطه شروع برای هر تکرار⁸ در لیست استفاده می‌شود. آخرین گره باید پیوند آن به None⁹ اشاره داشته باشد، تا انتهای لیست تعیین شود.

برخلاف استک‌ها¹⁰ و صف‌ها¹¹، می‌توانید گره‌ها را در هر جایگاهی از لینکدلیست (شبیه به یک لیست استاندارد) اضافه و حذف کنید.

برنامه‌های کاربردی

لینکدلیست‌ها زمانی مفید هستند که داده‌های شما پیوند داده شده است. به عنوان مثال، زمانی که به عملکرد بازگردانی-بازانجام¹² نیاز دارید، گره‌ها می‌توانند وضعیت را با پیوندهایی به حالت‌های قبلی و بعدی نشان دهند. مثال دیگر می‌تواند یک پلی‌لیست¹³ موسیقی باشد که در آن هر بُرش¹⁴ با بُرش بعدی مرتبط است.

📌 لینکدلیست‌ها همچنین می‌توانند برای ایجاد سایر ساختارهای داده¹⁵ مانند استک‌ها، صف‌ها و گراف‌ها¹⁶ استفاده شوند.


پانوشت:

1. به فارسی: لیست پیوندی (فهرست پیوندی)
2. Linked List
3. Node
یا نود یک نقطه اتصال در شبکه است. این نقطه اتصال می‌تواند یکی از نقاط توزیع مجدد داده یا نقاط ارتباطی باشد که اطلاعات را ارسال و دریافت می‌کنند. اما این همه آنچه که در خصوص node یا گره در شبکه نیست.
4. Data
5. Link
6. Linked Chain
7. Head
8. Iteration
9. از None برای نشان دادن عدم وجود یک مقدار استفاده می‌شود. این در زبان‌های دیگر برنامه‌نویسی مشابه است. مانند دیگر مقادیر خالی مانند 0، [] و رشته خالی، زمانی که به یک متغیر بولی تبدیل می‌شود false خواهد بود.
10. Stacks (پشته‌ها)
11. Queues
12. Undo/ Redo
13. Playlist
14. Clip
15. Data Structures
16. Graphs
دیتا استراکچر یا ساختمان داده‌ای است که به منظور مدل‌سازی مجموعه‌ای از اشیاء و ارتباطات مابین آن‌ها مورد استفاده قرار می‌گیرد.

#data_structures
#algorithm

@code_crafters
🔥4👍1
CodeCrafters
Linked List¹ یک لینکدلیست² مجموعه‌ای از گره³ها است که در آن هر گره داده⁴های خود و پیوند⁵ی به گره بعدی را ذخیره می‌کند. یک گره به گره دیگری پیوند دارد و آنچه را که می‌توان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل می‌دهد: اولین گره سَر⁷ نامیده می‌شود…
لینکد‌لیست‌ در پایتون

هر گره شامل داده و پیوند به گره بعدی خواهد بود.

بیایید با ایجاد کلاس Node¹ شروع کنیم:
class Node:
def __init__(self, data, next):
self.data = data
self.next = next


اکنون می‌توانیم کلاس LinkedList را با متُدهای مربوطه ایجاد کنیم:
class Node:
def __init__(self, data, next):
self.data = data
self.next = next

class LinkedList:
def __init__(self):
self.head = None

def add_at_front(self, data):
self.head = Node(data, self.head)

def add_at_end(self, data):
if not self.head:
self.head = Node(data, None)
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = Node(data, None)

def get_last_node(self):
n = self.head
while(n.next != None):
n = n.next
return n.data

def is_empty(self):
return self.head == None

def print_list(self):
n = self.head
while n != None:
print(n.data, end = " => ")
n = n.next
print()


s = LinkedList()
s.add_at_front(5)
s.add_at_end(8)
s.add_at_front(9)

s.print_list()
print(s.get_last_node())


متُد ()add_at_front یک Node جدید را به عنوان سَر لیست اضافه می کند و سَر قبلی را به آن پیوند می‌دهد.
متُد ()add_at_end با استفاده از یک حلقه² while تا انتهای لیست تکرار می‌شود و گره جدید را به عنوان پیوندِ آخرین گره اضافه می‌کند.

ℹ️ کد را اجرا کنید و ببینید چگونه کار می‌کند!


پانوشت:

1. نام کلاس "گره" (نود/ Node)
2. حلقه در برنامه نویسی یکی از عنصرهای برنامه‌نویسی به حساب می‌آید که به وسیله آن می‌توان بخشی از کدها را به تعداد دفعات مشخص تا زمانی تکرار کرد که فرایند و پروسه مورد نظر به پایان برسد.

#data_structures
#algorithm

@code_crafters
👍4🔥4👌1
Array¹
آرایه²
ساختمان داده آرایه‌³ای یک مفهوم اساسی در علوم کامپیوتر است که مجموعه‌ای از عناصر⁴ را در یک قطعه⁵ پیوسته از حافظه ذخیره می‌کند. این امکان دسترسی موثر به عناصر را با استفاده از اندیس‌ها⁶ فراهم می‌کند و به طور گسترده در برنامه‌نویسی برای سازماندهی⁷ و دستکاری⁸ داده‌ها استفاده می‌شود.

آرایه چیست؟
آرایه یک ساختمان داده خطی⁹ است که در آن همه عناصر به صورت متوالی¹⁰ مرتب شده‌اند. این مجموعه‌ای از عناصر از نوع داده یکسان یا مواردی از همان نوع متغیر¹¹ است که در مکان‌های حافظه به هم پیوسته ذخیره می‌شوند. این یکی از محبوب‌ترین و ساده‌ترین ساختمان‌های داده است و اغلب برای پیاده‌سازی سایر ساختمان‌های داده استفاده می‌شود. هر مورد¹² در یک آرایه با شروع از 0 ایندکس می‌شود. هر عنصر در یک آرایه از طریق ایندکس آن قابل دسترسی است.
1_تصویر مربوطه

برای سادگی، می‌توانیم آرایه‌ای را به‌عنوان تعدادی پله در نظر بگیریم که روی هر پله یک مقدار قرار می‌گیرد (مثلاً یکی از دوستان شما). در اینجا، شما می‌توانید مکان هر یک از دوستان خود را به سادگی با دانستن تعداد پلکانی که در آن قرار دارند شناسایی کنید.

این کار محاسبه موقعیت هر عنصر را به سادگی با افزودن یک افست¹³ به یک مقدار پایه، یعنی مکان حافظه اولین عنصر آرایه (که معمولاً با نام آرایه مشخص می‌شود) آسان‌تر می‌کند. مقدار پایه ایندکس 0 است و تفاوت بین این دو ایندکس‌ها افست است.

📌 به یاد داشته باشید: "مکان ایندکس بعدی به نوع داده‌ای که استفاده می‌کنیم بستگی دارد".

آیا اندازه آرایه همیشه ثابت است؟
در زبان برنامه‌نویسی ¹⁴C، آرایه دارای یک اندازه ثابت است، به این معنی که وقتی اندازه به آن داده می‌شود، نمی توان آن را تغییر داد، یعنی نمی‌توانید آن را کاهش دهید و نمی‌توانید آن را گسترش دهید. دلیل آن این بود که برای گسترش اگر اندازه را تغییر دهیم، نمی‌توانیم مطمئن باشیم (هر بار امکان ندارد) که مکان حافظه بعدی را به صورت رایگان در اختیارمان قرار دهد. کاهش یافتن کار نخواهد کرد زیرا آرایه، زمانی که اعلام شود، حافظه به صورت ایستا¹⁵ تخصیص می‌یابد، و بنابراین کامپایلر¹⁶ تنها کسی است که می‌تواند آن را از بین ببرد.

اصطلاحات پایه آرایه
- ایندکس آرایه¹⁷: در یک آرایه، عناصر با ایندکس‌هایشان شناسایی می‌شوند. ایندکس آرایه از 0 شروع می‌شود.
- عنصر آرایه¹⁸: عناصر، مواردی هستند که در یک آرایه ذخیره می‌شوند و با ایندکس آن‌ها می‌توان به آن‌ها دسترسی داشت.
- طول آرایه¹⁹: طول یک آرایه با تعداد عناصری که می تواند داشته باشد تعیین می‌شود.

نمایش حافظه آرایه
در یک آرایه، تمام عناصر در مکان‌های حافظه به هم پیوسته ذخیره می‌شوند. بنابراین، اگر یک آرایه را مقداردهی اولیه کنیم:
2_تصویر مربوطه

پانوشت:
1. به فارسی: آرایه
2. Array 3. Array Data Structure
4. elements 5. block
6. indices 7. organizing
8. manipulating 9. Linear Data Structure
10. sequential 11. Variable
12. item 13. offset
14. C Programming Language
15. Static
16. Compiler
یا کامپایلر نرم‌افزاری برای تبدیل کُد منبع (Source Code) به کُد شی (Object Code) است. به عبارت دیگر می‌توان گفت که کامپایلر کُدهای نوشته شده به زبان سطح بالا (نزدیک به زبان انسان) توسط برنامه‌نویسان را به زبان دودویی ماشین تبدیل می‌کند.
17. Array Index 18. Array element
19. Array Length

#data_structures
#algorithm

@code_crafters
6👍1
اهمیت آرایه
فرض کنید کلاسی متشکل از 5 دانش آموز وجود دارد و اگر باید سوابق نمرات آن‌ها را در امتحان نگه‌داریم، می‌توانیم این کار را با اعلام مجزا پنج متغیر و نگه‌داری پیگیری سوابق انجام دهیم، اما اگر تعداد دانش‌آموزان بسیار زیاد شود، چه می‌شود. دستکاری و نگهداری داده‌ها چالش‌برانگیز خواهد بود.
معنی آن این است که ما می‌توانیم از متغیرهای عادی (... ,v1, v2, v3) زمانی که تعداد اشیاء کمی داریم استفاده کنیم. اما اگر بخواهیم تعداد زیادی نمونه را ذخیره کنیم، مدیریت آن‌ها با متغیرهای عادی مشکل می شود. ایده آرایه این است که نمونه‌های زیادی را در یک متغیر نشان دهد.
3_تصویر مربوطه

انواع آرایه‌ها
آرایه‌ها را می‌توان به دو صورت طبقه‌بندی کرد:
- بر اساس تخصیص حافظه¹
- بر اساس ابعاد²

4_تصویر مربوطه

انواع آرایه‌ها بر اساس ابعاد:
دو نوع اصلی آرایه وجود دارد که به انواع آرایه‌ها بر اساس ابعاد تقسیم‌بندی می‌شوند:
- 1. آرایه‌های تک‌بُعدی (آرایه 1 بُعدی)³: می‌توانید یک آرایه 1 بُعدی را به عنوان یک ردیف تصور کنید که در آن عناصر یکی پس از دیگری ذخیره می‌شوند یا به عبارتی این آرایه‌ها یک ردیف از عناصر را ذخیره می‌کنند.
5_تصویر مربوطه
- 2. آرایه‌های چندبُعدی⁴: آرایه چند بُعدی آرایه‌ای با بیش از یک بُعد است. ما می‌توانیم از آرایه چند بُعدی برای ذخیره داده‌های پیچیده در قالب جداول و غیره استفاده کنیم. می‌توانیم آرایه‌های 2 بُعدی⁵، آرایه‌های 3 بُعدی⁶، آرایه‌های 4 بُعدی⁷ و از این قبیل داشته باشیم و به عبارتی این آرایه‌ها چندین ردیف از عناصر را ذخیره می‌کنند.

+ آرایه دو بُعدی (آرایه 2 بُعدی یا ماتریس)⁸: آرایه‌های چندبُعدیِ 2 بُعدی را می‌توان به عنوان آرایه‌ای از آرایه‌ها یا به عنوان ماتریسی متشکل از ردیف‌ها و ستون‌ها در نظر گرفت.
6_تصویر مربوطه
+ آرایه سه بُعدی (آرایه 3 بُعدی)⁹: یک آرایه چند بُعدیِ 3 بُعدی شامل سه بُعد است، بنابراین می‌توان آن را آرایه‌ای از آرایه‌های دو بُعدی در نظر گرفت.
7_تصویر مربوطه

انواع آرایه‌ها بر اساس تخصیص حافظه:
1. آرایه‌‌های ایستا¹⁰:
در این نوع آرایه، حافظه در زمان کامپایل با اندازه ثابتی از آن تخصیص می‌یابد. ما نمی‌توانیم اندازه این آرایه را تغییر دهیم یا به روز کنیم. این نوع تخصیص حافظه به عنوان تخصیص حافظه ثابت¹¹ یا زمانِ کامپایل¹² نیز شناخته می‌شود. در اینجا فقط یک اندازه ثابت (یعنی اندازه ای که در پرانتز [] ذکر شده است) از حافظه برای ذخیره‌سازی اختصاص داده می‌شود. در صورتی که اندازه آرایه را ندانیم، اگر اندازه بزرگتر را اعلام کنیم و تعداد عناصر کمتری را ذخیره کنیم باعث هدر رفتن حافظه می‌شود یا اندازه کمتری را نسبت به تعداد عناصر اعلام می‌کنیم، در این صورت حافظه کافی برای ذخیره همه عناصر نخواهیم داشت. در چنین مواردی، تخصیص حافظه ثابت ترجیح داده نمی‌شود.
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};

// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};

// Static Array
int[] arr = { 1, 2, 3, 4, 5 };

import array
# Static Array
arr = array.array('i', [1, 2, 3, 4, 5])

// Static array
int[] arr = { 1, 2, 3, 4, 5 };

let arr[] = {1, 2, 3, 4, 5}

پانوشت:
1. Memory Allocation 2. Dimensions
3. One-dimensional Array(1-D Array)
4. Multi-dimensional Array
5. 2-D arrays 6. 3-D arrays
7. 4-D arrays
8. Two-Dimensional Array(2-D Array or Matrix)
9. Three-Dimensional Array(3-D Array)
10. Static Arrays 11. static
12. compile-time

#data_structures
#algorithm

@code_crafters
👌52👍2
2. آرایه‌های پویا¹:
در این نوع آرایه، حافظه در زمان اجرا تخصیص داده می‌شود اما اندازه ثابتی² ندارد. فرض کنید، کاربر می‌خواهد هر اندازه تصادفی³ یک آرایه را اعلام کند، پس از آرایه ایستا استفاده نمی‌کنیم، به جای آن از یک آرایه پویا استفاده می‌شود. این نوع تخصیص حافظه به عنوان تخصیص حافظه پویا یا زمانِ اجرا⁴ نیز شناخته می‌شود. برای تعیین اندازه آن در طول زمان اجرای هر برنامه استفاده می‌شود.
// Dynamic Integer Array
int* arr = new int[5];

// Dynamic Integer Array
int* arr = malloc(sizeof(int) * 5);

// Dynamic Integer Array
ArrayList<Integer> arr = new ArrayList<>();

# Dynamic Array
arr = []

// Dynamic Integer Array
int[] arr = new int[5];

// Dynamic Array
let arr = new Array(5);

پانوشت:
1. Dynamic Arrays
2. fixed size
3. random
4. run-time

#data_structures
#algorithm

@code_crafters
👍73👏1
عملیات روی آرایه
1. پیمایش آرایه¹:
پیمایش آرایه شامل یک بار بازدید از تمام عناصر آرایه به ترتیب خاصی است (به عنوان مثال: متوالی²، معکوس‌³). در زیر پیاده‌سازی پیمایش آرایه در زبان‌های مختلف آورده شده است:
int arr[] = { 1, 2, 3, 4, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
// Traversing over arr[]
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}

int arr[] = { 1, 2, 3, 4, 5 };
// Traversing over arr[]
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}

import array
arr = array.array('i', [1, 2, 3, 4, 5])
# Traversing over arr[]
for x in arr:
print(x, end=" ")

int[] arr = { 1, 2, 3, 4, 5 };
// Traversing over arr[]
for (int i = 0; i < arr.Length; i++)
Console.Write(" " + arr[i]);

let arr = [1, 2, 3, 4, 5]
// Traversing over arr[]
for (let x of arr)
console.log(x)

int arr[] = { 1, 2, 3, 4, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
// Traversing over arr[]
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}

پانوشت:
1. Array Traversal
2. sequential
3. reverse

#data_structures
#algorithm

@code_crafters
7👍1👌1
2. درج در آرایه¹:
ما می‌توانیم یک یا چند عنصر را در هر موقعیتی در آرایه وارد کنیم یا به عبارتی در یک ایندکس خاص. در زیر پیاده‌سازی درج در آرایه به زبان‌های مختلف برنامه‌نویسی آورده شده است:
// Function to insert element
// at a specific position
void insertElement(int arr[], int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];

arr[pos] = x;
}

// Function to insert element
// at a specific position
void insertElement(int arr[], int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];

arr[pos] = x;
}

static void insertElement(int arr[], int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];
arr[pos] = x;
}

# python Program to Insert an element
# at a specific position in an Array

def insertElement(arr, n, x, pos):

# shift elements to the right
# which are on the right side of pos
for i in range(n-1, pos-1, -1):
arr[i + 1] = arr[i]

arr[pos] = x

static void insertElement(int[] arr, int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];
arr[pos] = x;
}

// javascript Program to Insert an element
// at a specific position in an Array
function insertElement(arr, n, x, pos)
{
// shift elements to the right
// which are on the right side of pos
var i = n - 1;
for (i; i >= pos; i--)
{
arr[i + 1] = arr[i];
}
arr[pos] = x;
}

پانوشت:
1. Insertion in Array

#data_structures
#algorithm

@code_crafters
7👍1💯1
CodeCrafters
2. درج در آرایه¹: ما می‌توانیم یک یا چند عنصر را در هر موقعیتی در آرایه وارد کنیم یا به عبارتی در یک ایندکس خاص. در زیر پیاده‌سازی درج در آرایه به زبان‌های مختلف برنامه‌نویسی آورده شده است: // Function to insert element // at a specific position void insertElement(int…
3. حذف در آرایه¹:
ما می‌توانیم یک عنصر را در هر ایندکسی در یک آرایه حذف کنیم. در زیر اجرای حذف عنصر در یک آرایه آمده است:
// To search a key to be deleted
int findElement(int arr[], int n, int key);

// Function to delete an element
int deleteElement(int arr[], int n, int key)
{
// Find position of element to be deleted
int pos = findElement(arr, n, key);

if (pos == -1) {
cout << "Element not found";
return n;
}

// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];

return n - 1;
}

// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// Return -1 if key is not found
return -1;
}

// C program to implement delete operation in a
// unsorted array
#include <stdio.h>

// To search a key to be deleted
int findElement(int arr[], int n, int key);

// Function to delete an element
int deleteElement(int arr[], int n, int key)
{
// Find position of element to be deleted
int pos = findElement(arr, n, key);

if (pos == -1) {
printf("Element not found");
return n;
}

// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];

return n - 1;
}

// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// Return -1 if key is not found
return -1;
}

from array import array

# Function to search for a key in the array
def findElement(arr, n, key):
for i in range(n):
# Return the index if key is found
if arr[i] == key:
return i
# Return -1 if key is not found
return -1

# Function to delete an element from the array
def deleteElement(arr, n, key):
# Find position of element to be deleted
pos = findElement(arr, n, key)

if pos == -1:
print("Element not found")
return n

# Deleting element
for i in range(pos, n - 1):
arr[i] = arr[i + 1]

return n - 1

int findElement(int[] arr, int n, int key)
{

int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;

return -1;
}

// Function to delete an element
int deleteElement(int[] arr, int n, int key)
{
// Find position of element
// to be deleted
int pos = findElement(arr, n, key);

if (pos == -1) {
Console.WriteLine("Element not found");
return n;
}

// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];

return n - 1;
}

پانوشت:
1. Deletion in Array

#data_structures
#algorithm

@code_crafters
5👍1👏1
CodeCrafters
3. حذف در آرایه¹: ما می‌توانیم یک عنصر را در هر ایندکسی در یک آرایه حذف کنیم. در زیر اجرای حذف عنصر در یک آرایه آمده است: // To search a key to be deleted int findElement(int arr[], int n, int key); // Function to delete an element int deleteElement(int arr[]…
// function to search a key to
// be deleted
static int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// Return -1 if key is not found
return -1;
}

// Function to delete an element
static int deleteElement(int arr[], int n, int key)
{
// Find position of element to be
// deleted
int pos = findElement(arr, n, key);

if (pos == -1) {
System.out.println("Element not found");
return n;
}

// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];

return n - 1;
}

// function to search a key to  be deleted
function findElement(arr,n,key)
{
let i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
return -1;
}

// Function to delete an element
function deleteElement(arr,n,key)
{
// Find position of element to be deleted
let pos = findElement(arr, n, key);

if (pos == -1)
{
document.write("Element not found");
return n;
}
// Deleting element
let i;
for (i = pos; i< n - 1; i++)
arr[i] = arr[i + 1];
return n - 1;
}


#data_structures
#algorithm

@code_crafters
🔥5👍2👏1
4. جستجو در آرایه¹:
ما می‌توانیم روی یک آرایه پیمایش کنیم و یک عنصر را جستجو کنیم یا به عبارتی یافتن ایندکس یک عنصر در یک آرایه. در زیر اجرای حذف عنصر در یک آرایه آمده است:
// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;

// If the key is not found
return -1;
}

// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;

// If the key is not found
return -1;
}

// Function to implement search operation
int findElement(int arr[], int n, int key)
{
for (int i = 0; i < n; i++)
if (arr[i] == key)
return i;

// If the key is not found
return -1;
}

# Python program for searching in
# unsorted array

def findElement(arr, n, key):
for i in range(n):
if (arr[i] == key):
return i
# If the key is not found
return -1

// Function to implement
// search operation
int findElement(int[] arr, int n, int key)
{
for (int i = 0; i < n; i++)
if (arr[i] == key)
return i;

// If the key is not found
return -1;
}

// Function to implement search operation 
function findElement( arr, n, key)
{
let i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;

return -1;
}

پانوشت:
1. Searching in Array

#data_structures
#algorithm

@code_crafters
9👍2👏1
CodeCrafters
4. جستجو در آرایه¹: ما می‌توانیم روی یک آرایه پیمایش کنیم و یک عنصر را جستجو کنیم یا به عبارتی یافتن ایندکس یک عنصر در یک آرایه. در زیر اجرای حذف عنصر در یک آرایه آمده است: // Function to implement search operation int findElement(int arr[], int n, int key)…
تحلیل پیچیدگی عملیات‌ها بر روی آرایه

پیچیدگی زمانی¹:

عملیات پیمایش درج حذف جستجو
بهترین حالت Ω(1) Ω(1) Ω(1) Ω(N)
حالت میانگین
θ(N) θ(N) θ(N) θ(N)
بدترین حالت
O(N) O(N) O(N) O(N)

پیچیدگی فضایی²:
عملیات پیمایش درج حذف جستجو
بهترین حالت Ω(1) Ω(1) Ω(1) Ω(1)
حالت میانگین
θ(1) θ(N) θ(N) θ(1)
بدترین حالت
O(1) O(N) O(N) O(1)

پانوشت:
1. Time Complexity
2. Space Complexity

#data_structures
#algorithm

@code_crafters
6👍1👏1
نیاز به ساختمان‌های داده آرایه
آرایه‌ها یک ساختمان داده اساسی در علوم کامپیوتر هستند. آن‌ها در طیف گسترده‌ای از برنامه‌های کاربردی استفاده می‌شوند، از جمله:
- ذخیره‌سازی داده‌ها برای پردازش
- پیاده‌سازی ساختمان‌های داده مانند استک‌ها و صف¹ها
- نمایش داده‌ها در جداول و ماتریس²ها
- ایجاد ساختمان‌های داده پویا³ مانند لیست‌های پیوندی⁴ و درخت⁵ها

مزایای آرایه
- آرایه‌ها اجازه دسترسی تصادفی به عناصر را می‌دهند. این باعث می‌شود دسترسی به عناصر بر اساس موقعیت سریع‌تر شود.
- آرایه‌ها محل ذخیره حافظه‌پنهان(کَش)⁶ بهتری دارند که تفاوت نسبتاً بزرگی در عملکرد ایجاد می‌کند.
- آرایه‌ها چندین مورد داده از یک نوع را با استفاده از یک نام واحد نشان می‌دهند.
- آرایه‌ها برای پیاده‌سازی سایر ساختمان‌های داده مانند لیست‌های پیوندی، استک‌ها، صف‌ها، درخت‌ها، نمودارها⁷ و غیره استفاده می‌شوند.

معایب آرایه
- از آن‌جایی که آرایه‌ها اندازه ثابتی دارند، هنگامی که حافظه به آن‌ها تخصیص یابد، نمی‌توان آن را کاهش یا افزایش داد و در صورت لزوم ذخیره داده‌های اضافی غیرممکن می‌شود. آرایه‌ای با اندازه ثابت آرایه ایستا نامیده می‌شود.
- تخصیص حافظه کمتر از مقدار مورد نیاز به یک آرایه منجر به از دست رفتن داده‌ها می‌شود.
- یک آرایه در طبیعت یکدست است، بنابراین، یک آرایه واحد نمی‌تواند مقادیر انواع داده‌های مختلف را ذخیره کند.
- آرایه‌ها داده‌ها را در مکان‌های حافظه پیوسته ذخیره می‌کنند که پیاده‌سازی حذف و درج را بسیار دشوار می‌کند. این مشکل با پیاده‌سازی لیست‌های پیوندی برطرف می‌شود که امکان دسترسی متوالی به عناصر را فراهم می‌کند.

برنامه‌های کاربردی آرایه
آرایه‌ها در برنامه‌های کاربردی مختلفی استفاده می‌شوند، از جمله:
- ذخیره‌سازی داده‌ها برای پردازش
- آن‌ها در پیاده‌سازی سایر ساختمان‌های داده مانند لیست‌های آرایه⁸، استک‌ها و صف‌ها، هرم‌ها⁹، جداول درهم‌سازی یا چکیده‌سازی(جداول هَش)¹⁰، بُردارها(وِکتور)¹¹ و ماتریس‌ها استفاده می‌شوند.
- نمایش داده‌ها در جداول و ماتریس‌ها
- ایجاد ساختمان‌های داده پویا مانند لیست‌های پیوندی و درخت‌ها
- سوابق¹² پایگاه داده معمولاً به صورت آرایه پیاده‌سازی می‌شوند.
- در جداول جستجو¹³ توسط کامپیوتر استفاده می‌شود.

نتیجه

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

پانوشت:
1. Queues 2. Matrices
3. Dynamic Data Structures
4. Linked Lists 5. Trees
6. cache locality 7. Graphs
8. Array Lists 9. Heaps
10. Hash Tables 11. Vectors
12. records 13. lookup tables

#data_structures
#algorithm

@code_crafters
🔥6👍32