[Powered by Google Translate] [Bölmə 6: az Rahat]
[Nate Hardison] [Harvard Universiteti]
[Bu CS50 edir.] [CS50.TV]
Bütün hüquqlar. Bölmə 6 xoş gəlmisiniz.
Bu həftə biz bölməsində data strukturları söhbət etmək olacaq
bu həftə problem spellr müəyyən əsasən çünki
müxtəlif data struktur kəşfiyyat bütün dəstə edir.
Siz problem dəsti ilə getmək olar müxtəlif yollarla bir dəstə var
və haqqında bilmək daha data strukturları edə bilərsiniz daha sərin şeylər.
>> Belə in başlamaq bildirin. Birinci biz blokları haqqında danışmaq olacaq
biz danışmaq olacaq ki, yığın və növbə data strukturlar.
Biz qrafik söhbət başlattığınızda Depo və sıralarında, həqiqətən faydalıdır
İndi sağ qədər etmək fikrində deyilik edir.
Lakin onlar CS böyük fundamental data qurumlarından biri anlamaq həqiqətən yaxşı deyilik.
Problem set dəqiqləşdirilməsi ilə təsviri,
yaxın kimi blokları haqqında siz qoparmaq, əgər danışıqlar
Siz yemək zalı olan yeməkxana var ki, yemək qablar və xovlu
yemək heyəti gəlir və onlar təmizlənmiş sonra, yemək qablar həyata qoyur Ü zaman
onlar digər üst bir yığın.
Və sonra uşaqlar, ərzaq almaq üçün gələndə
onlar ilk üst biri qablar qoparmaq, o, aşağıdakı bir, o aşağıdakı biri.
Belə ki, faktiki olaraq, yemək heyəti yazmaq ki, ilk tray off qəbul olur ki, son biridir.
Yemək kadr qoymaq ki, son bir nahar üçün off qəbul olur ki, ilk biridir.
Əgər siz artıq yoxdur, əgər problem set-nin Spec, siz, hansı yükləyə bilərsiniz
biz bu cür struct istifadə yığını data stucture modelləşdirilməsi haqqında danışmaq.
>> Beləliklə, biz burada var, nə bu, mühazirə təqdim nə kimi
mühazirə istisna olmaqla, biz char * s fərqli olaraq ints bu təqdim etdi.
Bu mağaza nə bir yığın olacaq?
Daniel? Biz bu yığını hansı saxlanılması olunur?
[Daniel] Strings? >> Biz məhz bu yığını ilə strings saxlanılması olunur.
Siz bir yığın yaratmaq üçün lazımdır Bütün bir sıra edir
xüsusi qabiliyyəti, bu halda ki,
gücü bir daimi çünki bütün caps ilə olacaq.
Və sonra sıra əlavə, biz izlemek üçün lazım olan bütün array cari ölçüsü.
Sərin növü var burada qeyd bir şey
biz başqa data strukturu, serialın üst dizilir data structure oluşturuyorsanız edir.
Bacalar həyata müxtəlif yolları var.
Biz, lakin ümid bağlı siyahısı problemləri məşğul sonra, olduqca hələ bunu deyil
Siz asanlıqla həmçinin bağlı siyahı üst bir yığın həyata necə görürsünüz.
Amma indi, biz serialların qalmaq lazımdır.
Belə ki, daha, biz lazım olan bütün bir sıra və biz yalnız serialın ölçüsü izlemek üçün lazımdır.
[Sam] Bağışlayın, niyə siz yığını strings üst var deyib ki?
Strings yığını ərzində kimi mənə görünür.
[Hardison] Bəli. Biz array data quruluşu qəbul edirik, oluşturuyorsanız -
böyük bir sual var. Belə ki, sual, bu online seyr edən insanlar üçün nə
niyə biz yığını strings üst olduğunu söyləyərək
burada strings yığını daxilində kimi görünür? çünki
Hansı tamamilə belədir.
Mən istinad biz bir sıra data quruluşu var idi.
Biz char * s bir sıra, simlər bu dizi, var
və biz dizilir data strukturu yaratmaq üçün ki, əlavə edir.
>> Belə ki, bir yığın bir sıra biraz daha mürəkkəbdir.
Biz bir yığın yaratmaq üçün bir sıra istifadə edə bilərsiniz.
Biz yığını bir sıra üst inşa edilir ki, harada ki var.
Eyni zamanda, mən əvvəllər bildirib kimi, biz bağlıdır siyahısı üst bir yığın inşa edə bilərsiniz.
Əvəzində bizim elementlərinin keçirilməsi üçün bir sıra istifadə edərək,
biz elementləri saxlamaq və ətrafında yığını qurmaq üçün bağlı siyahı istifadə edə bilər.
Bəzi kodu baxaraq nin nümunələri bir neçə ilə gəzmək edək
əslində burada nə görmək.
Sol, mən ki yığını struct yaddaş kimi baxmaq nə aşağı atılan sonra
tutumu # dörd müəyyən edilmişdir.
Biz dörd element char * array var.
Biz strings [0] strings [1], strings [2] strings [3], var
və sonra ölçüsü tam ki, ötən sahəsi.
Bu mənada edirmi? Okay.
Bu hüququ nə varsa, nə olur ki,
mənim kodu olacaq, yalnız bir struct, s adlı dizilir struct bəyan edir.
Bu almaq nə. Bu yaddaş bu iz edir.
Burada ilk sual bu yığını struct məzmunu nə edir?
Hal-hazırda onlar heç bir şey istəyirik, lakin onlar tamamilə heç bir şey deyilik.
Onlar zibil bu cür edirik. Biz heç bir fikir onlara nə var.
Biz yığını s bəyan zaman, biz yalnız yaddaş üst ki, aşağı atma edirik.
Bu int i elan və başlatılıyor deyil kimi növ var.
Siz orada nə bilmirəm. Siz orada nə oxuya bilərsiniz
lakin faydalı super ola bilər.
Həmişə bunu xatırlamaq istəyirəm bir şey başlatılmış lazımdır nə başlamaq deyil.
Bu halda, biz sıfır olmaq ölçüsü başlamaq olacaq
bizim üçün çox əhəmiyyətli ola olacaq çünki.
Biz irəli getmək və göstəricilər bütün, bütün char * s, başlamaq bilər
yəqin null bəzi aydın dəyəri olmalıdır.
Amma biz bunu tamamilə lazım deyil.
>> İndi, bacalar iki əsas əməliyyatlar var?
Kimse Yok Mu siz baca ilə nə mühazirə dən saxla? Bəli?
[Stella] basaraq və yaratma? Məhz >>.
Basaraq və yaratma bacalar iki əsas əməliyyatlar var.
Və təkan nə edir? >> Bu üst üzərinə bir şey qoyur
yığını, və sonra yaratma onu edir.
[Hardison] Exactly. Belə basmaqla yığını üst bir şey itələyir.
Bu counter bir yemək tray aşağı qoyaraq yemək kadr kimi.
Və yaratma yığını bir yemək tray off edir.
Gəlin nə nümunələri bir neçə ilə gəzmək
biz yığını daxil şeylər təkan zaman.
Biz yığını üzərinə string 'salam' təkan olsaydı,
bu diaqram indi kimi görünür edir.
Nə görmək?
Biz strings serialın ilk element daxil basdı
və biz 1 olmaq üçün ölçüsü sayı upped.
Biz iki slaydlar arasında fərq baxmaq əgər, burada 0 idi, burada təkan əvvəl var.
Burada təkan sonra.
Təkan əvvəl təkan sonra.
İndi biz yığını bir element var.
Bu string "salam" var ki, bu.
Serialın başqa hər şey bizim strings sıra hələ də zibil deyil.
Biz başlatılmış deyil.
Gəlin biz yığını üzərinə başqa simli təkan deyirlər.
Biz bu dəfə də "dünya" təkan olacaq.
Belə ki, "dünya" burada "salam" üst davam edə bilərsiniz
və ölçüsü sayı 2-ə qədər gedir.
İndi biz "CS50" və daha üst gedəcəyəm basa bilərsiniz.
Biz geri varsa, biz yığını üst şeyi basmaqla görmek bilər.
İndi biz pop almaq.
Biz yığını bir şey off atdı zaman, nə oldu?
Kimse Yok Mu fərq görmək? Bu olduqca ağıllı deyil.
[Tələbə] ölçüsü. >> Bəli, ölçüsü dəyişib.
>> Başqa nə dəyişiklik gözlənilir olardı?
Çox [Tələbə] The strings. >> Hüququ. Çox strings.
Bu çıxır ki, siz bu yolu edirik zaman,
biz yığını daxil elementləri çıxarmaq deyilik, çünki
biz, həqiqətən, heç bir şey yoxdur, biz yalnız ölçüsü istifadə edə bilərsiniz
bizim array şeyi sayı takip
belə ki, biz yenidən açılır zaman, yenə biz yalnız 1 bizim ölçüsü aşağı azalma.
Həqiqətən getmək və bir şey yazmaq üçün heç bir ehtiyac yoxdur.
Funky şərti.
Bu, bizə nə üçün az iş, çünki biz adətən yalnız tək şeyi tərk çıxır ki.
Biz geri getmək və bir şey yazmaq üçün yoxdur, onda niyə bunu?
Beləliklə, biz yığını iki dəfə off pop zaman ki bütün həcmi bir neçə dəfə azalma var.
Və yenə bu bizim yığını daxil şeylər çıxarmaq deyilik yalnız çünki.
Bəli? Durmayın.
[Tələbə, anlaşılmaz] >> sonra siz yenə bir şey təkan zaman nə olar?
Yenə bir şey basmaq zaman, hara edir?
Harada ki, Basil getmək edir? Strings [1] Into >>? >> Hüququ.
Nə strings [3] daxil deyil?
[Basil] bir şey strings var idi ki, unuttum Çünki [1] və [2]?
[Hardison] Exactly. Bizim yığını mahiyyətcə bu, bir şey üçün olmuşdur ki, "unuttum"
strings ildə [1] və ya strings [2], biz "WOOT" təkan belə zaman,
yalnız strings [1] olan element o qoyur.
Əsas səviyyədə, necə bu işlər haqqında suallarınız var?
[Sam] Beləliklə, bu məbləğ baxımından hər hansı bir şəkildə dinamik deyil
və ya yığını həcmi baxımından?
[Hardison] Exactly. Bu - baxımından bu dinamik growning yığını deyil idi.
Bu ən çox dörd şeyi, ən çox dörd char * s təşkil edə bilər ki, bir yığın edir.
Biz beşinci şey cəhd və təkan olsaydı, siz olmalıdır nə düşünürsünüz?
[Tələbələr, anlaşılmaz]
[Hardison] Exactly. Ola bilər ki, hər şeyi bir sıra var.
Bu bəlkə biz nə asılı olaraq, günah seg bilər -
necə məhz biz geri sonuna həyata edilmişdir.
Bu üzerine bilər. Bu sinif danışdıq ki, bufer daşqın ola bilər.
Nə üzerine ola bilər ki, ən bariz şey olacaq
biz yığını bir əlavə şey təkan cəhd əgər?
Belə bir bufer daşqın bildirdi.
Üzərində yazılı və ya stomped almaq ki, bir şey ola bilər nə
biz əlavə şey təkan çalışır tərəfindən təsadüfən daşdı? əgər
[Daniel, anlaşılmaz] >> mümkündür.
Amma əvvəlcə nə ola bilər? Biz dördüncü şey təkan cəhd nə olur?
Bu, ən azı biz var ki, bu yaddaş diaqram ilə, ölçüsü üzerine bilər.
>> Problem set dəqiqləşdirilməsi, bu da, biz bu gün həyata üçün olacaq nə
nə biz istəyirik yalnız yalan qayıtmaq olunur.
Bizim təkan metodu, bir boolean dəyər qayıtmaq üçün gedir
təkan nail əgər və boolean dəyər doğru olacaq
və yalan yığını tam çünki biz daha bir təkan deyil bilər.
Hüququ indi kodu bir az vasitəsilə gəzmək edək.
Burada təkan funksiyası var.
Bir yığın üçün təkan funksiyası yığını qoymaq üçün simli etmək niyyətindədir.
Simli uğurla sövq edildi Doğrudur qayıtmaq olacaq
yığını və saxta başqa haqqında.
Nə hər hansı təkliflər burada yaxşı bir ilk şey ola bilər?
Ölçüsü gücü təşkil edin [Sam] sonra saxta qayıtmaq?
[Hardison] Bingo. Nice iş.
Ölçüsü qabiliyyəti varsa, biz saxta geri olacaq.
Biz yığını daha çox bir şey qoymaq bilməz.
Əks halda, biz yığını üst bir şey qoymaq istəyirəm.
Ilkin "yığını üst," nədir?
[Daniel] Ölçüsü 0? >> Ölçü 0.
Yığını bir şey var sonra yığını üst nədir? Missy, siz bilirsiniz?
[Missy] biri. >> Size tam biridir. Siz ölçüsü əlavə saxlamaq
və sıra indeksi ölçüsü yeni element qoyulması olduğunuz hər vaxt.
Bu mənada edir, biz, bir-liner bu cür ilə bunu edə bilərsiniz.
Biz strings sıra var, belə ki, biz, ölçüsü index da daxil olacaq
və biz orada öz char * saxlamaq olacaq.
Heç bir string çıxarmaq burada orada gedən necə edək,
yaddaş heç dinamik ayrılması?
Və sonra Missy, biz indi nə gətirdi
biz array müvafiq yerdə simli saxlanılır etdik, çünki
və o, biz növbəti push üçün hazır ki, bir ölçüsü arttırmayı olduğunu bildirib.
Beləliklə, biz s.size ilə edə bilər + +.
Bu nöqtədə, biz massivinə sövq etdik. Biz nə üçün son şey nədir?
[Tələbə] doğru qayıdın. >> Doğru qayıdın.
Belə ki, bir olduqca sadə kodu olduqca sadə. Deyil, çox çox.
Sonra, yığını necə ətrafında baş bükülmüş sonra
bu həyata keçirilməsi üçün olduqca sadədir.
>> İndi bu növbəti hissəsi yığını bir simli off yaratma olunur.
Mən sizə uşaqlar bu bir az işləmək üçün bir vaxt vermək gedirəm.
Demək olar ki, mahiyyətcə biz burada təkan görülən sonra nə əks edir.
Mən etdik əslində - oops.
Mən burada və cihaz bir cihaz qədər ayaqqabılı sonra
Mən problem 5 dəqiqləşdirilməsi müəyyən qədər çıxardı etdik.
Biz burada zoom varsa, mən cdn.cs50.net/2012/fall/psets/pset5.pdf da deyiləm bilərsiniz.
Uşaqlar, burada section6.zip yerləşir ki, bu kodu nazil?
Bütün hüquqlar. Həqiqətən tez, hazırda bunu ki, yapmadıysanız.
Mən terminal pəncərə bunu edəcəyik.
Mən, həqiqətən, burada bu qədər idi. Bəli.
Bəli, Sam? >> Mən niyə = küç ölçüsü s.string 's Mötərizədə dediniz haqqında bir sual var?
Str nədir? Əvvəl haradasa müəyyən və ya - Oh, char * küç?
[Hardison] Bəli, dəqiq. Bu arqument idi. >> Oh, tamam. Bağışlayın.
[Hardison] Biz içəri basmaq üçün simli ifadə edirik
Biz həqiqətən burada danışmaq olmadığını ortaya bilər ki, digər sual
biz s adlı dəyişən ki, təqdim üçün biz etdi
ki, həcmi və bizə əlçatan idi.
Bu yığını struct olduğunu verilmiş Biz etmişdir.
Belə ki, bu təkan kodu geri axtarır
biz qəbul olmuşdur ki, bu simli ilə stuff edirik görə bilərsiniz
lakin sonra qəflətən, biz kimi s.size daxil, s haradan gəldi? edirik
Biz bölməsində arxivində baxmaq olacaq ki, kodu
və sonra sizin problem etdiyini olacaq ki, məhsulları, müəyyən
biz yığını qlobal dəyişən struct etdik
biz bütün müxtəlif funksiyaları üçün istifadə edə bilərlər ki,
özünüz ətrafında keçə və istinad onu keçə olmadan,
bu məhsulları bütün növ yoxdur.
Biz yalnız gözəl şeylər etmək üçün Siz bir az aldadıcı edirik.
Və ki, əyləncə üçün, çünki biz burada edirik bir şey, bu daha asandır.
Onlar bir böyük data structure varsa Tez-tez, insanların bunu görürsünüz
öz proqramı çərçivəsində fəaliyyət keçirilir edir.
>> Nin cihaz üzərində geri edək.
Hamı uğurla section6.zip almaq mı?
Hamı unzip section6.zip istifadə edərək, açın?
, Bölüm 6 dizine getmək varsa -
Aah, bütün yer üzərində -
və burada nə siyahısını, siz üç müxtəlif. c fayllar var olduğunu görürük.
Siz story bağlı siyahı olan bir sıra, bir sll və bir yığın var.
Siz stack.c açmaq varsa,
Siz, bizim üçün müəyyən bu struct var görə bilərsiniz
biz yalnız slaydlar haqqında söhbət dəqiq struct.
Biz yığını üçün qlobal dəyişən var
biz təkan funksiyası var
və sonra biz pop funksiyası var.
Burada Slayd üzərində geri itələmək üçün mən, kodu qoymaq lazımdır
lakin nə Mən sizə uşaqlar etmək istəyirsinizsə, sizin qabiliyyəti yaxşı ki,
getmək və pop funksiyasını həyata keçirir.
Sonra həyata sonra, siz yığını etmək ilə tərtib edə bilərsiniz
və sonra çıxan yığını yürütülebilir run
və aşağı burada əsas var ki, bu test bütün kodu davam edəcək.
Və əsas həqiqətən təkan və pop zəng qayğı
və hər şey doğru keçir əmin edir.
O, həmçinin burada yığını ölçüsü initializes
belə ki başlatılıyor narahat yoxdur.
Siz düzgün başlatılmış edilmişdir ki kəsb edə bilər
siz pop funksiyası daxil olan zaman.
Bu mənada edirmi?
Belə ki, burada biz gedin. Təkan kodu var.
Mən sizə uşaqlar 5 və ya 10 dəqiqə verəcəyik.
Və kodlaşdırma etdiyiniz zaman siz aralıq hər hansı sualınız varsa,
onlara yüksək səslə isteyin.
Bir yapışma nöqtəsi almaq əgər, yalnız xahiş edirik.
Başqa hər kəs bildirin, mənə bildirin.
Çox qonşu çalışın.
[Daniel] Biz yalnız indi pop həyata mi? >> Just pop.
Isterseniz siz push həyata köçürə bilərsiniz baxmayaraq,
test iş ki.
Onu əldə şeyi test çətindir çünki -
və ya, bu başlamaq üçün yığını bir şey yoxdur, əgər yığınının yaratma şeyi test üçün çətindir.
>> Qaytarılması nəzərdə pop nədir? Yığını üst element.
Bu yığın üst element off almaq üçün ehtimal edir
və sonra stack həcmi azalma
və indi üst element kaybettim.
Və sonra üst element qaytarın.
[Tələbə, anlaşılmaz]
[Hardison] Belə ki, əgər nə olar? [Tələbə, anlaşılmaz]
Qədər olur bitir muhtemelen ya daxil etdiyiniz
bir element hələ başlatılmadı deyil, belə ki, sizin hesablanması
da ötən element off harada.
Fark Belə ki, burada, push, biz s.size element da strings daxil etdiyiniz
yeni index çünki.
Bu yığını yeni üst edir.
Pop isə, s.size, növbəti kosmik olacaq
sizin yığını olan bütün elementlər üst olan yer.
Belə ki, üst-ən element, s.size da deyil
əksinə, o, altında var.
>> Zaman siz digər şey - pop-ci ildə,
Siz ölçüsü azalma etmək lazımdır olunur.
Siz burada bizim az diaqram geri Xatırlayırsınızsa,
həqiqətən, biz baş gördüm ki, yalnız odur ki, biz pop çağıranda
bu ölçüdə sonra 1, ilk 2, düşmüşdür idi.
Sonra yeni bir element sövq zaman, müvafiq spot da getmək olardı.
[Basil] Bu s.size 2, onda element 2 getmək deyil,
və sonra siz element off pop istəyirəm?
Biz getdi əgər - >> Beləliklə, bir daha bu baxaq.
Bu nöqtədə bizim yığını deyil
və biz, pop zəng
olan index üst ən element var?
[Basil] 2-hazırda, lakin 3 pop olacaq. >> Hüququ.
Belə ki, bizim ölçüsü 3 harada ki, ancaq index 2 element pop istəyirəm.
Bu seriallarda və sıfır indeksləşdirilməsi ilə ki, bir off ki, tipik növü var.
Beləliklə, siz üçüncü element pop istəyirsiniz, lakin üçüncü element index 3 deyil.
Və biz məcbur edirik ki minus 1 etmək yoxdur səbəb
İndi, çünki siz görürsünüz ki, üst-ən element,
biz bu nöqtədə yığını üzərinə başqa bir şey təkan olsaydı,
biz index 3 çıxarmaq istəyirəm.
Və yalnız belə basmaqla etdiyiniz zaman ölçüsü və indeksləri sıralamaq ki, baş verir.
>> Kim bir iş yığını həyata var?
Siz iş yığını bir var. Pop hələ iş varmı?
[Daniel] Bəli. Mən belə hesab edirəm.
>> Proqramı çalışan və faulting seg deyil, onu çap olub?
Siz çalıştırdığınızda "uğur" çap varmı?
Bəli. Bu "müvəffəqiyyət" çap və bumu getmək deyilsə, qalaq etmək run,
sonra bütün yaxşı.
Bütün hüquqlar. Nin həqiqətən tez cihaz üzərində gedək,
və biz bu yolu getmək lazımdır.
Biz pop burada neler baxmaq Əgər
Daniel, siz ki, ilk şey nə idi?
[Daniel] s.size 0 daha çox olur.
[Hardison] Okay. Və niyə bunu etdi?
[Daniel] yığını içərisində bir şey var idi ki, əmin etmək.
[Hardison] Sağ. Siz s.size 0 daha əmin etmək üçün test etmək istəyirəm;
Əks halda, nə üçün nə istəyirsiniz?
[Daniel] qayıt null? >> Qayıt null, dəqiq.
Belə ki, əgər s.size 0 çoxdur. Biz sonra nə edəcəyik?
Yığını boş deyilsə, biz nə etməliyəm?
[Stella] Siz ölçüsü azalma? Siz tamam, ölçüsü azalma >>.
Belə ki, necə ki, bunu etdiniz? >> S.size -.
[Hardison] Böyük. Və sonra nə oldu?
[Stella] Və sonra geri s.string bildirib [s.size].
[Hardison] Böyük.
Əks halda siz null qaytarın. Bəli, Sam?
[Sam] Nə + 1 s.size lazım deyil?
[Hardison] Plus 1? >> Bəli. >> O var.
Siz 1 həyata alaraq edirik, çünki [Sam] Mən düşündüm
sonra siz onlar üçün xahiş bir qaytarılması üçün olacaq.
[Hardison] Bu biz 0 indeksləri bu bütün məsələ ilə bağlı söhbət yalnız idi.
Belə ki, burada artıq geri zoom əgər.
Biz burada bu oğlan baxsanız, sizi pop zaman görə bilərsiniz
biz index 2 element yaratma edirik.
>> Belə ki, biz sonra ölçüsü bizim index oyunları, ilk bizim ölçüsü azaldır.
Biz ilk ölçüsü azalma yoxdur, onda biz -1 və sonra azalma ölçüsü var.
Böyük. Bütün yaxşı?
Bu barədə hər hansı suallar?
Bu həmçinin yazmaq üçün müxtəlif yollar bir sıra var.
Əslində, biz belə bir şey edə bilərsiniz - biz bir-liner edə bilərsiniz.
Biz bir-line geri edə bilərsiniz.
Ki etməklə qayıtmaq əvvəl Belə ki, biz, həqiqətən, azalma edə bilərsiniz.
Beləliklə qoyulması - bu s.size əvvəl.
Bu xətt həqiqətən sıx edir.
Harada arasında fərq -. S ölçüsü və s.size -
ki, bu postfix - səbəbiylə onlar postfix zəng - gəlir sonra s.size -
s.size indeksi tapmaq məqsədləri üçün qiymətləndirilir o deməkdir ki,
bu xətt yürütüldüğünde hazırda kimi,
və bu - xətti icra olur sonra baş verir.
Index s.size olan element əldə edilir.
Biz azalma ilk baş istəyirəm, çünki, biz istədiyiniz nə deyil.
Othewise, biz array daxil etmək olacaq, səmərəli, həddi həyata.
Biz həqiqətən daxil olmaq üçün istədiyiniz bir yuxarıda element daxil etmək olacaq.
Bəli, Sam? >> Daha sürətli və ya bir xətt və ya etmək üçün daha az RAM istifadə mı?
[Hardison] Dürüst, həqiqətən asılıdır.
[Sam, anlaşılmaz] >> Bəli, bu asılıdır. Siz compiler tövsiyələr edə bilər
ki, tanımaq üçün compiler almaq üçün, adətən, mən təsəvvür.
>> Beləliklə, biz bu compiler optimallaşdırma məhsulları haqqında bir az qeyd etdik
siz tərtib edə
və ki, bir compiler həyata rəqəm edə bilər ki şey növü
oh kimi, hey, bəlkə, bir əməliyyat bu bütün edə bilərsiniz
kimi RAM dan ölçüsü dəyişən yükləmə qarşı,
, bu decrementing geri həyata saxlanılması, və sonra yenidən geri yükləmə
Bu əməliyyat qalan emal.
Amma adətən, yox, bu şey sort deyil
ki, əhəmiyyətli dərəcədə daha sürətli proqram etmək olacaq.
Bacalar hər hansı daha suallar?
>> Belə təzyiq və yaratma. Siz uşaqlar, hacker nəşr cəhd istəyirsinizsə
biz hacker redaksiyada etdik həqiqətən getdi
və bu yığını dinamik inkişaf etmişdir.
Qədər burada təkan funksiyası əsasən var çağırış,
ki array inkişaf etmək üçün necə anlamaq üçün
Siz yığını üçün daha çox elementləri basmaqla saxlamaq kimi.
Bu, həqiqətən çox əlavə kod deyil.
Düzgün orada malloc üçün zənglər üçün yadda var - yalnız bir zəng
siz realloc zəng olacaq zaman sonra həyata rəqəm.
Siz istəyirsinizsə ki, bir əyləncə problem var.
>> Lakin hazırda, üzrə hərəkət edək və queues haqqında danışmaq edək.
Burada vasitəsilə gedin.
Növbədə yığını ən yaxın qardaş edir.
Belə ki, yığın ki, hər şeyi son qoyuldu
sonra Retrieved üçün ilk şey idi.
Biz sifariş, bu, ötən həyata ilk və ya LIFO var.
Növbədə isə, siz line duran etdiyiniz zaman beklediğiniz kimi,
line olmaq üçün ilk şəxs sıra daxil olmaq üçün ilk şey,
Növbədə alınan olur ki, ilk şeydir.
Biz qrafik ilə məşğul olduğunuz zaman Queues də tez-tez istifadə olunur
biz blokları ilə qısa danışdıq kimi
və queues digər şeyi bir dəstə üçün də lazımlı edir.
Tez-tez gəlir ki, bir şey, misal üçün, qorumaq üçün çalışır
elementlərin sıralanır siyahısı.
Və bir sıra ilə bunu edə bilərsiniz. Siz, bir sıra şeylər sıralanır siyahısı təmin edə bilər
lakin çətin olur sonra olduğu həmişə tapmaq
də növbəti şey daxil etmək üçün müvafiq yer.
10 vasitəsilə ədəd bir sıra, 1 varsa,
və sonra, 100 ilə bütün nömrələri 1 ki genişləndirmək istəyirik
və təsadüfi üçün bu nömrələri almaq və hər şey saxlamaq çalışdığınız
Siz getmək kimi sıralanır, siz keçid bir çox olan son.
Queues və əsas data strukturları müəyyən növləri müəyyən növləri ilə,
siz həqiqətən olduqca sadə saxlaya bilərsiniz.
Siz bir şey əlavə və sonra bütün şey hər vaxt qarışdırmaq yoxdur.
Eləcə də siz ətrafında daxili elementlərinin dəyişkən bir çox etmək var.
Biz bir sıra baxdığımızda, bu bax - də queue.c olan bölmə kodu -
sizə təqdim etdik ki, struct biz bir yığın üçün sizə verdiyim struct həqiqətən kimi.
>> Bu bir istisna var ki, bir istisna
Biz baş adlanan bu əlavə tam var ki,
və burada rəhbəri, növbə rəisi takip saxlanılması üçün
Növbədə və ya ilk element.
Bir yığın, biz, biz almaq haqqında olan element takip edə
yalnız ölçüsü istifadə yığını və ya üst,
növbə ilə isə biz əks ucu ilə məşğul olan edirik.
Biz tack sonunda şeyi etməyə çalışırıq, lakin sonra ön şeyi qayıtmaq edirik.
Belə ki, səmərəli, baş ilə, biz, sıra əvvəlində və indeksi
və ölçüsü bizə queue sonuna indeksi verir
Biz baş şeylər almaq və quyruq üçün şeyi əlavə edə bilərsiniz ki.
Yığını ilə Halbuki biz yalnız heç yığın üst ilə məşğul idi.
Biz yığını altında daxil olmaq üçün heç vaxt.
Biz yalnız üst şeylər əlavə və üst əşyalarını qarət
belə biz struct daxili ki, əlavə sahəsində lazım deyildi.
Ki, ümumiyyətlə hissi edirmi?
Bütün hüquqlar. Bəli, Charlotte? [Charlotte, anlaşılmaz]
[Hardison] Bu böyük sual və mühazirə qədər gələn biri idi.
Bəlkə bir neçə nümunə ilə gəzinti nümayiş edəcək
biz strings sıraya rəhbəri [0] istifadə etmək istəmirik.
>> Belə ki, biz növbə var ki, təsəvvür, biz növbə zəng olacaq.
Əvvəlində, biz yalnız instantiated olduğunuz zaman,
biz yalnız bəyan etdik zaman, biz bir şey başlatılmış deyil.
Bu, bütün zibil var. Belə ki, əlbəttə, biz başlamaq əmin etmək istəyirəm
ölçüsü və baş sahələrində əsaslı 0, bir şey olacaq.
Biz də davam və növbə elementləri həyata null bilər.
Bu diaqram uyğun etmək, indi növbə yalnız üç elementdən tuta bilən bildiriş;
bizim yığını dörd keçirilməsi bilər, halbuki bizim queue yalnız üç aça bilər.
Və bu diaqram uyğun etmək yalnız var.
Burada olur ki, ilk şey biz "hi" simli enqueue edir.
Və kimi biz yığını ilə etdi, burada olduqca fərqli bir şey,
biz strings da [0] və 1 bizim ölçüsü arttırmayı üzrə string atmaq.
Biz "bye" enqueue, bu qoymaq olur.
Beləliklə, bu hissəsi bir yığın kimi görünür.
Biz burada yeni element yeni element başladı, ölçüsü qədər davam edir.
Biz bir şey dequeue istədiyiniz zaman nə bu nöqtədə olur?
Biz dequeue istədiyiniz zaman, hansı biz dequeue istədiyiniz element var?
[Basil] Strings [0]. >> Zero. Məhz hüququ, Basil.
Biz ilk simli, bu, "hi" qurtarmaq istəyirəm.
Belə dəyişib başqa şey nə idi?
Biz yığını bir şey off atdı zaman edək, biz yalnız, ölçüsü dəyişib
lakin burada, biz dəyişiklik şeyi bir neçə var.
Ölçüsü dəyişiklik, lakin baş dəyişikliklər deyil yalnız.
Bu əvvəllər Charlotte baxımından geri gedir:
niyə biz bu baş var?
Ki, indi Charlotte mənada edirmi? Haqqında >> Kind.
Və [Hardison] Kind? Biz dequeued Belə ki, nə oldu?
Rəhbəri indi Maraqlıdır ki, nə idi?
Dəyişdirilə [Charlotte] Oh, çünki - tamam. Görürəm.
Çünki rəhbəri - baş yeri baxımından dəyişikliklər işarə yerləşir.
Bu artıq həmişə sıfır index biri. >> Bəli, dəqiq.
Yüksək element dequeueing əgər nə idi
edildiyini və bu baş sahədə yox idi
biz həmişə 0 index bizim növbə rəisi bu simli zəng çünki,
sonra biz queue qalan aşağı keçmək istiyorum.
Biz strings dən "bye" [1] keçmək üçün [0] strings var ediyorum.
Və strings [2] aşağı strings [1].
Biz elementlərinin bütün siyahısı üçün bunu istiyorum
elementləri bütün array.
Və biz bir sıra ilə bunu etdiyiniz zaman ki, həqiqətən bahalı olur.
Belə ki, burada, bu böyük deyil. Biz yalnız bizim sıra üç element var.
Amma min elementlərin sıra və ya bir milyon elementləri olsa,
və sonra birdən-birə, biz dequeue bir dəstə edilməsi başlamaq, bir döngü bütün çağırır
şeylər həqiqətən daim hər şey aşağı keçid kimi aşağı yavaş gedir.
Bilirsiniz, 1-shift, 1, 1 shift ilə, 1 shift shift.
Həqiqətən bir göstərici deyil, baxmayaraq Əksinə, biz bu baş istifadə, biz bunu bir "göstərici" zəng
ciddi mənada, bu bir pointer növü deyil.
Bu int * və ya bir char * və ya bu kimi bir şey deyil.
Amma bu işarə və ya növbə rəisi ifadə edir. Evet?
>> [Tələbə] yalnız baş nə off pop Necə dequeue bilir?
[Hardison] Necə dequeue rəhbərlik var nə off pop necə bilir? >> Hüququ, evet.
>> Nə də axtarır müəyyən edilir yalnız nə baş sahədir.
Biz burada baxmaq Beləliklə, bu ilk halda, əgər,
baş 0, index 0-dir. >> Hüququ.
[Hardison], yalnız tamam, yaxşı, kataloq 0 element olan string "hi" deyir Belə
bizim növbə rəisi olan element var.
Belə ki, oğlan dequeue olacaq.
Və zəng geri olur ki element olacaq.
Bəli, Saad? >> Beləliklə rəhbəri əsasən müəyyən edir - siz index o olacaq harada?
Bu başlanğıc var? >> Bəli. Okay. >>
[Hardison] bizim array üçün yeni bir başlanğıc olmaq var.
Belə ki, bir şey dequeue zaman, Siz bütün, kataloq q.head olan element daxil edir
və siz dequeue istədiyiniz element olacaq.
Ayrıca ölçüsü azalma var.
Şey bu bir az çətin almaq Biz bir az görmək lazımdır.
Yenə enqueue əgər Biz indi dequeue və
biz yerləşir enqueue edirsiniz?
Harada növbəti element bizim növbəsinə getmək edir?
Biz string "CS" enqueue istəyirsiniz.
O index daxil olacaq? [Tələbələr] Strings [2]. >> İki.
2 Niyə və 0?
[Basil] indi rəhbəri 1 Çünki siyahısı başlanğıc kimi ki?
[Hardison] Sağ. Və nə siyahısına sonunda bildirir?
Biz queue sonunda adlanır nə istifadə?
Başçısı bizim növbə rəisi, bizim queue başlanğıcıdır.
Bizim sıra sonu nədir? [Tələbələr] ölçüsü. >> Size, dəqiq.
Belə ki, yeni elementlər ölçüsü getmək və biz tələb edən elementləri off baş off gəlir.
Biz növbəti element enqueue zaman, ölçüsü, onu qoyulması edirik.
[Tələbə] əvvəl olsa da, ölçüsü sağ, 1 olduğunu qoymaq?
[Hardison] Sağ. Belə ki, tamamilə ölçüsü. Size + deyil, +1, lakin + rəhbəri.
Biz baş məbləği hər şey dəyişdi, çünki.
Odur ki, indi biz index 1 başlayır ölçüsü 1 növbə var.
Quyruq index 2-dir. Bəli?
>> [Tələbə] ne olur zaman yaddaş siz dequeue strings [0] və strings 'slots
yalnız əsasən, boşaldılmış almaq, və ya sadəcə unutmusunuz?
[Hardison] Bəli. Bu mənada, biz yalnız onların unutmadan edirik.
Biz onların surətlərini saxlanılması Əgər -
çox data strukturları tez-tez elementləri öz surətlərini saklayacaktır
məlumat strukturu idarə edən şəxs narahat deyil, belə ki,
Bütün bu göstəricilər gedir harada.
Bu data structure hər şey üçün keçirir, bütün nüsxələrin haqqında keçirir
hər şey uyğun davam əmin etmək.
Lakin, bu halda, bu data strukturları yalnız sadəlik üçün,
biz onların saxlanılması etdiyiniz bir şey surəti edilməsi deyil.
[Tələbə] Beləliklə, bu davamlı array edir -? >> Bəli.
Biz müəyyən bu qurumun nə geri baxmaq varsa, bu.
Bu, siz gördük kimi bir standart array var
char * s bir sıra.
Ki mi - >> Bəli, mən yalnız merak
siz nəhayət müəyyən dərəcədə, yaddaş run lazımdır əgər
Siz array bütün bu boş ləkələr varsa?
[Hardison] Bəli, yaxşı bir nöqtə var.
>> Biz bu nöqtədə artıq olub nə baxsaq,
biz queue doldurulur sonra, bu kimi görünür.
Amma biz, həqiqətən, bizim queue qədər dolu deyil
biz ölçüsü 2 ki, bir sıra var, lakin bu göstərici 1 başlayır, çünki,
baş göstərici olduğu ki, çünki.
Siz deyirdilər kimi, o strings da element [0], kataloq 0, həqiqətən, yoxdur.
Bu artıq bizim növbəyə deyil.
Biz yalnız getmək və biz bu dequeued zaman üzerine narahat etmədi.
Beləliklə, biz yaddaş tökülmək etdiyiniz kimi görünür olsa da, biz, həqiqətən, yoxdur.
Bookmark istifadə etmək üçün spot mövcuddur.
Müvafiq davranış, biz dequeue bir cəhd və ilk olsaydı
bye off pop ki, "bye" kimi.
İndi növbə index 2 başlayır və ölçüsü 1 daşıyır.
Biz yenidən bir cəhd və enqueue əgər indi, 50 demək
50 index 0 Bu spot getməlidir
hələ bizim üçün var çünki. Bəli, Saad?
[Saad] avtomatik olaraq baş verir?
[Hardison] Bu olduqca avtomatik olmur. Siz riyaziyyat var
bu iş, lakin mahiyyətcə nə biz etdik biz yalnız ətrafında bükülmüş olduğunuz edir.
Bu ortasında bir çuxur var [Saad] Və tamam?
[Hardison] biz riyaziyyat düzgün iş edə bilər əgər edir.
>> Və əslində MOD operator ilə ki, çətin deyil ki, çevrilir.
Belə ki, yalnız kimi biz, Sezar və gizli məhsulları ilə etdi
mod istifadə edərək, biz hər şeyi ətrafında paketi almaq və davam edə bilər
bizim sıra ətrafında və ətrafında və ətrafında olan
rəhbəri pointer hərəkət saxlamaq.
Ki, ölçüsü edək həmişə növbə ərzində həqiqətən elementlərinin sayı hörmət edir.
Və yalnız vasitəsilə bisiklet edir ki, baş göstərici deyil.
Biz əvvəlinə geri getmək əgər, burada nə baxmaq Əgər
və yalnız baş ne baxın
biz bir şey enqueue zaman, heç bir şey baş verib.
Biz başqa bir şey enqueued zaman, heç bir şey baş verib.
Biz bir şey dequeued Tezliklə kimi, baş bir qədər çıxır.
Biz bir şey enqueued, heç bir şey baş verir.
Biz bir şey dequeue zaman qəflətən baş incremented olur.
Biz bir şey enqueue zaman, heç bir şey baş verir.
>> Yenə bir şey dequeue idi nə bu nöqtədə olur?
Hər hansı bir fikir? Nə baş, nə olardı?
Rəhbəri olmalıdır nə
biz başqa bir şey dequeue idi əgər?
Rəhbəri hazırda, kataloq 2 edir
olan növbə rəisi strings [2] deməkdir.
[Tələbə] 0 qaytarır hansı? >> Bu 0 qayıtmalıdırlar. Bu dəqiq ətrafında geri paketi olmalıdır.
İndiyə qədər biz dequeue deyilən hər zaman, biz, baş bir əlavə etdik
baş bir əlavə, baş bir əlavə, baş bir əlavə edin.
Rəhbəri göstərici bizim array son index olur, kimi
sonra biz əvvəlinə ətrafında geri kesmek üçün, 0 geri gedin.
[Charlotte] nə bir yığın olaraq növbə potensialının müəyyən?
[Hardison] Bu halda, biz yalnız bir # müəyyən daimi istifadə etdik. Okay. >>
[Hardison] faktiki. C fayl, siz bir az ilə və pislik edə bilərsiniz
və bu böyük və ya istədiyiniz kimi az kimi olun.
[Charlotte] Belə ki, bir sıra edirik zaman kompüter bilirəm necə edə bilərəm
Siz yığını olmaq istəyirəm necə böyük?
[Hardison] Bu böyük bir sual var.
Yolları bir neçə var. Bir yalnız ön qədər müəyyən edir
və bu demək 4 elementləri və ya 50 elementləri və ya 10,000 ki, bir sıra olacaq.
Başqa bir yolu hacker nəşr insanlar nə etmək
və daha çox şeylər da əlavə almaq kimi növbə dinamik inkişaf var funksiyaları yaratmaq
>> [Charlotte] Belə ki, ilk seçim getmək, nə sintaksis istifadə edirsiniz
proqram demək sıraya həcmi nə qədərdir?
[Hardison] Ah. Belə ki, bu çıxmaq imkan verir.
Burada stack.c hələ Ben, mən yalnız burada üst diyirləyin gedirəm.
Bu burada bax edə bilərəmmi? Bu # gücü 10 müəyyən edir.
Bu biz queue üçün demək olar ki, tam olaraq eyni sintaksis edir.
Queue istisna olmaqla, biz burada ki, əlavə struct sahəsində var.
[Charlotte] Oh, mən gücü string üçün potensialının demək düşündüm.
[Hardison] Ah. Bu söz maksimum uzunluğu var. >> >> O var.
Bəli. Burada həcmi - böyük bir nöqtə var.
Və bu çətin ki, bir şey
nə biz burada bəyan etdiyiniz char * s bir sıra edir.
Göstəricilər bir sıra.
Bu chars bir sıra edir.
Bu fayl üçün arabellekleri elan olduğunuz zaman gördüm nə ehtimalla I / O,
Siz yığını üzərində əl strings yaradılması olduğunuz zaman.
Lakin, nə biz burada var char * s bir sıra edir.
Belə ki, göstəricilər bir sıra var.
Əslində, biz geri kiçiltmək və biz burada neler baxsaq
təqdimat, o faktiki elementləri, karakter data görmək
serialın özü ərzində saxlanılır deyil.
Burada bizim array ərzində saklanmaktadır karakter data göstəricilər var.
Okay. Belə ki, biz, queue həcmi yalnız yığını ilə kimi necə gördüm
ölçüsü həmişə queue hazırda elementlərin sayı etdirir.
2 enqueues yaptıktan sonra, ölçüsü 2-dir.
Bir dequeue etdikdən sonra ölçüsü indi 1-dir.
Başqa enqueue etdikdən sonra ölçüsü 2 qədər geri edir.
Belə ki, ölçüsü, mütləq bu sırada elementlərin sayı hörmət
və sonra baş yalnız velosiped saxlayır.
Bu 0-1-2, 0-1-2, 0-1-2 dən gedir.
Və biz dequeue zəng hər zaman, baş göstərici növbəti indeksi incremented olur.
Baş üzərində getmək haqqında varsa, geri ətrafında 0 ilmə.
Belə ki, biz dequeue funksiyası yaza bilərsiniz.
Biz uşaqlar əvəzinə həyata keçirilməsi üçün enqueue funksiyası tərk etmək olacaq.
>> Biz queue bir element həyata dequeue zaman,
biz baca üçün pop funksiyası yazılı başladı Daniel etdi ki, ilk şey nə idi?
Mənə hələ danışıq etməyən kimsə eşitmək edək.
, Gəlin görmək Saad edək, siz Daniel o pop yazdığı ilk şey nə xatırlayırsınız?
[Saad], bu, var idi - O bir şey üçün test >>.
[Saad] ölçüsü 0-dən çox olur. Məhz >>.
Və üçün test nə idi?
[Saad] serialın içərisində bir şey var görmek üçün test edir.
[Hardison] Bəli. Exactly. Boş əgər Beləliklə, siz yığını həyata bir şey pop bilməz.
Boş əgər Eyni zamanda, bir sıra bir şey dequeue bilməz.
Burada bizim dequeue funksiyası etməlidir ilk şey nədir, sizcə?
[Saad] ölçüsü 0-dən çox deyil? >> Bəli.
Bu halda, mən, həqiqətən, yalnız 0 olmadığını görmek üçün test etdik.
O 0 varsa, biz null ola bilər.
Amma eyni məntiq.
Və bu davam edək.
Ölçüsü 0 deyilsə, biz dequeue istədiyiniz element haradadır?
[Saad] rəhbəri hazırda? Məhz >>.
Biz yalnız bizim queue ilk element çıxarmaq olar
baş element daxil.
Crazy Heç.
Bundan sonra nə etmək lazımdır? Nə var?
Biz dequeue haqqında söhbət başqa şey nə idi?
Bizim queue dəyişib, çünki iki şey, baş var.
[Daniel] ölçüsünü azaldır. >> Biz ölçüsü azaltmaq və baş artırmaq lazımdır? Exactly.
Baş artırmaq üçün, biz yalnız kor-koranə xatırlayıram, baş arta bilməz.
Biz queue.head bunu yalnız bilməz + +.
Biz də gücü ilə bu mod daxil var.
Və nə biz, gücü Stella Mod edirsiniz?
[Stella] ətrafında kesmek üçün var. Məhz >>.
Potensialının Biz mod bunu 0 ətrafında geri paketi var çünki.
Belə ki, indi bu nöqtədə biz Daniel nə edə bilərsiniz.
Biz ölçüsü azalma edə bilərsiniz.
Və sonra biz yalnız queue üst olduğunu element ola bilər.
Bu ilk gnarly cür görünür. Siz bir sual ola bilər. Bağışlayın?
>> [Sam] Nə queue başında ilk var? Ki, hara edir?
[Hardison] Bu alt, dördüncü xətt gəlir.
Biz queue, boş deyil ki, əmin test sonra
biz ilk char * çıxarmaq, biz baş index da oturan olan element çıxarmaq
bizim array, bizim strings array >> və zəng ki, ilk?
[Hardison] Və biz bunu ilk çağırırıq. Bəli.
Just ki izləmək, niyə biz bunu idi düşünürsünüz?
[Sam] Hər bir ilk yalnız q.strings qayıdır [q.head]? >> Bəli.
>> Biz MOD funksiyası ilə q.head bu dəyişən edirik Çünki,
və həmçinin qaytarılması xətt ərzində bunu etmək üçün heç bir yolu yoxdur.
[Hardison] Exactly. Siz spot istəyirik. Sam tamamilə haqqında spot edir.
Biz queue ilk element çıxarmaq və dəyişən onu saxlamaq idi səbəbi
biz yalnız bu xətt q.head etmişdir, çünki edir
orada MOD operator biz nə edə bilər ki, bir şey deyil ki,
və olmadan baş qüvvəyə var - bir xətt.
Biz əslində ilk element çıxarmaq üçün Belə ki, sonra baş tənzimləmək
ölçüsü tənzimləmək, sonra biz çıxardı ki element qaytarın.
Bu biz sonra ortaya görmək lazımdır ki, bir şey
bağlı siyahıları, biz onlara ilə ətrafında oynamaq kimi.
Siz bağlı siyahıları azad və ya atmazdan edirik tez-tez zaman
Siz növbəti element, bir bağlı siyahı növbəti pointer xatırlamaq lazımdır
cari atmazdan əvvəl.
Çünki əks halda siyahısına sol nə məlumat tullamaq.
Sizin cihaz getmək əgər İndi, siz bu queue.c-x həyata açmaq.
Mən queue.c açmaq Belə ki, burada mənə zoom imkan
siz oxşar görünüşlü fayl var ki, görürsünüz.
Biz stack.c ilə əvvəllər nə oxşar görünüşlü faylı.
Biz slaydlar gördüm kimi yalnız müəyyən queue üçün struct var.
>> Biz nə üçün olan enqueue funksiyası var.
Və biz burada dequeue funksiyası var.
Fayl olan dequeue funksiyası unimplemented ki,
isterseniz, siz onu yazın ki, amma PowerPoint geri onu qoymaq lazımdır.
Beləliklə növbəti 5 dəqiqə və ya üçün, uşaqlar enqueue iş
olan demək olar ki, yalnız dequeue əks edir.
Siz enqueueing etdiyiniz zaman baş tənzimləmək üçün yoxdur, amma nə tənzimləmək üçün var?
Size. Beləliklə, siz enqueue, baş bakir qalır zaman, ölçüsü dəyişdirilə olur.
Amma bir az zaman alır - ki mod ilə ətrafında oynamaq olacaq
yeni element da daxil edilməlidir nə index dəqiq anlamaq üçün.
Mən sizə uşaqlar bir az verərəm, Slayd geri qədər dequeue qoymaq
və uşaqlar suallar var, belə ki, biz onları həyata bağırmaq
bir qrup kimi bütün müzakirəsi.
Ayrıca, don't ölçüsü ilə - Siz ölçüsünü tənzimləmək zaman, həmişə yalnız bilər -
Əgər ölçüsü MOD üçün? [Daniel] No >> Siz ölçüsü Mod hüququ yoxdur.
You're əgər Çünki ölçüsü həmişə olacaq - fərz siz müvafiq şeyi idarə edirik
ölçüsü həmişə 0 və 3 arasında olacaq.
Harada siz enqueue edirik zaman Mod etmək lazımdır?
Yalnız müdiri [Tələbə]. Yalnız müdiri >> dəqiq.
Və niyə enqueue ilə bütün MOD üçün?
Siz mod üçün istədiyiniz bir vəziyyət var?
Əgər boşluq da stuff varsa [Tələbə], fəzalarında 1 və 2 kimi
və sonra 0 şey əlavə etmək lazımdır.
[Hardison] Bəli, dəqiq. Baş göstərici çox sonunda əgər,
və ya ölçüsü plus başını daha böyük olduqda, daha doğrusu, sıradakı ətrafında kesmek gedir.
>> Belə ki, biz hazırda slide burada qədər var ki, bu vəziyyət,
Mən indi bir şey enqueue istəyirsinizsə
biz index 0 şey enqueue istəyirəm.
Siz 50 gedir harada baxmaq və mən enqueue 50, zəng əgər
bu alt orada qalır. Bu indeks 0 gedir.
Artıq dequeued ki 'hi "əvəz edir.
[Daniel] Siz artıq dequeue ki, qayğı yoxdur?
Nə enqueue baş ilə bir şey edir?
[Hardison] Oh, belə ki, baş değiştirmeyle deyilik, sorry.
Amma siz daxil etdiyiniz zaman MOD operator istifadə etmək
siz daxil etdiyiniz zaman enqueue istədiyiniz element
Sizin queue növbəti element.
[Basil] Mən bunu etmədi və mən orada "uğur" var.
[Daniel] Oh, mən sizə deyə nəyi başa düşürük.
[Hardison] Beləliklə, siz didn't - yalnız q.size da etdi?
[Basil] Bəli. Mən yalnız tərəflər dəyişdi, mən rəhbəri ilə bir şey etmədi.
[Hardison] Siz, həqiqətən, heç bir şey ola rəhbəri yenidən yoxdur
lakin strings massivinə zaman indeksi,
həqiqətən, davam edir və növbəti element olduğu hesablamaq üçün
yığını withe çünki yığını növbəti element həmişə
ölçüsü müvafiq göstəricisi ilə.
Biz bizim yığını təkan funksiyası geri baxsaq,
biz həmişə sağ index ölçüsü yeni element ilə plunk bilər.
Növbədə ilə Halbuki, biz bunu edə bilər
biz bu vəziyyət olduğunuz halda, çünki,
biz enqueued əgər 50 yeni simli strings [1] sağ gedəcəyini
olan biz istəmirik.
Biz yeni simli index 0 getmək olsun.
>> Mu heç - bəli? [Tələbə] Mən bir sual var, lakin bu, həqiqətən bağlı deyil.
Kimsə yalnız pred göstərici kimi bir şey çağırır zaman nə deməkdir?
Ki, adı nə üçün qısa? Mən yalnız bir adı var bilirəm.
[Hardison] Pred pointer? Bakalým. Nə baxımdan?
[Tələbə] daxil üçün idi. Əgər siz mən sonra soruşa bilərsiniz
həqiqətən bağlı deyil, amma yalnız çünki -
[Hardison] mühazirə olan David insert kodu dan?
Biz qoparmaq və bu barədə danışmaq olar.
Biz növbəti dəfə biz bağlı siyahıları almaq haqqında danışmaq lazımdır.
>> Belə ki, enqueue funksiyası kimi görünür nə baxmaq həqiqətən tez edək.
Insanların enqueue istiqamətində səy ki, ilk şey nə idi? Bu sıraya daxil?
Siz basmaqla yığını üçün nə kimi.
Siz Stella, nə idi?
[Stella, anlaşılmaz]
[Hardison] Exactly. (== HƏCMİNİ q.size) varsa -
Mən doğru yerdə mənim aşırma qoymaq lazımdır - yalan qaytarın.
Bir az böyüdün. Okay.
İndi nə oldu ki, növbəti şey var?
Yalnız yığını ilə kimi və doğru yerdə daxil.
Və belə ki daxil doğru yerdə nə idi?
Yığını ilə deyil olduqca ki bu, kataloq ölçüsü idi.
[Daniel] Mən q.head-ya - >> q.strings? >> Evet.
q.strings [q.head + q.size mod HƏCMİNİ]?
[Hardison] Biz yəqin ki, bu ətrafında parantez qoymaq istəyirik
biz hamıya cleart var ki, müvafiq üstün almaq və edirik ki.
Və bərabər müəyyən? Str üçün >>? Str üçün. >> Böyük.
Və indi biz ki, son şey nədir?
Biz yığını olduğu kimi. >> Ölçüsü artım? >> Ölçüsü artırılması.
Boom. Və sonra başlanğıc kodu bəri yalnız default yalan geri
biz bütün keçir və bütün yaxşı gedir əgər doğru dəyişdirə istəyirəm.
Bütün hüquqlar. Bu bölüm üçün məlumat bir çox var.
Biz kifayət qədər artıq deyilik. Biz story bağlı siyahıları haqqında həqiqətən tez danışmaq istəyirəm.
Mən bu qədər qoymaq lazımdır ki, biz daha sonra geri bilərsiniz.
Amma daha bir neçə slayd üçün təqdimat geri imkan verir.
Belə enqueue TODO, indi biz bunu etdik.
>> İndi story bağlı siyahıları nəzər salaq.
Biz mühazirə Bu bir az daha çox danışdıq.
Biz insanların olduğu nə qədər siz uşaqlar demo gördüm
yöndəmsiz bir-birinə və keçirilməsi nömrələr işarə? >> Edirəm ki idi.
>> Uşaqlar nə düşünürsünüz? Etdi, inşallah, bu bir az demystify?
Siyahısı ilə, biz bir node zəng olacaq ki, bu növü ilə məşğul çıxır ki.
Növbədə və yığını ilə Halbuki biz yığını ilə queue zəng istədiyiniz structs idi
biz yığını növləri bu yeni queue idi
burada siyahısı həqiqətən yalnız qovşaqlarının bir dəstə təşkil edilir.
Strings chars bir dəstə ki, eyni şəkildə bütün birinin yanında sıralanır.
A bağlı siyahı yalnız bir node və başqa node və başqa node və başqa node edir.
Və daha çox birlikdə bütün qovşaqlarının əzici və contiguously onlara saxlanılması çox
yaddaş-birinə doğru bütün növbəti,
bu Növbəti göstərici olan bizə təsadüfi, bu qovşaqlarının yerdə saxlamaq üçün imkan verir.
Və sonra tel cür hamısını birlikdə bir növbəti qeyd etmək.
>> Və nə bu bir sıra artıq idi ki, böyük üstünlüyü idi?
Saxlanılması hər şeyə contiguously yalnız bir-birinə yanında vurulmuş?
Siz saxla? Evet? >> Dinamik yaddaş ayrılması?
Nə mənada >> Dinamik yaddaş ayrılması?
Əgər bu böyük və sizin bütün array hərəkət yoxdur davam edə bilər ki, ildə [Tələbə]?
[Hardison] Exactly. Belə ki, bir sıra ilə, siz ortasında yeni bir element qoymaq istədiyiniz zaman,
yer etmək üçün hər şeyi keçmək lazımdır.
Və kimi biz, növbə ilə danışıb
ki, baş göstərici saxlamaq niyə ki,
biz daim şeyi dəyişir deyilik ki.
Bir böyük array var ki, əgər bahalı olur, çünki
və daim bu təsadüfi insertions edirik.
Siyahısı ilə Halbuki siz bütün yeni node onu atmaq deyil
bu göstəricilər tənzimləmək və tamamlayın.
Bu barədə sucks?
Bundan bir sıra kimi işləmək kimi asan deyil faktı? Evet?
[Daniel] Bəli, mən bu bağlı siyahı xüsusi bir element daxil olmaq çox çətindir tahmin?
[Hardison] Siz yalnız bağlı siyahı ortasında bir ixtiyari element üçün jump bilməz.
Necə yerinə bunu var? Siz bütün şey gezinmek üçün var >>.
[Hardison] Bəli. Siz bir-bir, bir-bir ilə getmək lazımdır.
Bu böyük bir - bu bir ağrı var.
Başqa nə var - bu başqa bir zaval yoxdur.
[Basil] Siz irəli və geri getmək bilməz? Siz bir istiqamətdə getmək üçün var?
[Hardison] Bəli. Belə ki, necə biz bəzən ki, həll edir?
[Basil] siyahıları ikiqat-əlaqədardır? Məhz >>. Ikiqat-bağlı siyahıları var.
Var - üzr?
>> [Sam] O ki pred şey istifadə kimi eyni -
Mən sadəcə yadda ki, pred şey üçün nə ki, deyil?
Deyil ki, ikiqat və story arasında?
O edirdi dəqiq nə [Hardison] edək baxın.
Belə ki, burada biz gedin. Burada siyahı kodu var.
Burada biz burada, predptr var. Əgər söhbət nə bu?
Belə ki, bu idi - o siyahı azad oldu və o, bir pointer saxlamaq üçün çalışırıq.
Bu ikiqat, story bağlı siyahıları deyil.
Bu söhbət, çünki biz siyahısına azad haqqında sonra bu barədə daha çox danışmaq olar
və mən ilk bəzi digər məhsulları göstərmək istəyirəm.
lakin bu, yalnız var - bu Ptr dəyəri xatırlayaraq edir
[Tələbə] Oh, preceeding göstərici var? >> Bəli.
Biz sonra predptr nə biz sonra sərbəst əvvəl Ptr özü arttırmayı ki.
Biz sonra pulsuz Ptr və zəng Ptr = Ptr növbəti, sağ? Bilməz
Bu pis olacaq.
Belə ki, geri bu oğlan isə görək.
>> Siyahıları haqqında digər pis odur ki, bir sıra ilə isə
biz yalnız özlərini birinin yanında dizilir bütün elementləri var
burada biz də bu göstərici təqdim ediblər.
Belə ki, biz istifadə yaşadığınızı yaddaş əlavə yığın var
biz siyahısında saxlanılması edirik ki, hər bir element üçün.
Biz rahatlıq almaq, ancaq bir dəyəri minir.
O, bu dəfə dəyəri ilə gəlir
və çox bu yaddaş dəyəri ilə gəlir.
Indi array hər element keçmək lazımdır mənada ki, Saat
indeksi 10 bir və ya bir sıra index 10 olardı tapmaq üçün.
>> Yalnız həqiqətən tez zaman diagram həyata bu siyahıları,
adətən biz siyahısına rəhbəri və ya siyahıdan ilk göstərici üzrə keçirilməsi
və bu gerçək bir pointer unutmayın.
Bu yalnız 4 bayt var. Bu faktiki node özü deyil.
Belə ki, onu heç bir int dəyər ki, heç növbəti göstərici var ki, bax.
Bu sözün yalnız bir göstərici var.
Bu faktiki node struct ki, bir şey qeyd etmək olacaq.
[Sam] node adlı göstərici? >> Bu - no. Bu node bir şey bir göstəricisidir.
Bu node struct bir göstəricisidir. >> Oh, tamam.
Sağ, sol, kod haqqında Diaqram.
Biz başlamaq üçün yaxşı bir yoludur null, bunu edə bilərsiniz.
Zaman diaqram ki, belə ya bu null kimi yazmaq və ya onu bir xətt qoydu.
>> Siyahıları ilə işləmək üçün asan yollarından biri,
və biz sizin hər başına nə soruşmaq və iki arasındakı fərqləri görmək əlavə
lakin prepending mütləq asandır.
Ü siz başına, bu deyil - zaman başına (7),
Siz node struct getmək və yaratmaq
və indi, çünki biz bu prepended bəri, o, qeyd etmək ilk təyin
bu siyahı başında olacaq.
Başqa bir node yaradır başına (3),, indi 3 7 əvvəl gəlir varsa.
Belə ki, mahiyyətcə bizim siyahısına daxil şeyə məcbur edirik.
İndi, başına, bəzən insanlar təkan zəng edə bilərsiniz
çünki sizin siyahı üzərində yeni element məcbur edirik.
Bu siyahının ön silmək üçün də asandır.
Belə ki, insanlar tez-tez ki, pop zəng edəcək.
Və bu şəkildə, bir bağlı siyahısını istifadə edərək, bir yığın emulate bilər.
Whoops. Bağışlayın, ancaq, indi biz əlavə nəzərə alırıq. Belə ki, burada biz başına (3), indi (7) prepended.
Əgər biz prepended əgər biz (4), bu siyahıya daxil başqa bir şey prepended,
sonra 4 və sonra 3 və sonra 7 ediyorum.
Beləliklə biz pop və aradan qaldırılması, 3, 4 aradan qaldırılması ola bilər, 7 çıxarın.
Tez-tez bu barədə düşünmək daha asan şəkildə əlavə edir.
Mən burada əlavə ilə kimi görünür nə diagrammed etdik.
Burada, əlavə (7) hər hansı bir müxtəlif baxmaq deyil
çünki siyahıda yalnız bir element var.
Və eklenmesi (3) sonunda qoyur.
Bəlkə indi əlavə ilə oyun görə bilərsiniz
ki, siyahının başında olduğu biz yalnız bilirik ildən başlayaraq
siz siyahısına vasitəsilə bütün yolu getmək üçün bir siyahısına əlavə etmək
, sonunda almaq dayandırmaq, sonra node və aşağı plunk hər şey qurmaq.
Bütün stuff qədər tel.
Belə ki, başına ilə kimi biz yalnız, həqiqətən, tez bu vasitəsilə yarıb
bir siyahı başına o, kifayət qədər sadə.
>> Siz yeni node etmək, bəzi dinamik yaddaş ayrılması daxildir.
Belə ki, burada biz malloc istifadə node struct edirik.
Malloc Belə ki, daha sonra bizim üçün yaddaş kənara lazımdır, çünki biz istifadə etdiyiniz
biz bu istəmirəm, çünki - biz bu yaddaş uzun müddət davam etmək istəyirəm.
Və biz yalnız ayrılan yaddaşında yer bir göstərici almaq.
Biz node ölçüsü istifadə, biz sahələrində yekun yoxdur.
Biz əl bytes sayı yaratmaq deyil
əvəzinə biz bytes müvafiq sayda alıyorsanız bilirik ki sizeof istifadə edin.
Biz malloc zəng nail test əmin olun.
Bu ümumi etmək istəyirəm bir şey deyil.
Müasir maşın haqqında, yaddaşlı həyata çalışan asan bir şey deyil
siz məhsullarının bir ton ayrılması və böyük bir siyahı edirik halda,
lakin siz iPhone və ya Android kimi demək üçün stuff tikinti edirsinizsə,
siz sıx bir şey yapýyorsun xüsusilə əgər, məhdud yaddaş resursları var.
Belə ki, təcrübə almaq üçün yaxşı deyil.
>> Mən burada bir neçə müxtəlif funksiyaları istifadə etdiyiniz üçün bildirək ki,
yeni növ olduğunu gördüm ki.
Belə fprintf yalnız printf nasıl
ilk arqument istisna olmaqla siz çap istediğiniz axın edir.
Bu halda, biz standart səhv string çap etmək istəyirəm
olan standart outstream fərqlidir.
Mənim cari eyni yerdə göstərir.
Bu da terminal üçün baskı, lakin siz -
o əmrləri istifadə edərək haqqında, yönlendirme texnika öyrənildi
Əgər problem set 4 Tommy video haqqında öyrəndim, siz yönlendirebilir
müxtəlif sahələrdə, sonra çıxış proqram, burada, çıxın.
Bu, əsas dönən kimi mahiyyətcə var
burada geri bir şey deyil, çünki biz exit istifadə istisna olmaqla.
Biz əsas deyilik, ona qaytarılması istədiyimiz kimi proqram çıxmaq deyil.
Beləliklə, biz çıxış funksiyasından istifadə və bu bir səhv baş kodu verir.
Sonra burada i bərabər olmaq üçün yeni node dəyəri sahəsində, onun i sahəsində müəyyən, sonra biz onu tel.
Biz, ilk işarə yeni node növbəti göstərici müəyyən
və sonra birinci indi yeni node qeyd edəcək.
Kodu Bu ilk xətləri, biz, həqiqətən, yeni node tikinti edirik.
Bu funksiya son iki xətləri ancaq ilk deyildir.
Siz, həqiqətən, bir köməkçi funksiyası daxil funksiyası daxil çıxarmaq olar.
Tez-tez mən nə ki, mən bir funksiyası onu çıxarmaq
Mən bu build node kimi bir şey, zəng
və bu başına funksiyası olduqca kiçik saxlayır, yalnız 3 hat sonra var.
Mən build node funksiyası zəng etmək, və sonra mən tel hər şey.
>> Mən sizə göstərmək istəyirəm son şey,
və mən, siz öz əlavə və bütün bunu bildirin lazımdır
siyahısı üzərində təkrarlamaq üçün necə.
Siyahısı üzərində təkrarlamaq üçün müxtəlif yollar bir dəstə var.
Bu halda, biz bir siyahı uzunluğu tapmaq olacaq.
Belə ki, uzunluğu = 0 başlar.
Bu simli üçün strlen yazılı çox oxşardır.
Bu burada loop üçün bu, sizə göstərmək istəyirəm nə.
Bu kinda funky görünür; bu adi deyil int i = 0, i <nə, i + +.
Bunun əvəzinə, bu siyahının başında olmaq üçün dəyişən n başlatılıyor edir.
Bizim iterator dəyişən null deyil isə və sonra, biz davam.
Konvensiya ilə, bizim siyahı sonunda null olacaq, çünki bu.
Və sonra, daha doğrusu + + bunu daha arttırmayı
+ ilə bağlı siyahı ekvivalent + n = n> yanında.
>> Vaxt bitti çünki burada boşluqlar doldurmaq qoy edəcəyik.
Siz spellr psets iş kimi mind bu saxlamaq.
Əlaqəli siyahıları, bir hash table həyata edirsinizsə,
mütləq çox lazımlı olacaq.
Və şeyə loop üçün bu idiom olan ümid edirəm ki, bir çox asan həyat edəcək.
Hər hansı sual, tez?
[Sam] siz başa sll və nc göndərmək olacaq?
[Hardison] Bəli. Mən başa slaydlar və başa sll yığını və queue.cs göndərmək lazımdır.
[CS50.TV]