Кіріспе
Компьютерлік ғылымда тізім немесе тізбек – бір мән бірнеше рет кездесуі мүмкін, реттелген мәндердің шекті санын көрсететін абстрактілі деректер түрі. Тізімнің бір мысалы – математикалық түсініктердің компьютерлік бейнесі, ал тізімдер контейнерлердің қарапайым мысалы болып табылады, себебі олар басқа мәндерді қамтиды. Егер бір мән бірнеше рет кездессе, әр кездесуі жеке элемент ретінде қарастырылады. "Тізім" атауы абстрактілі тізімдерді іске асыруға қолданылатын бірнеше нақты деректер құрылымдары үшін де қолданылады, әсіресе байланысты тізімдер мен массивтер үшін. Кейбір жағдайларда, мысалы Lisp бағдарламалауда, "тізім" термині массивке емес, байланысты тізімге қатысты болуы мүмкін. Сыныптарға негізделген бағдарламалауда тізімдер әдетте жалпы "тізім" класының кіші кластары ретінде ұсынылады және жеке итераторлар арқылы қарастырылады. Көптеген бағдарламалау тілдері тізімдік дерек түрлерін қолдайды және тізімдер мен тізім операциялары үшін арнайы синтаксис және семантикаға ие. Тізімді элементтерді үтірлермен, нүктелермен және/немесе бос орындармен бөліп, әртүрлі жұптық белгілердің ішінде, мысалы, жақшалар (' '), тік жақшалар ('[]'), фигуралық жақшалар ('{}') немесе бұрыштық жақшалар ('<>') арқылы жазу арқылы құруға болады. Кейбір тілдер тізім түрлерін массивтер сияқты индекстеуге немесе кесуге мүмкіндік береді, мұндай жағдайда дерек түрі массив ретінде дәлірек сипатталады. Типтер теориясы мен функционалдық бағдарламалауда абстрактілі тізімдер әдетте екі операция арқылы индуктивті түрде анықталады: бос тізімді қайтаратын nil және тізімнің басына элемент қосатын cons.
sequential data structures
In computer science, a list or sequence is an abstract data type that represents a finite number of ordered values, where the same value may occur more than once. An instance of a list is a computer representation of the mathematical concept of a tuple or finite sequence; the (potentially) infinite analog of a list is a stream. Lists are a basic example of containers, as they contain other values. If the same value occurs multiple times, each occurrence is considered a distinct item. The name list is also used for several concrete data structures that can be used to implement abstract lists, especially linked lists and arrays. In some contexts, such as in Lisp programming, the term list may refer specifically to a linked list rather than an array. In class based programming, lists are usually provided as instances of subclasses of a generic "list" class, and traversed via separate iterators. Many programming languages provide support for list data types, and have special syntax and semantics for lists and list operations. A list can often be constructed by writing the items in sequence, separated by commas, semicolons, and/or spaces, within a pair of delimiters such as parentheses ' ', brackets '[]', braces '{}', or angle brackets '<>'. Some languages may allow list types to be indexed or sliced like array types, in which case the data type is more accurately described as an array. In type theory and functional programming, abstract lists are usually defined inductively by two operations: nil that yields the empty list, and cons, which adds an item at the beginning of a list.
Қолданылу
Тізімдер әдетте байланысты тізімдер (бір немесе екі жақты байланысты) немесе массивтер түрінде, көбінесе өзгермелі ұзындығы немесе динамикалық массивтер ретінде іске асырылады. Тізімдерді іске асырудың стандартты тәсілі, Lisp бағдарламалау тілінен бастау алады, онда тізімнің әрбір элементі өзінің мәнін және тізімдегі келесі элементтің орнын көрсететін сілтемені қамтиды. Бұл тізімде ішкі тізімдердің болуына байланысты байланысты тізімге немесе ағашқа әкеледі. Кейбір ескі Lisp нұсқалары (мысалы, Symbolics 3600 Lisp нұсқасы) пайдаланушыға көрінбейтін арнайы ішкі өрнектемеге ие "сығылған тізімдерді" (CDR кодтауын пайдалана отырып) қолдады. Тізімдерді итерация немесе рекурсия арқылы өңдеуге болады. Алғашқысы императивті бағдарламалау тілдерінде жиі артықшылыққа ие, ал соңғысы функционалдық тілдерде қалыпты жағдай. Тізімдерді индекстік мәндер жұптарын сақтайтын, кез келген элементке бірдей уақытта қол жеткізуді қамтамасыз ететін (мысалы, барлығы шетте орналасқан және іздеуді басқару үшін оң жақ баласының индексін сақтайтын ішкі түйіндер) өзін-өзі теңдестіретін бинарлық іздеу ағаштары ретінде де іске асыруға болады. Бұл жағдайда, тізімнің мөлшеріне логарифмдік уақытпен қол жеткізудің иллюзиясын береді, егер тізім көп өзгермесе, алмасу, префикс және қосымша операцияларын да логарифмдік уақытта орындауға мүмкіндік береді.
Бағдарламалау тілдерін қолдау
Кейбір тілдерде тізім дерек құрылымы болмайды, бірақ тізімдерді имитациялау үшін ассоциативтік массивлер немесе кейбір кестелерді пайдалануға болады. Мысалы, Lua кестелерді ұсынады. Lua сандық индекстері бар тізімдерді ішкі массивтер ретінде сақтаса да, олар сөздіктер ретінде көрінеді. Lisp тілінде тізімдер – негізгі дерек типі және олар бағдарлама кодтарын да, деректерді де көрсете алады. Көптеген диалекттерде алғашқы үш жай санның тізімін (2 3 5 тізімі) деп жазуға болады. Lisp-тің бірнеше диалектілерінде, соның ішінде Scheme, тізім – бұл жұптар жиынтығы, ол келесі жұпқа (немесе нөлдік мәнге) сілтемесі бар мәннен және сілтемеден тұрады, осылай бір жақты байланысқан тізім құрылады.
Қолданбалар
Атауынан көрініп тұрғандай, тізімдер элементтердің тізімін сақтау үшін қолданылады. Бірақ, дәстүрлі массивтерден өзгеше, тізімдердің көлемі ұлғаюға да, азаюға да болады және жадта динамикалық түрде сақталады. Есептеуде, тізімдерді жиынтардан жасау оңайырақ. Математикалық мағынадағы шекті жиын, қосымша шектеулермен тізім түрінде жүзеге асырылуы мүмкін; яғни, бірдей элементтерге жол берілмейді және элементтердің реті маңызды емес. Тізімді сұрыптау, белгілі бір элементтің жиынға бар-жоғын анықтауды жеделдетеді, бірақ реттілікті сақтау үшін тізімге жаңа элемент қосуға көбірек уақыт кетеді. Дегенмен, тиімді жүзеге асыруларда жиынтар тізімнің орнына, өзін-өзі теңгертетін екілік іздеу ағаштары немесе хэш-кестелер арқылы іске асырылады. Тізімдер сонымен қатар кезек, стек және олардың түрлерін қоса алғанда, басқа да абстрактілі деректер түрлерінің негізін құрайды.