Мазмунга өтүү

Маалымат структураларын куруу: байланышкан тизмелер, стектер жана кезектер

Сабактын башталышы

Маалымат структураларын куруу: байланышкан тизмелер, стектер жана кезектер

Көрсөткүчтөр, акылдуу көрсөткүчтөр жана шаблондор менен бир байланышкан тизмени, стекти жана кезекти нөлдөн курабыз

Негизги идея: Стандарттык китепкана сизге std::vector, std::list, std::stack жана std::queue дегендерди мурунтан эле берет. Бирок аларды өзүң бир жолу курганда гана маалыматтын кантип сакталып, окулаарын жана ар бир контейнер эмне үчүн ушундай ылдамдыкка ээ экенин чын-чынына түшүнөсүң. Бул темада сиз үч классикалык структураны бир кирпичтен - түйүндөн - чогултуп, алардын ар бири кайсы жерде туура курал экенин көрөсүз.
Аягында сиз мыналарды жасай аласыз:
  • std::unique_ptr менен байланышкан түйүндөрдөн бир байланышкан тизме куруу,
  • ошол тизменин үстүнөн стек (акыркы киргени - биринчи чыгат) жана кезек (биринчи киргени - биринчи чыгат) ишке ашыруу,
  • ар бир структураны класс шаблону менен жалпыланган кылып, каалаган типти сактай тургандай кылуу,
  • компромисстер жөнүндө ой жүгүртүп, тапшырма үчүн туура структураны тандоо.

Бул курстун мурунку темаларына таянат: Акылдуу көрсөткүчтөр, Функция жана класс шаблондору, Жылдыруу семантикасы жана Бештин эрежеси. Аларды көз алдыда кармоо милдеттүү эмес, бирок биз аларга таянабыз.

Түйүн: чынжырдын бир звеносу

Түйүн - бул бир маанини жана кийинки түйүнгө көрсөткүчтү сактаган кичинекей структура. Бүт тизме - бул жөн гана чогуу байланышкан түйүндөр; акыркы түйүн эч нерсеге көрсөтпөйт (nullptr), бул аягын билдирет.

C тилиндеги классикалык жол - жылаңач Node* көрсөткүчү. Заманбап C++те биз ар бир түйүнгө кийинкисине std::unique_ptr аркылуу ээ болуусуна уруксат беребиз. Ээлик өзгөчө - ар бир түйүн так өзүнүн артындагы куйрукка ээ - жана баш жок кылынганда, деструкторлор чынжыр боюнча ылдый иштеп, ар бир түйүндү автоматтык түрдө бошотот. Кол менен delete жок, агып кетүү жок.

#include <memory>

struct Node {
    int value;                       // пайдалуу маалымат
    std::unique_ptr<Node> next;      // чынжырдын калганына ээ
    Node(int v) : value(v), next(nullptr) {}
};

next - бул unique_ptr болгондуктан, түйүн жылдырылуучу гана: сиз чынжырды кокустан көчүрө албайсыз, жана ар бир звенонун так бир ээси бар. Дал ушул кепилдикти тизме каалайт.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө