Оқытушы пәнінің ОҚУ-Әдістемелік кешені



жүктеу 5,01 Kb.
Pdf просмотр
бет22/45
Дата23.05.2018
өлшемі5,01 Kb.
#16673
1   ...   18   19   20   21   22   23   24   25   ...   45

Бағдарламалаудың қазіргі тілдерінде көрсеткіштерді қолдануға болады. 
Бұл  мәліметтердің  әртүрлі  динамикалық  құрылымдарын  жасауға  мүмкіндік 
береді. Оларда жады элемент болған уақытқа ғана бөлінеді де, сосын элемент 
жойылғанда босатылады. Болашақта жадының бұл облысы қайта қолданыла 
береді.  
Динамикалық  бөлінетін  элементтерде  ат  жоқ,  оларға  стандарты 
жолмен  қатынасуға  болмайды.  Динамикалық  айнымалыларға  қатынау 
көрсеткіштер  (сілтемелер)  көмегімен  жүзеге  асады,  олар  бағдарламаның 
динамикалық элементін құрғаннан кейін анықталған болады. 
Тізімдерді  динамикалық  көрсету  үшін  тізімнің  әрбір  элементі  мәндік 
ақпараттан  басқа  "көрсеткіш"  типті  өріске  ие  болуы  керек.  Сәйкесінше, 
динамикалық  тізімдік  құрылымдарда  элемент  ретінде  жазба  болады,  оның 
компоненттерінің  бірі  "көрсеткіш"  типіне  ие.  Осыларға  сәйкес,  тізім 
элементінің бейнеленуі мынадай болады: 
TYPE ТР 
=
 ^SР; 
SP = RECORD 
INF : CHAR;         {INF : To } 
 LINK:TP 
 END; 
 
6.2 Стек көрсетілімі 
Стек  жадының  бірнеше  динамикалық  облыстарынан  тұрады,  сонымен 
қатар  жоғары  орналасқан  элементтің  көрсеткіші  алдындағы  элементке 
көрсетеді.  Сыртқы  көрсеткіш  (стек  көрсеткіші)  стектің  жоғарғы  элементіне 
көрсету керек (сур.15).   
 
Сур. 15 Стектің сызықты тізім түрінде көрсетілімі 
 
Стекті ұйымдастыру үшін және жүргізу үшін екі көрсеткіш алдын-ала 
қарастырылуы керек: ТОР мен К: 
VAR TOP, К: ТР; 
СН:CHAR; 
Стекке элемент қосу үшін: 
• К көрсеткіші бойынша динамикалық айнымалыны құру керек; 
• оған керек ақпаратты енгізу керек; 
• жаңа элемент көрсеткішінің өрісінде ТОР көрсеткішінің мәнін енгізу 
керек; 
• ТОР көрсеткішіне К көрсеткішінің мәнін меншіктеу керек. NEW(K); 
K^.INF:= СН; 


KALINK := TOP; 
ТОР:=К; 
Стектен элементті жою үшін жеткілікті: 
• ақпаратты оқу СН := TOP^.INF; 
• ТОР көрсеткішіне жойылатын элементтің көрсеткішін енгізу 
TOP := TOP^.LINK; 
Бірақ  бұл  жағдайда  стектен  жойылған  элемент  "қоқыс"  құрайды. 
Одан  да  ТОР  көрсеткішінің  мәнін  алдын-ала  сақтап,  жадыдан  осы 
элементті жойған дұрыс: 
К := ТОР; 
TOP := K^.LINK; 
СН := K^.INF; 
DISPOSE(K); 
Тағы да кері және айналы принцип бұл жерде орындалады. 
Стекті басынан бастап құру. N элементтен тұратын стек: 
TOP := Nil; 
WHILE N> 0 DO BEGIN 
NEW(K);     READ(CH); 
K^.INF := CH; 
K^.LINK := TOP; 
TOP:=K;     N:=N-1 END; 
Стектің барлық элементтерін таңдау (өз еркінше): 
REPEAT 
К:-=TOP; 
TOP:= K^.LINK; 
CH := K^.INF; WRITE(CH); 
DISPOSE(K); 
UNTIL TOP = NIL; 
немесе WHILE TOP <> NIL DO ...; 
Тізбекті  жадыда  стек  элементтерін  өңдеу  операцияларын  салыстыра 
отырып, олардың ұқсастығын табамыз (массивтермен салыстыру). 
Бірақ  динамикалық  құрылымдарда  стектің  толып  кету  мәселесі 
шешіледі. 
 
6.3 Кезек көрсетілімі 
 
Сур. 16 Сызықты тізім түрінде кезектің көрсетілуі 
 
F  көрсеткіші  кезектің  бірінші  элементін  көрсету  керек,  ал R – 
соңғысына.  Кезектің  соңғы  элементінің  көрсеткіші NIL-ға  тең  болуы  керек 


(Сур.16).  осылайша  кезекпен  жұмыс  істеу  үшін    "көрсеткіш"  типті  үш 
айнымалы қажет. Онда бейнелеу: 
TYPE ТР 
=
 ^SP; 
SP 
=
 RECORD  
INF:CHAR; 
LINK:TP  
END; 
VAR F, K, R: TP; 
CH:CHAR; 
Бұндай  көрсетілімде  жою  көзқарасы  бойынша  кезек  стекке  ұқсас,  ал 
қосу  көзқарасы  бойынша – бұл  стектің  төменгі  шекрасының  төмендеуі 
сияқты. 
Кезектен  жою  операциясы  толығымен F көрсеткіші  бойынша  стектен 
жою операциясын эквивалентті.  
K:=F; 
F:=K^.LINK; 
CH := K^.INF; 
DISPOSE(K); 
Кезекке  қосу  операциясы – бұл R көрсетіп  тұрған  элементтен  кейін 
қосу: 
NEW(K);             - жаңа элементке арналған жады 
 K^.INF := CH;       - жаңа элементке ақпарат 
 K^.LINK := NIL;   - көрсеткішті  енгізу,  себебі  бұл  элемент  соңғы 
R^.LINK := К;     - соңғы элементпен байланыс  
R := К;           - соңғы элементке көрсеткіш. 
Динамикалық кезекпен жұмыс істегенде кезектің толып кету мәселесі 
шешіледі. 
      Бос кезекті тексеру F-ті NIL-мен салыстыруда жүзеге асады. 
 
6.4  Динамикалық  тізімдерді  көрсеткіштер  көмегімен 
жүргізу  
Динамикалық  тізімдер  оңай  жүргізіледі,  егер  сілтемелер  ретінде 
"көрсеткіш"  типті  айнымалылар  қолданса.  Бұл  жағдайда  теориялық  түрде 
ЭЕМ  жадысын  шексіз  деп  есептеуге  болатындықтан,  толып  кету  мәселесі 
шешіледі.    
Бұдан  басқа,  көрсеткіштер  бос  жадыны  тек  қана  бір  тізімге  емес, 
бірнешеуіне де қайта қолдануға мүмкіндік береді.   
Бірбайланысты тізімді бейнелейік. 
 TYPE TP = ^SР; 
SP-RECORD 
INF: CHAR;        { INF: To }  
LINK: TP 
END; 
VARNACH,I,J,K:TP  
С:CHAR; 


Назар аударыңыз: SP типті айнымалы жоқ! 
Тізімдерге қолданылатын негізгі операциялар. 
Келесі элементке көшу. 
I – тізімнің ағымдағы элементіне көрсеткіш болсын. Онда 
J := I^.LINK;      - тізімнің келесі элеменітне көрсетеді. 
Тізімнің басынан бастап керек элементті іздеу. 
'А' мәнді элементті тапқымыз келсін. 
I:=NACH; 
WHILE (С <> 'A') AND (I о<>NIL) DO BEGIN 
 С:=I^.INF; 
I :== I^.LINK 
END; 
IF С <>'A' THEN         { элемент жоқ } 
Массивті модельдеу кезіндегі операциямен салыстырыңыз. 
Тізімге I көрсеткіші бар элементтен кейін қосу. 
NEW(J); 
JMNF := С; 
J^.LINK:=I^.LINK; 
I^.LINK :=J; 
Тізімнен I көрсеткіші бар элементтен кейін жою. 
J := I^.LINK; 
I^.LINK := J^.LINK; 
С := J^.INF;  {егер ақпаратты сақтау керек болмаса, алып тастау } 
DISPOSE(J); 
Біз I  көрсетіп тұрған элементтен кейін  жою мен қосу операцияларын 
орындадық. 
Элементтің алдына қосу немесе ағымдағы элементті жою мүмкін емес, 
себебі алдыңғы элементпен байланыс жоқ. 
Бірақ, қарапайым әдіс бұл қиындықты жеңе алады.  
Алдында қосу: I көрсеткіші бар элементтен кейін қосу, сосын қосылған 
және  алдыңғы  элементтердің  ақпараттық  бөлімдерін  орындарымен 
ауыстыру. NEW(J); 
J^.LINK := I^.LINK; 
I^.LINK := J; 
J^.INF= I^.INF; 
I^.INF:=C; 
Элементтің  өзін  жою:  тізімнің  келесі  және  ағымдағы  элементтерін 
орындарымен ауыстыру, сосын келесі элементті жою. 
 J := I^.LINK;         - келесіні таптық 
С := J^.INF;       - келесіні есте сақтадық (егер керек болса) 
I^.INF := С;         - алдыңғыға сілтедік  
I^.LINK :=J^.LINK;   - байланысты ауыстырдық  
DISPOSE(J); 
Жойылатын  эелемент  тізімде  соңғы  болмаған  кезде  жою  операциясы 
мүмкін. 


жүктеу 5,01 Kb.

Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   ...   45




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау