Существуют следующие основные структуры данных:
1. **Массив** (он же вектор, он же список, он же динамический массив, он же последовательность) - структура данных, при которой в памяти последовательно записываются данные одного типа и, следовательно, одного размера. Получить элемент из массива можно с помощью индекса, сместившись на данное количество элементов от начала массива. Для добавления элемента в массив его необходимо создать заного (если в выделенном под массив блоке памяти не осталось свободного места).
2. **Объект** (он же кортеж, он же структура) - структура данных, при которой хранится фиксированное число элементов различных типов, последовально записанных и выравненных в памяти. Получить элемент из объекта можно обратившись к его идентификатору, при этом компилятор должен знать его смещение он начала объекта. Добавить элемент в объект нельзя.
3. **Связный список** - структура данных, при которой хранится несколько хаотично разбросанных по памяти блоков, содержащих элемент и ссылку (указатель) на следующий (и, возможно, предыдущий) элемент. Получить элемент из кортеж пожно с помощью его индекса, последовательно идя по цепочке элементов. Дла добавления элемента в связный список нужно изменить ссылки ближайших (по индексам) к нему элементам.
4. **Хэш таблица** (она же словарь, она же map, она же таблица) - структура данных, при которой хранятся пары элементов в "дырявом" массиве таким образом, чтобы найти значение по ключу занимало в среднем фиксированное время. Сложные ключи (напимер, строки) обычно хешируются.
5. **Дерево** (илм, если ребёнок может иметь несколько родителей - граф) - структура данных, при которой каждый элемент хранит массив или объект ссылок (указателей) на своих "детей", при этом элементы разбросаны в памяти хаотично.
6. **Бинарное дерево поиска** - дерево, в в каждом элементе которого хранятся две ссылки - на элемент, который меньше, и на элемент, который больше. Поиск в таком дереве в среднем занимает логарифмическое время, вместо линейного в массиве.
มีโครงสร้างข้อมูลพื้นฐานดังต่อไปนี้: 1. **Array** (aka vector, aka list, aka dynamic array, aka sequence) - โครงสร้างข้อมูลที่ข้อมูลประเภทเดียวกันและด้วยเหตุนี้จึงมีการเขียนข้อมูลที่มีขนาดเท่ากันตามลำดับ เข้าสู่ความทรงจำ คุณสามารถรับองค์ประกอบจากอาร์เรย์โดยใช้ดัชนี โดยย้ายองค์ประกอบตามจำนวนที่กำหนดจากจุดเริ่มต้นของอาร์เรย์ ในการเพิ่มองค์ประกอบให้กับอาร์เรย์ จะต้องสร้างขึ้นใหม่อีกครั้ง (หากไม่มีพื้นที่ว่างเหลืออยู่ในบล็อกหน่วยความจำที่จัดสรรสำหรับอาร์เรย์) 2. **Object** (หรือที่รู้จักในชื่อ tuple หรือที่รู้จักในชื่อโครงสร้าง) - โครงสร้างข้อมูลที่จัดเก็บองค์ประกอบประเภทต่างๆ จำนวนคงที่ เขียนตามลำดับและจัดเรียงในหน่วยความจำ คุณสามารถรับองค์ประกอบจากออบเจ็กต์ได้โดยการอ้างอิงถึงตัวระบุ และคอมไพลเลอร์จะต้องทราบค่าออฟเซ็ตของมันที่จุดเริ่มต้นของออบเจ็กต์ คุณไม่สามารถเพิ่มองค์ประกอบให้กับวัตถุได้ 3. **รายการเชื่อมโยง** - โครงสร้างข้อมูลที่เก็บบล็อกที่กระจัดกระจายแบบสุ่มหลายบล็อกในหน่วยความจำที่มีองค์ประกอบและลิงก์ (ตัวชี้) ไปยังองค์ประกอบถัดไป (และอาจเป็นก่อนหน้า) คุณสามารถรับองค์ประกอบจากทูเพิลได้โดยใช้ดัชนีของมัน โดยเรียงตามลำดับห่วงโซ่ขององค์ประกอบ หากต้องการเพิ่มองค์ประกอบลงในรายการที่เชื่อมโยง คุณจะต้องเปลี่ยนลิงก์ขององค์ประกอบที่ใกล้เคียงที่สุด (ตามดัชนี) 4. **ตารางแฮช** (aka พจนานุกรม, aka map, aka table) - โครงสร้างข้อมูลที่คู่ขององค์ประกอบถูกเก็บไว้ในอาร์เรย์ "รั่ว" ในลักษณะที่การค้นหาค่าด้วยคีย์จะใช้จำนวนคงที่ เวลาโดยเฉลี่ย คีย์ที่ซับซ้อน (เช่น สตริง) มักจะถูกแฮช 5. **Tree** (หรือหากเด็กสามารถมีผู้ปกครองได้หลายคน - กราฟ) - โครงสร้างข้อมูลที่แต่ละองค์ประกอบจัดเก็บอาร์เรย์หรืออ็อบเจ็กต์ของลิงก์ (พอยน์เตอร์) ไปยัง "ลูก" ในขณะที่องค์ประกอบกระจัดกระจาย สุ่มอยู่ในความทรงจำ 6. **แผนผังการค้นหาแบบไบนารี** - แผนผังที่แต่ละองค์ประกอบจัดเก็บสองลิงก์ - ไปยังองค์ประกอบที่เล็กกว่าและไปยังองค์ประกอบที่ใหญ่กว่า การค้นหาต้นไม้ดังกล่าวจะใช้เวลาลอการิทึมโดยเฉลี่ย แทนที่จะเป็นเวลาเชิงเส้นในอาร์เรย์
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence