1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [Одељак 6: Мање Удобно] 2 00:00:02,730 --> 00:00:05,040 [Нејт Хардисон] [Универзитет Харвард] 3 00:00:05,040 --> 00:00:07,320 [Ово је ЦС50.] [ЦС50.ТВ] 4 00:00:07,320 --> 00:00:11,840 У реду. Добродошли у члану 6. 5 00:00:11,840 --> 00:00:14,690 Ове недеље, ми ћемо да причамо о структурама података у одељку, 6 00:00:14,690 --> 00:00:19,780 пре свега зато што овонедељна проблем подесити на спеллр 7 00:00:19,780 --> 00:00:24,410 не гомила различитих структура података истраживања. 8 00:00:24,410 --> 00:00:26,520 Постоји гомила различитих начина на које можете отићи са проблемом сету, 9 00:00:26,520 --> 00:00:31,570 и више структуре података да о томе знам, више кул ствари које можете да урадите. 10 00:00:31,570 --> 00:00:34,990 >> Дакле, хајде да почнемо. Прво ћемо да разговарамо о димњацима, 11 00:00:34,990 --> 00:00:37,530 стека и перчин структуре података да ћемо да разговарамо о томе. 12 00:00:37,530 --> 00:00:40,560 Димњаци и редови су заиста корисно када почнем да причам о графикона, 13 00:00:40,560 --> 00:00:44,390 што нећемо урадити толико сада. 14 00:00:44,390 --> 00:00:52,820 Али они су стварно добро разуме један од великих основних података структурама ЦС. 15 00:00:52,820 --> 00:00:54,880 Опис у спецификацији проблема сет, 16 00:00:54,880 --> 00:00:59,260 ако га повуци се, говори о димњацима као сродан 17 00:00:59,260 --> 00:01:05,239 хрпу ручавање касета које имате у кафетерији на трпезаријама 18 00:01:05,239 --> 00:01:09,680 где, када је трпезарија особље долази и ставља трпезарије лежишта након што сам их очисти, 19 00:01:09,680 --> 00:01:12,000 су им стек један на врху друге. 20 00:01:12,000 --> 00:01:15,050 И онда када деца дођу у добити храну, 21 00:01:15,050 --> 00:01:19,490 они вуку посуде, прво да је на првом месту, онда онај испод њега, онда онај испод тога. 22 00:01:19,490 --> 00:01:25,190 Тако, у ствари, први носач да трпезарија особље спустио је последњи који добија скинут. 23 00:01:25,190 --> 00:01:32,330 Последња је да је трпезарија особље стави на први онај који буде скинут за вечеру. 24 00:01:32,330 --> 00:01:38,100 У спец је проблем сету а, који можете преузети ако већ нисте, 25 00:01:38,100 --> 00:01:46,730 говоримо о моделовању гомилу података стуцтуре користећи ову врсту струцт. 26 00:01:46,730 --> 00:01:51,070 >> Дакле, оно што смо овде, ово је слично ономе што је представљен у предавању, 27 00:01:51,070 --> 00:01:58,120 осим у предавању представили смо ово са Интс насупрот цхар с *. 28 00:01:58,120 --> 00:02:06,250 Ово ће бити стек који складишти шта? 29 00:02:06,250 --> 00:02:09,009 Данијел? Шта смо складиштење у стеку? 30 00:02:09,009 --> 00:02:15,260 [Данијел] жице? >> Смо складиштење конце у овом стеку, тачно. 31 00:02:15,260 --> 00:02:20,950 Све што треба да имате у циљу стварања стек је низ 32 00:02:20,950 --> 00:02:23,920 одређеног капацитета, што у овом случају, 33 00:02:23,920 --> 00:02:28,020 Капацитет ће бити у свим капе, јер је константа. 34 00:02:28,020 --> 00:02:36,340 А онда поред низа, све што треба да пратите је актуелна величина низа. 35 00:02:36,340 --> 00:02:38,980 Једна ствар коју треба напоменути да је кул 36 00:02:38,980 --> 00:02:47,060 јесте да смо креирање наслагани структуру података на врху другог података структуре, низа. 37 00:02:47,060 --> 00:02:50,110 Постоје различити начини да се спроведе штекова. 38 00:02:50,110 --> 00:02:54,250 Нећемо то урадити још доста, али надамо се после радећи повезане листе проблема, 39 00:02:54,250 --> 00:03:00,520 ћете видети како можете лако имплементирати стек на врху листе, као и повезана. 40 00:03:00,520 --> 00:03:02,640 Али за сада, ми ћемо држати на низове. 41 00:03:02,640 --> 00:03:06,350 Па опет, све што је потребно је низ а ми само треба да пратите величину низа. 42 00:03:06,350 --> 00:03:09,850 [Сам] Извините, зашто је то што је рекао да стек је на врху жице? 43 00:03:09,850 --> 00:03:13,440 За мене је то изгледа као да су жице су у стеку. 44 00:03:13,440 --> 00:03:16,790 [Хардисон] Да. Ми правите, водимо наш података низа структура - 45 00:03:16,790 --> 00:03:22,130 То је велико питање. Дакле, питање је зашто, за људе који гледају овај онлине, 46 00:03:22,130 --> 00:03:24,140 Зато смо рекавши да је стек на врху жице, 47 00:03:24,140 --> 00:03:27,990 јер овде изгледа као да су жице су у стеку? 48 00:03:27,990 --> 00:03:31,050 Који је потпуно случај. 49 00:03:31,050 --> 00:03:34,660 Оно што сам мислио да је то што смо добили низ података структуру. 50 00:03:34,660 --> 00:03:39,290 Имамо низ цхар * с, овај низ стрингова, 51 00:03:39,290 --> 00:03:45,300 а ми ћемо додати да је у циљу стварања наслагани структуру података. 52 00:03:45,300 --> 00:03:48,620 >> Дакле, стек је нешто сложенији него низа. 53 00:03:48,620 --> 00:03:51,890 Можемо користити низ да се изгради гомилу. 54 00:03:51,890 --> 00:03:55,810 Дакле, то је где смо рекли да је стек је изграђен на врху низа. 55 00:03:55,810 --> 00:04:02,510 Исто тако, као што сам раније рекао, можемо изградити стек на врху повезане листе. 56 00:04:02,510 --> 00:04:04,960 Уместо помоћу низа да држимо елементе, 57 00:04:04,960 --> 00:04:10,070 можемо користити повезану листу да држимо елементе и граде штос око тога. 58 00:04:10,070 --> 00:04:12,420 Прошетајмо кроз неколико примера, гледајући неки код, 59 00:04:12,420 --> 00:04:14,960 да видимо шта се заправо догађа овде. 60 00:04:14,960 --> 00:04:23,400 Са леве стране, ја сам бачена шта то стек струцт ће изгледати у меморији 61 00:04:23,400 --> 00:04:28,330 ако су капацитети # дефинисана тако да буде четири. 62 00:04:28,330 --> 00:04:33,490 Имамо нашу четири елемента цхар * низ. 63 00:04:33,490 --> 00:04:38,110 Имамо жице [0], гудачи [1], гудачи [2], стрингс [3] 64 00:04:38,110 --> 00:04:43,800 а онда последњи простор за наше величине цео број. 65 00:04:43,800 --> 00:04:46,270 Да ли ово смисла? Ок. 66 00:04:46,270 --> 00:04:48,790 То је оно што се дешава ако је оно што ја радим са десне стране, 67 00:04:48,790 --> 00:04:55,790 који ће бити мој број, да једноставно прогласи струцт, наслагане струцт зове с. 68 00:04:55,790 --> 00:05:01,270 То је оно што смо добили. Она прописује овај отисак у меморији. 69 00:05:01,270 --> 00:05:05,590 Прво питање је шта су садржај овог стек струцт? 70 00:05:05,590 --> 00:05:09,250 Сада су они ништа, али нису потпуно ништа. 71 00:05:09,250 --> 00:05:13,300 Они су ова врста смећа. Немамо појма шта је у њима. 72 00:05:13,300 --> 00:05:17,000 Када смо прогласити с стек, само смо бацали то доле на врху меморије. 73 00:05:17,000 --> 00:05:19,840 То је нешто као проглашења инт и не иницијализацију. 74 00:05:19,840 --> 00:05:21,730 Ви не знате шта је унутра. Можете прочитати шта је унутра, 75 00:05:21,730 --> 00:05:27,690 али то не може бити супер корисно. 76 00:05:27,690 --> 00:05:32,680 Једна ствар коју желите да се увек сетите да урадите је да покрене све што треба да се иницијализује. 77 00:05:32,680 --> 00:05:35,820 У овом случају, ми ћемо да покрене величину буде нула, 78 00:05:35,820 --> 00:05:39,960 јер ће испасти да буде веома важна за нас. 79 00:05:39,960 --> 00:05:43,450 Могли смо да идемо напред и иницијализовати све показивача, све цхар * с, 80 00:05:43,450 --> 00:05:49,670 да буде нека разумљива вредност, вероватно нулл. 81 00:05:49,670 --> 00:05:58,270 Али то није сасвим неопходно да то учинимо. 82 00:05:58,270 --> 00:06:04,200 >> Сада, две главне операције на полицама су? 83 00:06:04,200 --> 00:06:07,610 Свако сећам из предавања шта радиш са гомиле? Да? 84 00:06:07,610 --> 00:06:09,700 [Стелла] Гурање и кокичара? >> Тачно. 85 00:06:09,700 --> 00:06:13,810 Гурање и кокичара су две главне операције на димњацима. 86 00:06:13,810 --> 00:06:17,060 А шта Пусх ради? >> Она ставља нешто на врху 87 00:06:17,060 --> 00:06:19,300 на стек, а затим га кокичара скида. 88 00:06:19,300 --> 00:06:23,150 [Хардисон] Управо тако. Дакле гура гура нешто на врху стека. 89 00:06:23,150 --> 00:06:27,700 То је као трпезаријом особља стављају трпезаријски послужавник доле на шалтеру. 90 00:06:27,700 --> 00:06:33,630 И кокичара узима трпезаријски послужавник искључивање стека. 91 00:06:33,630 --> 00:06:36,460 Прошетајмо кроз неколико примера шта се дешава 92 00:06:36,460 --> 00:06:39,720 кад гурамо ствари у стеку. 93 00:06:39,720 --> 00:06:45,110 Ако смо били гурнути низ 'здраво' на нашем стек, 94 00:06:45,110 --> 00:06:49,760 То је оно што наш дијаграм би изгледао као сада. 95 00:06:49,760 --> 00:06:53,410 Видите шта се дешава? 96 00:06:53,410 --> 00:06:56,530 Ми смо гурнути у први елемент нашег низа гудаче 97 00:06:56,530 --> 00:07:01,420 и ми смо подигли нашу величину рачунати да је 1. 98 00:07:01,420 --> 00:07:05,340 Дакле, ако погледамо разлику између два слајда, овде је 0, ево пред притиском. 99 00:07:05,340 --> 00:07:08,690 Овде је након притиском. 100 00:07:08,690 --> 00:07:13,460 Пре притиском, након притиском. 101 00:07:13,460 --> 00:07:16,860 И сада имамо један елемент у нашој стек. 102 00:07:16,860 --> 00:07:20,970 То је стринг "здраво", и то је то. 103 00:07:20,970 --> 00:07:24,440 Све друго у низу, у нашем низу гудаче, још увек је смеће. 104 00:07:24,440 --> 00:07:27,070 Нисмо га иницијализована. 105 00:07:27,070 --> 00:07:29,410 Рецимо да гурне друго жицу на нашем стека. 106 00:07:29,410 --> 00:07:32,210 Идемо да гура "свет" на овом времену. 107 00:07:32,210 --> 00:07:35,160 Дакле, можете видети "свет" овде иде на врху "здраво", 108 00:07:35,160 --> 00:07:40,040 и величине бројање иде до 2. 109 00:07:40,040 --> 00:07:44,520 Сада можемо гурнути "ЦС50", и да ће ићи на врху поново. 110 00:07:44,520 --> 00:07:51,110 Ако се вратимо, можете видети колико смо гура ствари на врху стека. 111 00:07:51,110 --> 00:07:53,320 И сада долазимо до поп. 112 00:07:53,320 --> 00:07:58,910 Када смо убацио нешто искључивање стеку, шта се десило? 113 00:07:58,910 --> 00:08:01,540 Свако види разлику? То је прилично суптилне. 114 00:08:01,540 --> 00:08:05,810 [Студентски] величине. >> Да, величина промењена. 115 00:08:05,810 --> 00:08:09,040 >> Шта друго би сте очекује да се промени? 116 00:08:09,040 --> 00:08:14,280 [Студентски] Жице, превише. >> Реду. Жице превише. 117 00:08:14,280 --> 00:08:17,110 Испада да када сте то радили на овај начин, 118 00:08:17,110 --> 00:08:21,960 јер ми не копира елементе у нашој стек, 119 00:08:21,960 --> 00:08:24,670 ми заправо не морате ништа да радите, ми само можемо користити величину 120 00:08:24,670 --> 00:08:28,630 да пратите броја ствари у нашем низу 121 00:08:28,630 --> 00:08:33,780 тако да када се поново појавити, опет смо само умањити нашу величину до 1. 122 00:08:33,780 --> 00:08:39,440 Нема потребе да се заиста тамо и заменити ништа. 123 00:08:39,440 --> 00:08:41,710 Некако функи. 124 00:08:41,710 --> 00:08:46,520 Испоставило се да смо управо обично остави ствари на миру, јер је то мање посла за нас да урадимо. 125 00:08:46,520 --> 00:08:50,060 Ако ми не треба да се вратимо и да препишете нешто, онда зашто то радиш? 126 00:08:50,060 --> 00:08:54,150 Дакле, када смо два пута појавити искључивање стека, све што ради је умањење од величине неколико пута. 127 00:08:54,150 --> 00:08:59,120 И опет, то је само зато што не копира ствари у нашој стека. 128 00:08:59,120 --> 00:09:01,320 Да? Само напред. 129 00:09:01,320 --> 00:09:04,460 [Студент, неразумљив] >> И шта се онда дешава када притиснете нешто опет? 130 00:09:04,460 --> 00:09:08,570 Када притиснете нешто опет, где то иде? 131 00:09:08,570 --> 00:09:12,390 Где то иде, Басиле? >> У стрингс [1]? >> Реду. 132 00:09:12,390 --> 00:09:14,530 Зашто не иде у жицама [3] 133 00:09:14,530 --> 00:09:19,410 [Василије] Јер је заборавио да је било нешто у жицама [1] и [2]? 134 00:09:19,410 --> 00:09:24,040 [Хардисон] Управо тако. Наш скуп, у суштини, "заборавио" да је држи на шта 135 00:09:24,040 --> 00:09:29,480 у стрингс [1] или ниске [2], па кад гурамо "воот", 136 00:09:29,480 --> 00:09:36,670 само ставља да је у елементу на стрингове [1]. 137 00:09:36,670 --> 00:09:41,590 Да ли постоје питања о томе како ради, на основном нивоу? 138 00:09:41,590 --> 00:09:45,160 [Сам] Дакле, ово није динамична на било који начин, у смислу износа 139 00:09:45,160 --> 00:09:47,620 или у погледу величине стека? 140 00:09:47,620 --> 00:09:56,750 [Хардисон] Управо тако. То је - поента је да ово није динамички гајилиште стек. 141 00:09:56,750 --> 00:10:02,850 Ово је стек који може држати у већини, четири цхар * с, највише четири ствари. 142 00:10:02,850 --> 00:10:07,580 Ако смо били да покушамо да гура пету ствар, шта мислите да би се десило? 143 00:10:07,580 --> 00:10:11,870 [Студенти, неразумљив] 144 00:10:11,870 --> 00:10:14,600 [Хардисон] Управо тако. Постоји неколико ствари које би могле догодити. 145 00:10:14,600 --> 00:10:19,330 То можда може да сегментира грешку, у зависности од тога шта смо били - 146 00:10:19,330 --> 00:10:22,530 како тачно смо реализацију бацк-енд. 147 00:10:22,530 --> 00:10:31,740 То би могло заменити. То би могло имати ту преливање бафера које смо причали на часу. 148 00:10:31,740 --> 00:10:35,240 Шта би било да је најочигледнији ствар која може бити замењена 149 00:10:35,240 --> 00:10:42,370 ако смо покушали да помере екстра ствар на нашој стека? 150 00:10:42,370 --> 00:10:44,550 Дакле, поменули сте бафера. 151 00:10:44,550 --> 00:10:47,870 Шта може бити ствар која ће бити написано изнад или газио по 152 00:10:47,870 --> 00:10:52,320 ако случајно преплавило покушавајући да гурне екстра ствар? 153 00:10:52,320 --> 00:10:54,730 [Данијел, неразумљив] >> Могуће. 154 00:10:54,730 --> 00:10:58,440 Али прво, шта може да се деси? Шта ако смо покушали да помере и четврту ствар? 155 00:10:58,440 --> 00:11:06,220 То би могло да препишете величину, бар са овим меморијским дијаграму који смо добили. 156 00:11:06,220 --> 00:11:10,880 >> У спецификацији проблема сет, што је оно што ћемо спроводити данас, 157 00:11:10,880 --> 00:11:16,030 оно што ми желимо да урадимо је вратио само лажна. 158 00:11:16,030 --> 00:11:20,030 Наш метод притисак ће вратити боолеан вредност, 159 00:11:20,030 --> 00:11:22,920 и да боолеан вредност ће бити тачно уколико Пусх суццеедс 160 00:11:22,920 --> 00:11:29,730 а фалсе ако не можемо гурати ништа више, јер стек пун. 161 00:11:29,730 --> 00:11:33,620 Прошетајмо кроз мало тог кода сада. 162 00:11:33,620 --> 00:11:36,400 Ево наша функција пусх. 163 00:11:36,400 --> 00:11:40,380 Наша функција притиском на стек ће узети у низу да стави на стек. 164 00:11:40,380 --> 00:11:45,820 То ће вратити труе ако стринг који је успешно гурнут 165 00:11:45,820 --> 00:11:51,820 на стек и лажне другачије. 166 00:11:51,820 --> 00:11:59,740 Свака сугестија о томе шта би било добро прво да урадим овде? 167 00:11:59,740 --> 00:12:20,630 [Сам] Ако величина износи капацитет онда се врати лажно? 168 00:12:20,630 --> 00:12:23,320 [Хардисон] Бинго. Добар посао. 169 00:12:23,320 --> 00:12:26,310 Ако је величина капацитета, ми ћемо вратити фалсе. 170 00:12:26,310 --> 00:12:29,270 Ми не можемо ставити ништа више у нашој стек. 171 00:12:29,270 --> 00:12:36,900 Иначе, ми желимо да ставимо нешто на врху стека. 172 00:12:36,900 --> 00:12:41,670 Шта је "врх стека", првобитно? 173 00:12:41,670 --> 00:12:43,650 [Данијел] Величина 0? >> Величина 0. 174 00:12:43,650 --> 00:12:49,990 Шта је врх стека након Има једна ствар у стеку? Миси, знаш? 175 00:12:49,990 --> 00:12:52,720 [Мисси] Један. >> Величина је један, тачно. Стално додајући величини, 176 00:12:52,720 --> 00:13:01,690 и сваки пут када се стави у нови елемент у индексној величини у низу. 177 00:13:01,690 --> 00:13:05,470 Можемо то да урадимо са том врстом једном броду, ако то има смисла. 178 00:13:05,470 --> 00:13:11,910 Тако смо добили нашу ниске низ, идемо да му приступите на величину индекса, 179 00:13:11,910 --> 00:13:14,780 а ми ћемо само да сачувате своју цхар * тамо. 180 00:13:14,780 --> 00:13:19,340 Обратите пажњу како нема жица копирање дешава овде, 181 00:13:19,340 --> 00:13:29,680 нема динамичан алокација меморије? 182 00:13:29,680 --> 00:13:34,440 А онда Мисси довео до онога што сада имамо да урадимо, 183 00:13:34,440 --> 00:13:40,570 јер смо сачували стринг на одговарајућем месту у низу, 184 00:13:40,570 --> 00:13:49,230 и она је рекла да смо морали да повећате величину по један, тако да смо спремни за следећи притиском. 185 00:13:49,230 --> 00:13:53,950 Дакле, можемо да урадимо то са с.сизе + +. 186 00:13:53,950 --> 00:13:59,330 У овом тренутку, ми смо гурнути у нашем низу. Шта је последња ствар која нам треба да урадимо? 187 00:13:59,330 --> 00:14:10,110 [Студентски] Повратак истина. >> Повратак истина. 188 00:14:10,110 --> 00:14:14,690 Дакле, то је прилично једноставна, прилично једноставна шифра. Не превише. 189 00:14:14,690 --> 00:14:17,070 Када замотан главу око како стек ради, 190 00:14:17,070 --> 00:14:21,910 ово је прилично једноставан за примену. 191 00:14:21,910 --> 00:14:26,390 >> Сада, следећи део ово искакање низ офф стека. 192 00:14:26,390 --> 00:14:29,410 Ја ћу да ти дам момци мало времена за рад на овом мало. 193 00:14:29,410 --> 00:14:34,320 То је скоро суштини супротно оно што смо урадили овде у пусх. 194 00:14:34,320 --> 00:14:38,510 Оно што сам урадио је заправо - Упс. 195 00:14:38,510 --> 00:14:48,160 Сам боотед сам се један апарат овамо, ау апарата, 196 00:14:48,160 --> 00:14:53,600 Сам извукао сам се проблем поставити 5 спецификацију. 197 00:14:53,600 --> 00:15:02,560 Ако смо увећали овде, можемо видети да сам у цдн.цс50.нет/2012/фалл/псетс/псет5.пдф. 198 00:15:02,560 --> 00:15:08,590 Да ли сте ви преузели овај код који се овде налазе, сецтион6.зип? 199 00:15:08,590 --> 00:15:15,030 У реду. Ако нисте урадили, урадите то сада, веома брзо. 200 00:15:15,030 --> 00:15:22,130 Ја ћу то да урадим у мом прозору терминала. 201 00:15:22,130 --> 00:15:25,090 Ја стварно то урадио овде. Да. 202 00:15:25,090 --> 00:15:34,730 Да, Сем? >> Имам питање о томе зашто сте рекли с.стринг с заградама величине = ул? 203 00:15:34,730 --> 00:15:42,910 Шта је стр? Да ли је то дефинисано негде пре, или - ох, у цхар * Ул? 204 00:15:42,910 --> 00:15:47,160 [Хардисон] Да, баш тако. То је био аргумент. >> О, у реду. Извините. 205 00:15:47,160 --> 00:15:49,470 [Хардисон] Ми смо наводећи низ да гура унутра 206 00:15:49,470 --> 00:15:55,220 Друго питање које би могле доћи до које нисмо заиста говорити о томе овде 207 00:15:55,220 --> 00:15:58,810 ми смо узели здраво за готово да смо имали ову променљиву под називом а 208 00:15:58,810 --> 00:16:02,710 који је био у обиму и приступачан за нас. 209 00:16:02,710 --> 00:16:06,960 Ми узео здраво за готово да је с је ово гомила струцт. 210 00:16:06,960 --> 00:16:08,930 Дакле, гледајући уназад на овај пусх кода, 211 00:16:08,930 --> 00:16:13,450 можете видети да радимо ствари са овим стрингом који је добио донесен 212 00:16:13,450 --> 00:16:19,210 али онда сви одједном смо приступ с.сизе, као, одакле ови долазе? 213 00:16:19,210 --> 00:16:23,020 У коду који ћемо да погледамо у рубрици архиви 214 00:16:23,020 --> 00:16:27,100 и онда су ствари које ћете радити у свом проблему поставља, 215 00:16:27,100 --> 00:16:32,440 Направили смо наш стек струцт глобалну променљиву 216 00:16:32,440 --> 00:16:36,380 тако да можемо имати приступ њему у свим нашим различитим функцијама 217 00:16:36,380 --> 00:16:40,630 без потребе да ручно прође око и проћи га референце, 218 00:16:40,630 --> 00:16:44,870 учинити све да се такве ствари на њега. 219 00:16:44,870 --> 00:16:52,280 Ми само вараш се мало, ако хоћете, да се ствари лепше. 220 00:16:52,280 --> 00:16:57,430 И то је нешто што ми овде радимо, јер је то за забаву, то је лакше. 221 00:16:57,430 --> 00:17:02,800 Често ћете видети људе учинити ако имају једну велику структуру података 222 00:17:02,800 --> 00:17:07,750 а која се оперисао у оквиру свог програма. 223 00:17:07,750 --> 00:17:09,560 >> Идемо назад преко на уређај. 224 00:17:09,560 --> 00:17:15,240 Да ли су сви успешно добили сецтион6.зип? 225 00:17:15,240 --> 00:17:20,440 Сви га распакујте користи унзип сецтион6.зип? 226 00:17:20,440 --> 00:17:27,200 Ако идете на дионици 6 директоријум - 227 00:17:27,200 --> 00:17:29,220 аах, свуда - 228 00:17:29,220 --> 00:17:32,840 и навести шта је овде, видите да имате три различита ц фајлове.. 229 00:17:32,840 --> 00:17:38,350 Имаш ред, СЛЛ, која је појединачно повезана са листа, и стек. 230 00:17:38,350 --> 00:17:44,600 Ако отворите стацк.ц, 231 00:17:44,600 --> 00:17:47,330 можете видети да смо добили ову струцт дефинисану за нас, 232 00:17:47,330 --> 00:17:51,330 тачно струцт да смо управо причали о томе у слајдовима. 233 00:17:51,330 --> 00:17:56,340 Имамо нашу глобалну променљиву за стек, 234 00:17:56,340 --> 00:18:00,110 Имамо нашу пусх функцију, 235 00:18:00,110 --> 00:18:04,230 и онда имамо нашу поп функцију. 236 00:18:04,230 --> 00:18:08,320 Ја ћу ставити шифру за гура назад на слајду овде, 237 00:18:08,320 --> 00:18:10,660 али оно што бих ви треба да урадите је да најбоље што могу, 238 00:18:10,660 --> 00:18:13,790 иди и спроведе поп функцију. 239 00:18:13,790 --> 00:18:18,480 Када сте га спроводе, можете компајлирати ово са направи штос 240 00:18:18,480 --> 00:18:22,540 а затим покрените извршну резултанта стека, 241 00:18:22,540 --> 00:18:28,390 као и да ће покренути све ово тест кода овде да је у главни. 242 00:18:28,390 --> 00:18:31,060 А главни брине заправо израде пусх и поп позива 243 00:18:31,060 --> 00:18:33,220 и да се уверите да све иде кроз све у реду. 244 00:18:33,220 --> 00:18:36,820 Он је такође покреће стека величину овде 245 00:18:36,820 --> 00:18:39,780 тако да не морате да бринете о томе да је иницијализација. 246 00:18:39,780 --> 00:18:42,310 Можете претпоставити да је било исправно иницијализована 247 00:18:42,310 --> 00:18:48,000 у време које сте приступити га у поп функцију. 248 00:18:48,000 --> 00:18:53,530 Да ли то смисла? 249 00:18:53,530 --> 00:19:00,100 Дакле, идемо. Ту је гурање код. 250 00:19:00,100 --> 00:19:13,210 Даћу вам момци 5 или 10 минута. 251 00:19:13,210 --> 00:19:15,690 А ако имате било каквих питања у међувремену док сте кодирање, 252 00:19:15,690 --> 00:19:17,710 замолите их наглас. 253 00:19:17,710 --> 00:19:23,080 Дакле, ако дођете до тачке лепљење, само питај. 254 00:19:23,080 --> 00:19:26,030 Дозволите ми да знам, да сви остали знају. 255 00:19:26,030 --> 00:19:28,160 Радите са својим комшијом превише. 256 00:19:28,160 --> 00:19:30,360 [Данијел] Ми само спровођење поп сада? >> Само поп. 257 00:19:30,360 --> 00:19:34,200 Иако можете да копирате спровођење притиском ако желите 258 00:19:34,200 --> 00:19:37,780 тако да Тестирање ће радити. 259 00:19:37,780 --> 00:19:41,940 Зато што је тешко да се тестирају ствари улазим - 260 00:19:41,940 --> 00:19:49,030 или, тешко је тестирати кокичара ствари из гомиле ако не постоји нешто у стеку да почне са. 261 00:19:49,030 --> 00:19:55,250 >> Оно што је требало да буде поп враћају? Елемент са врха стека. 262 00:19:55,250 --> 00:20:01,260 Требало би да добијете елемент искључивање на врху стека 263 00:20:01,260 --> 00:20:05,780 и онда Смањење величине стек, 264 00:20:05,780 --> 00:20:07,810 а сада сте изгубили елемент на врху. 265 00:20:07,810 --> 00:20:11,420 А онда вратите елемент на врху. 266 00:20:11,420 --> 00:20:20,080 [Студент, неразумљив] 267 00:20:20,080 --> 00:20:28,810 [Хардисон] Па шта се дешава ако сте то урадили? [Студент, неразумљив] 268 00:20:28,810 --> 00:20:34,000 Шта завршава се дешава је вероватно имате приступ било 269 00:20:34,000 --> 00:20:37,350 елемент који још није покренут, тако да ваш прорачун 270 00:20:37,350 --> 00:20:39,990 где последњи елемент је искључен. 271 00:20:39,990 --> 00:20:46,260 Па ево, ако сте приметили, у притиском, ми смо приступ конце у с.сизе елемент 272 00:20:46,260 --> 00:20:48,560 јер је нови индекс. 273 00:20:48,560 --> 00:20:51,460 То је нови врх стека. 274 00:20:51,460 --> 00:21:01,100 Док је у поп, с.сизе ће бити следећи простор, 275 00:21:01,100 --> 00:21:05,210 простор који је на врху свих елемената у стеку. 276 00:21:05,210 --> 00:21:10,050 Дакле топ највише елемент није на с.сизе, 277 00:21:10,050 --> 00:21:14,930 већ, то је испод ње. 278 00:21:14,930 --> 00:21:19,640 >> Друга ствар коју треба урадити када - у поп, 279 00:21:19,640 --> 00:21:22,030 је ли то треба да умањење величину. 280 00:21:22,030 --> 00:21:28,750 Ако се сетите да врати нашем малом дијаграм овде, 281 00:21:28,750 --> 00:21:30,980 Заиста, једина ствар коју смо видели дешава када смо звали поп 282 00:21:30,980 --> 00:21:36,150 је да је ово величина пао, прво на 2, затим 1. 283 00:21:36,150 --> 00:21:42,620 Онда када смо гурнули један нови елемент, он ће ићи на на одговарајуће место. 284 00:21:42,620 --> 00:21:49,610 [Василије] Ако с.сизе је 2, онда не би било отићи на елемент 2, 285 00:21:49,610 --> 00:21:54,400 и онда би желео да се појави тај елемент искључен? 286 00:21:54,400 --> 00:21:59,510 Дакле, ако смо отишли ​​до - >> Па хајде да погледамо ово поново. 287 00:21:59,510 --> 00:22:07,730 Ако је ово наш стек у овом тренутку 288 00:22:07,730 --> 00:22:12,130 и зовемо поп, 289 00:22:12,130 --> 00:22:16,150 на којој је индекс топ највише елемент? 290 00:22:16,150 --> 00:22:19,300 [Василије] У 2, али то ће поп 3. >> Реду. 291 00:22:19,300 --> 00:22:24,220 Дакле, то је место где је наша величина је 3, али желимо да поп елемент у индексу 2. 292 00:22:24,220 --> 00:22:29,900 То је то типично врста офф један који имате са нултом индексирања низова. 293 00:22:29,900 --> 00:22:36,430 Дакле, не желите да се појави трећи елемент, али је трећи елемент није у индексу 3. 294 00:22:36,430 --> 00:22:39,430 А разлог што не треба да раде тај минус 1 када смо гурање 295 00:22:39,430 --> 00:22:44,120 је зато сада, приметите да је топ највише елемент 296 00:22:44,120 --> 00:22:47,600 ако смо били гурнути нешто на стек у овом тренутку, 297 00:22:47,600 --> 00:22:50,360 ми смо желели да га гура у индексу 3. 298 00:22:50,360 --> 00:23:03,550 И тако се дешава да управо величина и индекси построје кад гура. 299 00:23:03,550 --> 00:23:06,960 >> Ко има радну стека примену? 300 00:23:06,960 --> 00:23:09,690 Имаш радну стек један. Да ли сте поп раде још? 301 00:23:09,690 --> 00:23:11,890 [Данијел] Да. Мислим да је тако. 302 00:23:11,890 --> 00:23:14,610 >> Програм је покренут и не сегментира Фаултинг, то је штампање? 303 00:23:14,610 --> 00:23:17,520 Да ли то штампати "успех" када га покренем? 304 00:23:17,520 --> 00:23:22,630 Да. Направите стек, покрените га, ако се исписује "успех" и не иде бум, 305 00:23:22,630 --> 00:23:26,000 онда све је добро. 306 00:23:26,000 --> 00:23:34,070 У реду. Идемо преко на уређај заиста брзо, 307 00:23:34,070 --> 00:23:46,100 и ми ћемо проћи кроз ово. 308 00:23:46,100 --> 00:23:51,110 Ако погледамо шта се овде дешава са поп, 309 00:23:51,110 --> 00:23:55,220 Данијел, који је био прва ствар коју сте урадили? 310 00:23:55,220 --> 00:23:58,850 [Данијел] Ако с.сизе је већи од 0. 311 00:23:58,850 --> 00:24:03,120 [Хардисон] Ок. А зашто сте то урадили? 312 00:24:03,120 --> 00:24:05,610 [Данијел] Да бисте се уверили да нешто није у стеку. 313 00:24:05,610 --> 00:24:10,950 [Хардисон] Тачно. Ви желите да тестирате да се уверите да с.сизе је већа од 0; 314 00:24:10,950 --> 00:24:13,280 У супротном, шта желиш да се деси? 315 00:24:13,280 --> 00:24:16,630 [Данијел] Повратак нулл? >> Повратак нулл, тачно. 316 00:24:16,630 --> 00:24:20,740 Дакле, ако с.сизе је већа од 0. Онда, шта ћемо да радимо? 317 00:24:20,740 --> 00:24:25,890 Шта ћемо да радимо ако стек није празан? 318 00:24:25,890 --> 00:24:31,210 [Стелла] Можете умањити величину? Ти >> Смањи величину, ок. 319 00:24:31,210 --> 00:24:34,440 Па како си то урадио? >> С.сизе--. 320 00:24:34,440 --> 00:24:37,030 [Хардисон] Одлично. И онда шта си урадио? 321 00:24:37,030 --> 00:24:44,140 [Стелла] И онда сам рекао повратак с.стринг [с.сизе]. 322 00:24:44,140 --> 00:24:48,560 [Хардисон] Одлично. 323 00:24:48,560 --> 00:24:51,940 У супротном, вратите нулл. Да, Сем? 324 00:24:51,940 --> 00:24:55,510 [Сам] Зашто то не треба да буде с.сизе + 1? 325 00:24:55,510 --> 00:24:58,430 [Хардисон] плус 1? >> Да. >> Имам га. 326 00:24:58,430 --> 00:25:00,980 [Сам] Мислио сам зато што узимате 1 аут, 327 00:25:00,980 --> 00:25:04,290 онда ћеш бити не враћа онај који их тражио. 328 00:25:04,290 --> 00:25:09,400 [Хардисон] И то је управо оно што смо причали са целом овом питању 0 индекса. 329 00:25:09,400 --> 00:25:11,380 Дакле, ако смо увећали вратити овамо. 330 00:25:11,380 --> 00:25:15,650 Ако гледамо на овог момка овде, можете видети да када се појављују, 331 00:25:15,650 --> 00:25:19,340 ми кокичара елемент у индексу 2. 332 00:25:19,340 --> 00:25:25,200 >> Тако смо смањили прво нашу величину, онда је наша величина одговара наш индекс. 333 00:25:25,200 --> 00:25:39,650 Ако ми прво не умањити величину, онда морамо да урадимо величину -1 и онда умањење. 334 00:25:39,650 --> 00:25:45,270 Сјајно. Све добро? 335 00:25:45,270 --> 00:25:47,530 Сва питања о овоме? 336 00:25:47,530 --> 00:25:54,050 Постоји неколико различитих начина да се напише ово као добро. 337 00:25:54,050 --> 00:26:03,290 У ствари, можемо да урадимо још нешто - можемо направити једну траку. 338 00:26:03,290 --> 00:26:05,770 Можемо да урадимо један линије повратак. 339 00:26:05,770 --> 00:26:12,980 Дакле, ми заправо можемо умањити пре него што се вратимо на тај тим. 340 00:26:12,980 --> 00:26:18,320 Дакле, стављајући - пре с.сизе. 341 00:26:18,320 --> 00:26:22,060 То чини линија заиста густа. 342 00:26:22,060 --> 00:26:30,940 Где је разлика између - с величином и с.сизе--. 343 00:26:30,940 --> 00:26:40,130 је да је ово постфик - они га зову постфик јер - долази после с.сизе-- 344 00:26:40,130 --> 00:26:47,430 значи да с.сизе се оцењује ради проналажења индекса 345 00:26:47,430 --> 00:26:50,410 каква је сада, када је ова линија се извршава, 346 00:26:50,410 --> 00:26:54,290 и онда ово - дешава после линија добија погубљен. 347 00:26:54,290 --> 00:27:00,340 Након елеменат у индексној с.сизе приступа. 348 00:27:00,340 --> 00:27:07,260 А то није оно што ми желимо, јер желимо умањење прво деси. 349 00:27:07,260 --> 00:27:10,990 Отхевисе, идемо да се приступа низ, ефикасно, ван граница. 350 00:27:10,990 --> 00:27:16,850 Ми ћемо се приступа елемент изнад оног који смо заиста желите да приступите. 351 00:27:16,850 --> 00:27:23,840 Да, Сем? >> Да ли је брже или да користите мање РАМ да би у једном реду или не? 352 00:27:23,840 --> 00:27:29,620 [Хардисон] Искрено, стварно зависи. 353 00:27:29,620 --> 00:27:34,220 [Сем, неразумљив] >> Да, то зависи. То можете да урадите трикове компајлера 354 00:27:34,220 --> 00:27:41,580 да компајлеру да призна да је, обично, претпостављам. 355 00:27:41,580 --> 00:27:44,840 >> Тако смо поменули мало о овим стварима преводилац оптимизације 356 00:27:44,840 --> 00:27:47,400 које можете да урадите у састављању, 357 00:27:47,400 --> 00:27:50,580 и то је врста ствари које компајлер ће моћи да схватим, 358 00:27:50,580 --> 00:27:54,710 као ох, хеј, можда ја могу да урадим све ово у једном раду, 359 00:27:54,710 --> 00:27:59,420 насупрот учитавања величине варијаблу из РАМ меморије, 360 00:27:59,420 --> 00:28:03,770 децрементинг га, складиштење назад, а затим га поново утовар поново 361 00:28:03,770 --> 00:28:08,000 да обрадимо остатак ове операције. 362 00:28:08,000 --> 00:28:10,710 Али обично, не, ово није врста ствари 363 00:28:10,710 --> 00:28:20,770 који ће направити свој програм знатно брже. 364 00:28:20,770 --> 00:28:26,000 Има ли још питања о димњацима? 365 00:28:26,000 --> 00:28:31,360 >> Дакле, гурања и кокичавости. Ако ви желите да испробате издање хакера, 366 00:28:31,360 --> 00:28:33,660 шта смо урадили у хакерске издању заправо нема 367 00:28:33,660 --> 00:28:37,670 и направио овај стек расте динамички. 368 00:28:37,670 --> 00:28:43,190 Изазов првенствено има овде у пусх функција, 369 00:28:43,190 --> 00:28:48,820 да схватим како да то низ расте 370 00:28:48,820 --> 00:28:52,450 као чувате гура све више и више елемената на на стеку. 371 00:28:52,450 --> 00:28:56,000 То заправо и није превише додатни код. 372 00:28:56,000 --> 00:29:00,080 Само позив - морате да се сетите да добију позиве за маллоц тамо правилно, 373 00:29:00,080 --> 00:29:03,310 и онда схватим кад ћеш звати реаллоц. 374 00:29:03,310 --> 00:29:06,090 То је забавно изазов ако сте заинтересовани. 375 00:29:06,090 --> 00:29:11,550 >> Али, за сада, идемо даље, и хајде да разговарамо о редовима. 376 00:29:11,550 --> 00:29:15,680 Крећите се овде. 377 00:29:15,680 --> 00:29:19,340 Ред је близу брат стека. 378 00:29:19,340 --> 00:29:25,380 Дакле, у стеку, ствари које су ставили у последњој 379 00:29:25,380 --> 00:29:28,810 су прве ствари онда се преузимају. 380 00:29:28,810 --> 00:29:33,600 Имамо ово последњи у, прво се, или ЛИФО, наручивања. 381 00:29:33,600 --> 00:29:38,390 Док је у реду, као што бисте очекивали од када стојите у реду, 382 00:29:38,390 --> 00:29:41,980 прва особа да се у складу, прва ствар коју треба да уђе у ред, 383 00:29:41,980 --> 00:29:47,630 је прва ствар која добија преузета из реда. 384 00:29:47,630 --> 00:29:51,490 Редови су такође често користи када имамо посла са графиконима, 385 00:29:51,490 --> 00:29:55,560 као да смо разговарали о томе кратко са димњака, 386 00:29:55,560 --> 00:30:00,260 а редови су такође корисна за гомилу других ствари. 387 00:30:00,260 --> 00:30:06,180 Једна ствар која се појављује често покушавају да одрже, на пример, 388 00:30:06,180 --> 00:30:12,310 сортирана листа елемената. 389 00:30:12,310 --> 00:30:17,650 И ви можете да урадите са низом. Можете да одржи сортирани списак ствари у низу, 390 00:30:17,650 --> 00:30:20,650 али где да се добије незгодан је тада увек морате да пронађете 391 00:30:20,650 --> 00:30:26,160 одговарајуће место за уметање следећу ствар. 392 00:30:26,160 --> 00:30:28,250 Дакле, ако имате низ бројева, 1 до 10, 393 00:30:28,250 --> 00:30:31,630 и онда желите да проширите то све бројеве од 1 до 100, 394 00:30:31,630 --> 00:30:33,670 а ви добијате те бројеве случајним редоследом и покушава да задржи све 395 00:30:33,670 --> 00:30:40,650 поредани како идете путем, можете завршити потребе да урадите много мења. 396 00:30:40,650 --> 00:30:43,910 Са одређеним врстама редовима и одређених врста основних структура података, 397 00:30:43,910 --> 00:30:46,670 ви у ствари може да је прилично једноставно. 398 00:30:46,670 --> 00:30:50,640 Не морате да додате нешто, а затим реорганизација цела ствар сваки пут. 399 00:30:50,640 --> 00:30:56,770 Нити морате да урадите много померања унутрашњих елемената у околини. 400 00:30:56,770 --> 00:31:02,990 Када погледамо у реду, видећете да - иу куеуе.ц у делу код - 401 00:31:02,990 --> 00:31:10,950 структуре попунити које смо вам дали је заиста сличан струцт да смо вам дао за стеку. 402 00:31:10,950 --> 00:31:13,770 >> Постоји један изузетак, а то је један изузетак 403 00:31:13,770 --> 00:31:21,700 јесте да имамо ову додатну цео зове глава, 404 00:31:21,700 --> 00:31:28,120 а глава је овде за праћење шефа ред, 405 00:31:28,120 --> 00:31:32,160 или први елемент у реду. 406 00:31:32,160 --> 00:31:37,470 Уз гомилу, били смо у могућности да пратите елемента који смо били око за преузимање, 407 00:31:37,470 --> 00:31:40,800 или врх стека, користећи само величину, 408 00:31:40,800 --> 00:31:44,220 док је код ред, имамо да се бави са супротним крајевима. 409 00:31:44,220 --> 00:31:49,000 Ми покушавамо да ствари на лепљивост на крају, али онда се врати ствари из фронта. 410 00:31:49,000 --> 00:31:54,640 Тако ефикасно, са главом, имамо индекс почетка реда, 411 00:31:54,640 --> 00:31:58,920 а величина нам даје индекс краја реда 412 00:31:58,920 --> 00:32:03,730 тако да можемо да преузме ствари из главе и додајте ствари на репу. 413 00:32:03,730 --> 00:32:06,890 Док са стек, ми смо били само икада бави врху стека. 414 00:32:06,890 --> 00:32:08,900 Никада нисмо имали приступ дно стека. 415 00:32:08,900 --> 00:32:12,220 Ми само додаје ствари на врху и узео ствари офф врху 416 00:32:12,220 --> 00:32:17,470 тако да није било потребно да се додатно поље унутар нашег струцт. 417 00:32:17,470 --> 00:32:20,590 Да ли то уопште смисла? 418 00:32:20,590 --> 00:32:27,670 У реду. Да, Шарлот? [Шарлот, неразумљив] 419 00:32:27,670 --> 00:32:32,660 [Хардисон] То је велико питање, а то је онај који је дошао у предавању. 420 00:32:32,660 --> 00:32:36,290 Можда шетњу кроз неколико примера ће илустровати зашто 421 00:32:36,290 --> 00:32:41,400 не желимо да користимо конце [0] као руководиоца реда. 422 00:32:41,400 --> 00:32:46,770 >> Дакле, замислите да имамо ред, ми ћемо га зову куеуе. 423 00:32:46,770 --> 00:32:49,210 На почетку, када смо управо то инстанце, 424 00:32:49,210 --> 00:32:53,330 када смо управо то изјавио, нисмо покренут ништа. 425 00:32:53,330 --> 00:32:56,790 То је све смеће. Па наравно желимо да се уверите да покрене 426 00:32:56,790 --> 00:33:00,950 како величина и главу поља бити 0, нешто разумно. 427 00:33:00,950 --> 00:33:05,770 Такође смо могли ићи напред и нулл напоље елементе у нашој ред. 428 00:33:05,770 --> 00:33:09,930 А да би овај напад дијаграма, приметићете да сада наш ред чекања може само држати три елемента; 429 00:33:09,930 --> 00:33:13,150 док наш стек може одржати четири наша куеуе може само држати три. 430 00:33:13,150 --> 00:33:18,680 А то је само да праве дијаграм. 431 00:33:18,680 --> 00:33:26,150 Прва ствар која се овде догађа је да ми енкуеуе ниску "здраво". 432 00:33:26,150 --> 00:33:30,380 И баш као што смо урадили са стек, ништа страшно другачија овде, 433 00:33:30,380 --> 00:33:39,230 бацамо на ниску на жицама [0] и увећава нашу величину од 1. 434 00:33:39,230 --> 00:33:42,720 Ми енкуеуе "ћао", она добија обући. 435 00:33:42,720 --> 00:33:45,870 Дакле, ово личи на стек за највећи део. 436 00:33:45,870 --> 00:33:53,230 Кренули смо овде, нови елемент, нови елемент, величина стално иде горе. 437 00:33:53,230 --> 00:33:56,330 Шта се дешава у овом тренутку, када желимо да декуеуе нешто? 438 00:33:56,330 --> 00:34:01,280 Када желимо да декуеуе, што је елемент који желимо да декуеуе? 439 00:34:01,280 --> 00:34:04,110 [Василије] жице [0]. >> Нула. Тачно тако, Басиле. 440 00:34:04,110 --> 00:34:10,960 Ми желимо да се ослободимо од прве ниске, овај један, "здраво". 441 00:34:10,960 --> 00:34:13,170 Дакле, шта је друга ствар то променило? 442 00:34:13,170 --> 00:34:17,010 Обратите пажњу када смо појавио нешто искључивање стек, ми смо само променили величину, 443 00:34:17,010 --> 00:34:22,080 али овде, имамо пар ствари које се мењају. 444 00:34:22,080 --> 00:34:27,440 Не само на величину промене, али глава промене. 445 00:34:27,440 --> 00:34:31,020 Ово је да се вратимо на тачку Цхарлотте раније: 446 00:34:31,020 --> 00:34:38,699 зашто имамо ову главу, као и? 447 00:34:38,699 --> 00:34:42,110 Има ли сада смисла, Шарлот? >> Некако. 448 00:34:42,110 --> 00:34:47,500 [Хардисон] Кинд оф? Дакле, шта се десило када смо декуеуед? 449 00:34:47,500 --> 00:34:54,340 Шта је глава да урадите сада је занимљиво? 450 00:34:54,340 --> 00:34:56,449 [Шарлот] Ох, зато што мења - у реду. Разумем. 451 00:34:56,449 --> 00:35:02,090 Пошто је глава - где је глава указује на промене у погледу локације. 452 00:35:02,090 --> 00:35:07,200 То више није увек нула индекс један. >> Да, тачно. 453 00:35:07,200 --> 00:35:17,660 Оно што се десило је било да ли декуеуеинг висок елемент 454 00:35:17,660 --> 00:35:20,590 урађено и ми нисмо имали ову област главе 455 00:35:20,590 --> 00:35:26,880 јер смо увек били називајући ову жицу на 0 индекса шеф нашег реду, 456 00:35:26,880 --> 00:35:30,170 онда цемо морати да смени остатак ред надоле. 457 00:35:30,170 --> 00:35:36,010 Морамо да пребаце "ћао" из из ниски [1] са жицама [0]. 458 00:35:36,010 --> 00:35:38,760 И стрингс [2] до стрингс [1]. 459 00:35:38,760 --> 00:35:43,050 И ми бисмо да то уради за целу листу елемената, 460 00:35:43,050 --> 00:35:45,110 цео низ елемената. 461 00:35:45,110 --> 00:35:50,490 И када ово радимо са низом да добије стварно скупо. 462 00:35:50,490 --> 00:35:53,340 Па ево, то није велика ствар. Ми само имамо три елемента у нашем низу. 463 00:35:53,340 --> 00:35:57,230 Али, ако смо имали ред од хиљаду елемената или милион елемената, 464 00:35:57,230 --> 00:36:00,060 и онда сви одједном почнемо израду гомилу декуеуе позива све у петљи, 465 00:36:00,060 --> 00:36:03,930 ствари заиста дешава да успори јер помера све доле стално. 466 00:36:03,930 --> 00:36:07,320 Знаш, да се помјере са 1, прелаз 1, смене од 1, смена од 1. 467 00:36:07,320 --> 00:36:13,650 Уместо тога, ми користимо ову главу, зовемо га "показивач" иако то није баш показивач 468 00:36:13,650 --> 00:36:16,430 у строгом смислу, то није поентер тип. 469 00:36:16,430 --> 00:36:19,410 То није инт * или цхар или нешто слично. 470 00:36:19,410 --> 00:36:28,930 Али то показује и указује на главу нашег реда. Да? 471 00:36:28,930 --> 00:36:38,800 >> [Студентски] Како декуеуе зна да само пући све што је у глави? 472 00:36:38,800 --> 00:36:43,620 [Хардисон] Како декуеуе зна како да пући све што је у глави? >> Да, да. 473 00:36:43,620 --> 00:36:49,050 >> Шта се гледа само год глава поље постављено на. 474 00:36:49,050 --> 00:36:52,710 Дакле, у овом првом случају, ако погледамо овде, 475 00:36:52,710 --> 00:36:55,690 наша глава је 0, индекс 0. >> Реду. 476 00:36:55,690 --> 00:37:00,500 [Хардисон] Дакле само каже у реду, добро, елемент у индексу 0, стринг "Здраво", 477 00:37:00,500 --> 00:37:03,050 је елемент на челу нашег реда. 478 00:37:03,050 --> 00:37:05,570 Дакле, ми ћемо декуеуе тог момка. 479 00:37:05,570 --> 00:37:09,800 И то ће бити елемент који добија вратио позиваоцу. 480 00:37:09,800 --> 00:37:14,540 Да, Саад? >> Дакле, глава основи поставља - где ћеш да га индекс? 481 00:37:14,540 --> 00:37:17,750 То је почетак тога? >> Да. >> Реду. 482 00:37:17,750 --> 00:37:22,900 [Хардисон] То постаје нови почетак за нашу низа. 483 00:37:22,900 --> 00:37:28,930 Дакле, када декуеуе нешто, све што треба да урадите је да приступите елемента на индексне к.хеад, 484 00:37:28,930 --> 00:37:32,240 и да ће бити елемент који желите да декуеуе. 485 00:37:32,240 --> 00:37:34,930 Ви такође треба да Смањење величине. 486 00:37:34,930 --> 00:37:39,430 Видећемо се ускоро, где ствари постају мало незгодно са овим. 487 00:37:39,430 --> 00:37:46,520 Ми декуеуе, и сада, ако ми опет енкуеуе, 488 00:37:46,520 --> 00:37:51,300 где смо енкуеуе? 489 00:37:51,300 --> 00:37:55,000 Одакле Следећи елемент иде у нашем реду? 490 00:37:55,000 --> 00:37:57,980 Реци ми желимо да енкуеуе ниску "ЦС". 491 00:37:57,980 --> 00:38:02,240 У којем индекс ће ићи? [Студенти] жице [2]. >> Два. 492 00:38:02,240 --> 00:38:04,980 Зашто 2 и није 0? 493 00:38:04,980 --> 00:38:13,570 [Василије] Јер сада је глава 1, тако да је као на почетку листе? 494 00:38:13,570 --> 00:38:21,220 [Хардисон] Тачно. А шта означава крај листе? 495 00:38:21,220 --> 00:38:23,290 Шта смо користили да означи крај нашег реду? 496 00:38:23,290 --> 00:38:25,970 Глава је глава наше реду, почетак нашег реда. 497 00:38:25,970 --> 00:38:29,530 Шта је крај нашег реду? [Студенти] Величина. >> Сизе, тачно. 498 00:38:29,530 --> 00:38:36,360 Дакле, наши нови елементи иду у на величини, а елементи које смо скинемо отпасти у главу. 499 00:38:36,360 --> 00:38:45,390 Када смо енкуеуе следећи елемент, ми смо га стављате у на величини. 500 00:38:45,390 --> 00:38:48,530 [Студентски] Пре него што ставите да, иако, величина је 1, зар не? 501 00:38:48,530 --> 00:38:55,690 [Хардисон] Тачно. Дакле, не баш у величини. Величина +, не +1, али + глава. 502 00:38:55,690 --> 00:38:59,990 Зато што смо померио све по глави износа. 503 00:38:59,990 --> 00:39:14,270 Дакле, сада имамо ред величине 1 који почиње у индексу 1. 504 00:39:14,270 --> 00:39:20,730 Реп је индекс 2. Да? 505 00:39:20,730 --> 00:39:25,780 >> [Студентски] Шта се дешава када декуеуе жице [0], а конце "слотова у меморији 506 00:39:25,780 --> 00:39:29,420 Само се испразнио, у основи, или само заборавили? 507 00:39:29,420 --> 00:39:34,700 [Хардисон] Да. У том смислу, само смо их заборавили. 508 00:39:34,700 --> 00:39:42,640 Ако смо били складиштење копије за њих - 509 00:39:42,640 --> 00:39:46,310 многе структуре података често ће сачувати своје примерке елемената 510 00:39:46,310 --> 00:39:51,760 тако да лице које управља структуру података не мора да брине 511 00:39:51,760 --> 00:39:53,650 о томе где су све те показивачи иду. 512 00:39:53,650 --> 00:39:56,000 Структура података држи на свему, има на свим копијама, 513 00:39:56,000 --> 00:39:59,580 да бисте се уверили да је све опстаје на одговарајући начин. 514 00:39:59,580 --> 00:40:03,140 Међутим, у овом случају, ове структуре података само за једноставност, 515 00:40:03,140 --> 00:40:05,580 не чинећи копије свега што смо складишне у њима. 516 00:40:05,580 --> 00:40:08,630 [Студентски] Да ли је ово континуирани низ -? >> Да. 517 00:40:08,630 --> 00:40:14,350 Ако се осврнемо на оно што је дефиниција ове структуре, јесте. 518 00:40:14,350 --> 00:40:19,110 То је само стандардни низ као што сте видели, 519 00:40:19,110 --> 00:40:24,280 низ цхар * с. 520 00:40:24,280 --> 00:40:26,340 Да ли то -? >> Да, само сам се питао 521 00:40:26,340 --> 00:40:29,130 ако на крају ћете понестане меморије, у извесној мери, 522 00:40:29,130 --> 00:40:32,330 ако имате све ове празне места у вашем низу? 523 00:40:32,330 --> 00:40:36,390 [Хардисон] Да, то је добра ствар. 524 00:40:36,390 --> 00:40:41,530 >> Ако погледамо шта се десило сад у овом тренутку, 525 00:40:41,530 --> 00:40:46,350 смо испуњен наш ред, то изгледа. 526 00:40:46,350 --> 00:40:50,390 Али нисмо баш напунила наш ред 527 00:40:50,390 --> 00:40:57,710 јер имамо ред који је величина 2, али то почиње у индексу 1, 528 00:40:57,710 --> 00:41:02,160 јер то је место где наш показивач глава. 529 00:41:02,160 --> 00:41:08,400 Као што си рекао, тај елемент на жицама [0], на индекс 0, није стварно тамо. 530 00:41:08,400 --> 00:41:10,450 То није у нашој ред висе. 531 00:41:10,450 --> 00:41:16,460 Ми једноставно није сметало да идем и да препишете је када смо га декуеуед. 532 00:41:16,460 --> 00:41:18,700 Дакле, иако изгледа као да смо понестане меморије, заиста није. 533 00:41:18,700 --> 00:41:23,270 То место је на располагању за нас да користимо. 534 00:41:23,270 --> 00:41:29,310 Примерено понашање, ако смо да покушамо и први декуеуе нешто 535 00:41:29,310 --> 00:41:34,420 као "ћао", да би поп бие искључен. 536 00:41:34,420 --> 00:41:38,460 Сада је наш ред чекања почиње у индексу 2 и величине 1. 537 00:41:38,460 --> 00:41:42,240 А сада, ако ми покушамо нешто енкуеуе опет, кажу 50, 538 00:41:42,240 --> 00:41:47,880 50 треба да иду у том месту у индексу 0 539 00:41:47,880 --> 00:41:51,270 јер је још увек доступан за нас. Да, Саад? 540 00:41:51,270 --> 00:41:53,630 [Саад] Да ли се то догодило аутоматски? 541 00:41:53,630 --> 00:41:56,150 [Хардисон] То се не дешава баш аутоматски. Морате да урадите математику 542 00:41:56,150 --> 00:42:00,380 да то ради, али у суштини оно што смо урадили је да смо управо обмотана око. 543 00:42:00,380 --> 00:42:04,070 [Саад] И то је у реду ако то има рупу у средини тога? 544 00:42:04,070 --> 00:42:08,720 [Хардисон] То је ако можемо да математика ради правилно. 545 00:42:08,720 --> 00:42:15,470 >> И испада да је то у ствари није тако тешко урадити са мод оператера. 546 00:42:15,470 --> 00:42:20,040 Дакле, као што смо урадили са Цезаром и крипто ствари, 547 00:42:20,040 --> 00:42:25,190 користи мод, можемо добити ствари да обмотана и наставите 548 00:42:25,190 --> 00:42:28,090 около и около и около са нашим реду, 549 00:42:28,090 --> 00:42:32,180 држећи да шеф показивач креће. 550 00:42:32,180 --> 00:42:38,840 Приметите да је величина је увек поштујући број елемената у ствари у ред. 551 00:42:38,840 --> 00:42:43,110 И то је само глава показивач који држи бициклом кроз. 552 00:42:43,110 --> 00:42:49,660 Ако погледамо шта се овде догодило, ако се вратимо на почетак, 553 00:42:49,660 --> 00:42:55,020 а ви само гледате шта се дешава на глави 554 00:42:55,020 --> 00:42:58,240 када смо енкуеуе нешто, ништа се није десило у главу. 555 00:42:58,240 --> 00:43:00,970 Када смо енкуеуед нешто друго, ништа се није десило у главу. 556 00:43:00,970 --> 00:43:04,130 Чим смо декуеуед нешто, глава иде до једног. 557 00:43:04,130 --> 00:43:06,600 Ми енкуеуед нешто, ништа се не дешава на глави. 558 00:43:06,600 --> 00:43:11,060 Када смо декуеуе нешто, све изненада глава добија увећава. 559 00:43:11,060 --> 00:43:14,660 Када смо енкуеуе нешто, ништа се не дешава на глави. 560 00:43:14,660 --> 00:43:20,240 >> Шта би се десило у овом тренутку, ако бисмо декуеуе нешто поново? 561 00:43:20,240 --> 00:43:23,240 Било која мисли? Шта би се десило са главом? 562 00:43:23,240 --> 00:43:27,190 Шта треба да се деси у главу 563 00:43:27,190 --> 00:43:32,990 ако бисмо декуеуе нешто друго? 564 00:43:32,990 --> 00:43:35,400 Глава сада је на индекс 2, 565 00:43:35,400 --> 00:43:38,920 што значи да је шеф реду је стрингс [2]. 566 00:43:38,920 --> 00:43:44,280 [Студентски] Који враћа 0? >> То би требало да се врати на 0. То би требало преломити врати се, тачно. 567 00:43:44,280 --> 00:43:48,440 До сада, сваки пут кад смо се зове декуеуе смо били додајући један у главу, 568 00:43:48,440 --> 00:43:50,960 додајте један у главу, додајте једно по глави, додајте једну на глави. 569 00:43:50,960 --> 00:43:58,400 Чим да шеф показивач стигне до последњег индекса у нашем низу, 570 00:43:58,400 --> 00:44:05,650 онда морамо да га преломити назад около на почетку, врати на 0. 571 00:44:05,650 --> 00:44:09,900 [Шарлот] Шта одређује капацитет реда у стеку? 572 00:44:09,900 --> 00:44:13,120 [Хардисон] У овом случају, управо смо користили # дефинисана константа. >> Реду. 573 00:44:13,120 --> 00:44:19,590 [Хардисон] У актуелна. Ц фајл, можете отићи и гадост са њим мало 574 00:44:19,590 --> 00:44:21,710 и да га као велики или мало онолико колико желите. 575 00:44:21,710 --> 00:44:25,310 [Шарлот] Дакле, када сте га правите ред, како би се рачунар зна 576 00:44:25,310 --> 00:44:29,120 колики желите стек да буде? 577 00:44:29,120 --> 00:44:31,700 [Хардисон] То је велико питање. 578 00:44:31,700 --> 00:44:34,800 Постоји неколико начина. Једна је да то једноставно дефинисати напред 579 00:44:34,800 --> 00:44:42,050 и кажу да ће то бити перчин који има 4 елемента или 50 елемената или 10.000. 580 00:44:42,050 --> 00:44:45,430 Други начин је да се уради оно што су радили људи хакерске издање 581 00:44:45,430 --> 00:44:52,310 и створити функције да имају своје перчин расте динамички као још ствари се додаје унутра 582 00:44:52,310 --> 00:44:54,740 >> [Шарлот] Дакле да иде са првом опцијом, шта синтакса се користи 583 00:44:54,740 --> 00:44:57,830 да кажем програм шта је величина реда? 584 00:44:57,830 --> 00:45:04,780 [Хардисон] Ах. Зато идемо одавде. 585 00:45:04,780 --> 00:45:12,650 И даље сам у стацк.ц овде, па ћу само да дођете до врха овде. 586 00:45:12,650 --> 00:45:17,920 Да ли видите овде ово право? Ово је # дефине капацитета 10. 587 00:45:17,920 --> 00:45:24,600 А ово је скоро потпуно исти синтакса која имамо за ред. 588 00:45:24,600 --> 00:45:28,390 Осим у реду, ми смо добили тај екстра струцт поље овде. 589 00:45:28,390 --> 00:45:32,760 [Шарлот] Ох, мислио сам да је капацитет значило капацитет за ниске. 590 00:45:32,760 --> 00:45:36,770 [Хардисон] Ах. >> То је максимална дужина речи. >> Имам га. 591 00:45:36,770 --> 00:45:41,180 Да. Капацитет овде - то је велика ствар. 592 00:45:41,180 --> 00:45:44,000 И то је нешто што је шкакљиво 593 00:45:44,000 --> 00:45:49,480 јер оно што смо овде изјавио је низ цхар * с. 594 00:45:49,480 --> 00:45:52,770 Низ показивача. 595 00:45:52,770 --> 00:45:56,690 То је низ карактера. 596 00:45:56,690 --> 00:46:01,690 То је вероватно оно што сте видели када сте били проглашења своје бафере за фајла И / О 597 00:46:01,690 --> 00:46:06,840 када сте стварали конце ручно на стеку. 598 00:46:06,840 --> 00:46:09,090 Међутим, оно што ми имамо овде је низ цхар * с. 599 00:46:09,090 --> 00:46:13,400 Дакле, то је низ показивача. 600 00:46:13,400 --> 00:46:18,350 Заправо, ако се вратимо умањили и гледамо шта се дешава овде 601 00:46:18,350 --> 00:46:23,140 у презентацију, видећете да је стварни елементи, карактер података 602 00:46:23,140 --> 00:46:26,180 не чува се у самом низу. 603 00:46:26,180 --> 00:46:42,690 Шта је ускладиштен у нашој низа овде су показивачи на карактер података. 604 00:46:42,690 --> 00:46:52,560 Ок. Тако смо видели како се величина реда је исто као са стек, 605 00:46:52,560 --> 00:46:58,670 величина увек поштује број елемената тренутно у реду. 606 00:46:58,670 --> 00:47:02,720 Након што 2 енкуеуес, величина 2. 607 00:47:02,720 --> 00:47:07,110 Након што је декуеуе величина је сада 1. 608 00:47:07,110 --> 00:47:09,330 Након што други енкуеуе величина је поново до 2. 609 00:47:09,330 --> 00:47:12,340 Дакле, величина дефинитивно поштује број елемената у реду, 610 00:47:12,340 --> 00:47:15,580 и онда глава само наставља бициклизмом. 611 00:47:15,580 --> 00:47:20,210 Она иде од 0-1-2, 0-1-2, 0-1-2. 612 00:47:20,210 --> 00:47:25,620 И сваки пут ми називамо декуеуе, шеф показивач добија увећава до следећег индекса. 613 00:47:25,620 --> 00:47:29,930 А ако је глава да оде преко, то петљи назад около 0. 614 00:47:29,930 --> 00:47:34,870 Дакле са тим, можемо написати декуеуе функцију. 615 00:47:34,870 --> 00:47:40,200 А ми ћемо да напустимо енкуеуе функцију ви уместо спроведе. 616 00:47:40,200 --> 00:47:45,880 >> Када смо декуеуе елемент из нашег реда, 617 00:47:45,880 --> 00:47:55,490 каква је била прва ствар коју Данијел урадио када смо почели да пишемо поп функцију за гомиле? 618 00:47:55,490 --> 00:48:00,490 Дозволите ми да чујем од некога ко није говорио још. 619 00:48:00,490 --> 00:48:06,710 Хајде да видимо, Саад, да ли се сећате шта Данијел урадио као прву ствар кад пише поп? 620 00:48:06,710 --> 00:48:08,860 [Саад] Било је, било је - >> Он је тестирао за нешто. 621 00:48:08,860 --> 00:48:12,140 [Саад] Ако је величина већа од 0. >> Тачно. 622 00:48:12,140 --> 00:48:14,390 А шта је то тестирање? 623 00:48:14,390 --> 00:48:19,090 [Саад] То је тестирање да видим да ли има нешто у низу. 624 00:48:19,090 --> 00:48:23,210 [Хардисон] Да. Управо тако. Дакле, не можете да убаците ништа од гомиле ако је празна. 625 00:48:23,210 --> 00:48:26,510 Исто тако, не можете ништа од декуеуе ред ако је празна. 626 00:48:26,510 --> 00:48:30,420 Која је прва ствар коју треба да урадите у нашој декуеуе функцији овде, шта мислиш? 627 00:48:30,420 --> 00:48:33,860 [Саад] Ако је величина већа од 0? >> Да. 628 00:48:33,860 --> 00:48:37,710 У том случају, ја заправо нисам баш тестирали да ли је 0. 629 00:48:37,710 --> 00:48:42,240 Ако је 0, можемо вратити нулл. 630 00:48:42,240 --> 00:48:45,280 Али тачно иста логика. 631 00:48:45,280 --> 00:48:49,110 И да наставимо са овим. 632 00:48:49,110 --> 00:48:54,600 Ако величина није 0, где је елемент који желимо да декуеуе? 633 00:48:54,600 --> 00:48:58,550 [Саад] У глави? >> Тачно. 634 00:48:58,550 --> 00:49:01,720 Ми само можемо извући први елемент у нашем реду 635 00:49:01,720 --> 00:49:07,040 приступањем елемент у главу. 636 00:49:07,040 --> 00:49:14,630 Ништа луд. 637 00:49:14,630 --> 00:49:19,620 После тога, шта да радимо? Шта треба да се деси? 638 00:49:19,620 --> 00:49:23,740 Шта је била друга ствар коју смо разговарали о томе у декуеуе? 639 00:49:23,740 --> 00:49:28,130 Две ствари морају да се деси, јер је наш куеуе није променило. 640 00:49:28,130 --> 00:49:35,640 [Данијел] Смањите величину. >> Морамо да смањи величину и повећати главу? Управо тако. 641 00:49:35,640 --> 00:49:40,600 Да бисте повећали главу, не можемо само слепо повећати главу, сећам се. 642 00:49:40,600 --> 00:49:45,080 Ми не можемо урадити куеуе.хеад + +. 643 00:49:45,080 --> 00:49:51,630 Морамо да се овај мод од капацитета. 644 00:49:51,630 --> 00:49:54,740 А зашто ми модифитсиране по капацитету, Стелла? 645 00:49:54,740 --> 00:49:58,680 [Стелла] Зато сто обмотана. >> Тачно. 646 00:49:58,680 --> 00:50:04,750 Ми мод по капацитету, јер мора да заврши назад около да 0. 647 00:50:04,750 --> 00:50:07,400 Дакле, сада, у овом тренутку, можемо да радимо шта Данијел рекао. 648 00:50:07,400 --> 00:50:12,700 Можемо Смањи величину. 649 00:50:12,700 --> 00:50:29,170 А онда можемо да врати елемент који је био на врху реда. 650 00:50:29,170 --> 00:50:34,000 Изгледа некако чворноват на први поглед. Можда имам питање. Извини? 651 00:50:34,000 --> 00:50:37,260 >> [Сам] Зашто је први на врху реда? Где то иде? 652 00:50:37,260 --> 00:50:42,480 [Хардисон] То долази из четвртог линији од дна. 653 00:50:42,480 --> 00:50:46,060 Након што смо тестирали да се уверите да наша Редослед није празна, 654 00:50:46,060 --> 00:50:54,100 ми извуче прво цхар *, ми смо извуците елемент који је седео на челу индекса 655 00:50:54,100 --> 00:50:58,680 нашег низа, наше гудаче низа, >> и позив да се први? 656 00:50:58,680 --> 00:51:04,500 [Хардисон] И зовемо га први. Да. 657 00:51:04,500 --> 00:51:09,850 Само да пратите на томе, зашто мислиш да смо то да урадим? 658 00:51:09,850 --> 00:51:18,270 [Сам] Сваки први је управо враћа к.стрингс [к.хеад]? >> Да. 659 00:51:18,270 --> 00:51:23,830 >> Зато радимо овај промену к.хеад са мод функције, 660 00:51:23,830 --> 00:51:27,810 и не постоји начин да се то уради у року од повратка линије такође. 661 00:51:27,810 --> 00:51:31,640 [Хардисон] Управо тако. Ти си спот он. Сем је потпуно уочити он. 662 00:51:31,640 --> 00:51:36,800 Разлог због којег смо морали да се повуку први елемент у нашем реду и чувајте га у променљиву 663 00:51:36,800 --> 00:51:43,030 зато ову линију где смо управо к.хеад, 664 00:51:43,030 --> 00:51:47,030 ту је мод оператер тамо није нешто што можемо да урадимо 665 00:51:47,030 --> 00:51:51,230 и да је потребно да делује на глави, без - у једној линији. 666 00:51:51,230 --> 00:51:54,480 Дакле, ми заправо треба да извуче први елемент, а затим подесите главу, 667 00:51:54,480 --> 00:52:00,430 подесите величину, а затим се вратите елемент који смо извукли. 668 00:52:00,430 --> 00:52:02,680 И то је нешто што ћемо видети касније доћи до 669 00:52:02,680 --> 00:52:04,920 повезане листе, као што смо се играте са њима. 670 00:52:04,920 --> 00:52:08,410 Често када сте ослобађање или располагања повезаних листи 671 00:52:08,410 --> 00:52:13,500 морате да запамтите следећи елемент, следећи показивач на повезану листу 672 00:52:13,500 --> 00:52:16,330 Пре одлагања тренутне. 673 00:52:16,330 --> 00:52:23,580 Јер иначе баците информације о томе шта је остало на листи. 674 00:52:23,580 --> 00:52:34,160 Сада, ако идете на свом апарату, морате отворити куеуе.ц-Кс од овога. 675 00:52:34,160 --> 00:52:39,390 Дакле, ако сам отворим куеуе.ц, дозволите ми да увећај овде, 676 00:52:39,390 --> 00:52:44,970 видећете да имате сличне изгледа датотеку. 677 00:52:44,970 --> 00:52:49,200 Слично изгледа фајл оно што смо имали раније са стацк.ц. 678 00:52:49,200 --> 00:52:54,690 Имамо нашу струцт за ред дефинисан баш као што смо видели на слајдовима. 679 00:52:54,690 --> 00:52:59,870 >> Ми имамо енкуеуе функцију која је за вас да урадите. 680 00:52:59,870 --> 00:53:04,340 И ми имамо овде декуеуе функцију. 681 00:53:04,340 --> 00:53:06,870 Тхе декуеуе функција у датотеци не спроводе, 682 00:53:06,870 --> 00:53:13,230 али ја ћу га ставити назад на ПоверПоинт, тако да можете да га упишете у, ако желите. 683 00:53:13,230 --> 00:53:16,690 Дакле, за наредних 5 минута или тако, ви момци радите на енкуеуе 684 00:53:16,690 --> 00:53:22,570 што је скоро управо супротно декуеуе. 685 00:53:22,570 --> 00:53:29,560 Не морате да подесите главу када сте енкуеуеинг, али шта имате да подесите? 686 00:53:29,560 --> 00:53:38,920 Сизе. Дакле, када енкуеуе, глава остаје нетакнута, величина добија променила. 687 00:53:38,920 --> 00:53:46,920 Али то не узме мало - ви ћете морати да се играте са тим мод 688 00:53:46,920 --> 00:53:57,560 да схватим шта индекс нови елемент треба да буде убачена у. 689 00:53:57,560 --> 00:54:03,080 Зато ћу ти дати момци мало, ставио декуеуе назад на слајду, 690 00:54:03,080 --> 00:54:05,200 и као ви имате питања, да их изнесу, тако да можемо 691 00:54:05,200 --> 00:54:09,220 Сви говоримо о њима као групи. 692 00:54:09,220 --> 00:54:13,960 Такође, са величином ли не - када сте подесили величину, можете увек само - 693 00:54:13,960 --> 00:54:18,720 Не морате да икада модифитсиране величину? [Данијел] Но >> Не морате да модифитсиране величину, у реду. 694 00:54:18,720 --> 00:54:24,260 Јер величина ће увек, ако ти си - под претпоставком да сте управљању ствари на прави начин, 695 00:54:24,260 --> 00:54:30,840 величина ће увек бити између 0 и 3. 696 00:54:30,840 --> 00:54:38,680 Где мораш да модифитсиране када радите енкуеуе? 697 00:54:38,680 --> 00:54:41,060 [Студентски] Само за главу. >> Само за главу, тачно. 698 00:54:41,060 --> 00:54:44,620 А зашто мораш да модифитсиране уопште у енкуеуе? 699 00:54:44,620 --> 00:54:48,830 Када је ситуација у којој желите да мод? 700 00:54:48,830 --> 00:54:53,630 [Студентски] Ако имате ствари у простору, као код просторима 1 и 2, 701 00:54:53,630 --> 00:54:55,950 а онда је потребно да додате нешто на 0. 702 00:54:55,950 --> 00:55:02,570 [Хардисон] Да, тачно. Дакле, ако ваш показивач глава је на самом крају, 703 00:55:02,570 --> 00:55:14,210 или ако је ваша величина, плус твоја глава је већа, односно ће преломити око реду. 704 00:55:14,210 --> 00:55:17,830 >> Дакле, у овој ситуацији у којој смо добили овде на слајду сада, 705 00:55:17,830 --> 00:55:24,370 ако желим да енкуеуе нешто сада, 706 00:55:24,370 --> 00:55:31,110 желимо да енкуеуе нешто на индекс 0. 707 00:55:31,110 --> 00:55:35,450 Дакле, ако се осврнемо на којој 50 иде, а ја зовем енкуеуе 50, 708 00:55:35,450 --> 00:55:40,840 она иде тамо доле на дну. Она иде у индекс 0. 709 00:55:40,840 --> 00:55:44,160 Он замењује "Здраво" који је већ декуеуед. 710 00:55:44,160 --> 00:55:46,210 [Данијел] Немојте се ви бринете о томе у декуеуе већ? 711 00:55:46,210 --> 00:55:50,550 Зашто ништа са главом у енкуеуе? 712 00:55:50,550 --> 00:55:55,770 [Хардисон] О, па ти не мењате главу, извини. 713 00:55:55,770 --> 00:56:02,310 Али морате да користите оператор мод када сте приступате 714 00:56:02,310 --> 00:56:04,250 елемент који желите да енкуеуе када приступате 715 00:56:04,250 --> 00:56:06,960 следећи елемент у свој ред. 716 00:56:06,960 --> 00:56:10,960 [Василије] Нисам то урадио, и ја сам "успех" на тамо. 717 00:56:10,960 --> 00:56:13,370 [Данијел] Ох, ја разумем шта причаш. 718 00:56:13,370 --> 00:56:16,240 [Хардисон] Дакле дидн'т - ви управо урадили на к.сизе? 719 00:56:16,240 --> 00:56:20,670 [Василије] Да. Управо сам променио страну, нисам ништа с главом. 720 00:56:20,670 --> 00:56:24,300 [Хардисон] Ви заправо немате да вратите главу бити ништа, 721 00:56:24,300 --> 00:56:31,650 али када индекс у низу гудаче, 722 00:56:31,650 --> 00:56:39,500 ви у ствари треба да иде напред и израчунати где Следећи елемент је, 723 00:56:39,500 --> 00:56:44,230 јер прут штос, следећи елемент у свом стеку увек била 724 00:56:44,230 --> 00:56:48,740 у индексу одговара величини. 725 00:56:48,740 --> 00:56:55,850 Ако се осврнемо уназад горе у нашој функцији стек пусх, 726 00:56:55,850 --> 00:57:03,100 увек смо могли бубнути у нашем новом елементу право на индекс величини. 727 00:57:03,100 --> 00:57:06,710 Док са листе чекања, не могу то да урадим 728 00:57:06,710 --> 00:57:10,340 јер ако смо у овој ситуацији, 729 00:57:10,340 --> 00:57:18,130 ако енкуеуед 50 наша нова ниска би било у реду отићи на жицама [1] 730 00:57:18,130 --> 00:57:20,540 који ми не желимо да урадимо. 731 00:57:20,540 --> 00:57:41,200 Желимо да имамо нови стринг иде на индекс 0. 732 00:57:41,200 --> 00:57:44,320 >> Да ли неко - да? [Студентски] Имам једно питање, али стварно се не односи. 733 00:57:44,320 --> 00:57:48,160 Шта значи када неко само тражи нешто пред поинтер? 734 00:57:48,160 --> 00:57:51,260 Шта је то име за кратко? Знам да је то само име. 735 00:57:51,260 --> 00:57:59,110 [Хардисон] Пред поентер? Хајде да видимо. У ком контексту? 736 00:57:59,110 --> 00:58:01,790 [Студентски] То је био за уметком. Могу да вас питам касније ако желиш 737 00:58:01,790 --> 00:58:03,920 јер то није баш у вези, али ја само - 738 00:58:03,920 --> 00:58:07,300 [Хардисон] Од Давида убацити код из предавања? 739 00:58:07,300 --> 00:58:10,860 Можемо повући да се и разговарати о томе. 740 00:58:10,860 --> 00:58:15,550 Причаћемо о томе следеће, када дођемо до повезаним листама. 741 00:58:15,550 --> 00:58:21,440 >> Па хајде да веома брзо погледамо шта енкуеуе функција изгледа. 742 00:58:21,440 --> 00:58:26,530 Шта је прва ствар коју људи покушали да ураде у свом енкуеуе линији? У том чекању? 743 00:58:26,530 --> 00:58:29,960 Слично што си урадио за гурање стека. 744 00:58:29,960 --> 00:58:32,080 Шта сте урадили, Стела? 745 00:58:32,080 --> 00:58:35,050 [Стелла, неразумљив] 746 00:58:35,050 --> 00:58:45,700 [Хардисон] Управо тако. Ако (к.сизе == КАПАЦИТЕТА) - 747 00:58:45,700 --> 00:58:54,720 Морам да ставим протезу на правом месту - ретурн. 748 00:58:54,720 --> 00:59:01,370 Увећање мало. Ок. 749 00:59:01,370 --> 00:59:03,800 Шта је сад следећа ствар коју смо морали да радимо? 750 00:59:03,800 --> 00:59:11,370 Баш као и са стек, и убаци на правом месту. 751 00:59:11,370 --> 00:59:16,010 И шта је било право место да убаците то? 752 00:59:16,010 --> 00:59:23,170 Са стека је индекс величине, са овим није баш тако. 753 00:59:23,170 --> 00:59:30,210 [Данијел] Имам к.хеад--или - >> к.стрингс? >> Да. 754 00:59:30,210 --> 00:59:40,470 к.стрингс [к.хеад + к.сизе мод КАПАЦИТЕТ?] 755 00:59:40,470 --> 00:59:42,740 [Хардисон] Ми смо вероватно желите да ставите заграде око овога 756 00:59:42,740 --> 00:59:48,830 тако да смо све одговарајуће предност и тако да је то цлеарт свима. 757 00:59:48,830 --> 00:59:55,800 И подесите да једнако? >> Да ул? >> Да ул. Сјајно. 758 00:59:55,800 --> 01:00:00,160 И сад шта је последња ствар коју морамо да урадимо? 759 01:00:00,160 --> 01:00:06,780 Баш као што смо урадили у стеку. >> Прираст величину? >> Прирасту величину. 760 01:00:06,780 --> 01:00:13,830 Бум. А онда, пошто је стартер код управо вратио лажно по дефаулту, 761 01:00:13,830 --> 01:00:27,460 желимо да променимо ово истина ако све иде преко и све иде добро. 762 01:00:27,460 --> 01:00:33,050 У реду. То је пуно информација за секције. 763 01:00:33,050 --> 01:00:39,480 Нисмо сасвим завршена. Ми желимо да разговарамо о стварно брзо појединачно-повезаним листама. 764 01:00:39,480 --> 01:00:44,010 Ставићу ово па да се вратимо на то касније. 765 01:00:44,010 --> 01:00:50,850 Али хајде да се вратимо на нашу презентацију за само неколико више слајдова. 766 01:00:50,850 --> 01:00:53,790 Дакле енкуеуе је ТОДО, сада смо то урадили. 767 01:00:53,790 --> 01:00:57,430 >> Сада ћемо да погледамо појединачно-повезаним листама. 768 01:00:57,430 --> 01:01:00,040 Причали смо о овоме мало више у предавању. 769 01:01:00,040 --> 01:01:02,540 Колико од вас видео демо где смо имали људе 770 01:01:02,540 --> 01:01:08,220 неспретно указујући једни друге и држање бројевима? >> Био сам у то. 771 01:01:08,220 --> 01:01:16,620 >> Шта ви мислите? Да ли је то, надам се демистификује ове мало? 772 01:01:16,620 --> 01:01:25,990 Са листе, испада да се бавимо овим типом који ћемо позвати чвор. 773 01:01:25,990 --> 01:01:32,520 Док са реда и стека ми смо имали Структуре које бисмо назвали ред у стеку, 774 01:01:32,520 --> 01:01:34,860 смо имали ове нове ред у стека врстама, 775 01:01:34,860 --> 01:01:39,240 Овде је списак заиста само састоји од гомиле чворова. 776 01:01:39,240 --> 01:01:45,920 На исти начин на који су жице само гомила карактера све постројио поред другог. 777 01:01:45,920 --> 01:01:50,650 Повезана листа је само чвор, а други чвор, а други чвор, а други чвор. 778 01:01:50,650 --> 01:01:55,080 И уместо да разбија све чворове заједно и њихово складиштење цонтигуоусли 779 01:01:55,080 --> 01:01:58,090 У реду један поред другог у меморији, 780 01:01:58,090 --> 01:02:04,470 има овај следећи показивач нам омогућава да ускладиштите чворове где год, насумице. 781 01:02:04,470 --> 01:02:10,500 И онда некако жице их све заједно да укаже са једне на другу. 782 01:02:10,500 --> 01:02:15,850 >> А шта је велика предност да је имао преко низа? 783 01:02:15,850 --> 01:02:21,680 Током складиштења свему цонтигуоусли само заглави једни поред других? 784 01:02:21,680 --> 01:02:24,190 Ви се сећате? Да? >> Динамичка додела меморије? 785 01:02:24,190 --> 01:02:27,220 >> Динамичка додела меморије у ком смислу? 786 01:02:27,220 --> 01:02:31,780 [Студентски] У томе можете да задржите што већи и да не морате да померите цео низ? 787 01:02:31,780 --> 01:02:40,940 [Хардисон] Управо тако. Дакле, са низом, када желите да ставите нови елемент у сред њега, 788 01:02:40,940 --> 01:02:45,320 морате да пребаце све да простор. 789 01:02:45,320 --> 01:02:47,880 И као што смо причали са редоследу 790 01:02:47,880 --> 01:02:50,080 Зато држимо тај показивач главе, 791 01:02:50,080 --> 01:02:52,050 тако да нисмо стално мења ствари. 792 01:02:52,050 --> 01:02:54,520 Зато што добија скупо ако имаш велики низ 793 01:02:54,520 --> 01:02:57,130 а ти стално радиш ове случајне уметке. 794 01:02:57,130 --> 01:03:00,820 Док са листе, све што треба да урадите је да баци га на новом чвору, 795 01:03:00,820 --> 01:03:06,330 подесите показиваче, и готови сте. 796 01:03:06,330 --> 01:03:10,940 Шта безвезе о томе? 797 01:03:10,940 --> 01:03:16,830 Поред чињенице да није тако лако да раде са што низа? Да? 798 01:03:16,830 --> 01:03:22,980 [Данијел] Па, претпостављам да је то много теже да приступе одређени елемент у повезаној листи? 799 01:03:22,980 --> 01:03:30,470 [Хардисон] Не можете само скочити на произвољном елементу у средини вашег повезане листе. 800 01:03:30,470 --> 01:03:33,800 Како то урадити уместо тога? >> Морате да прођете кроз целу ствар. 801 01:03:33,800 --> 01:03:35,660 [Хардисон] Да. Морате да прођете кроз један по један, један по један. 802 01:03:35,660 --> 01:03:38,480 То је огромна - то је бол. 803 01:03:38,480 --> 01:03:41,550 Шта је друго - постоји још један пад на ово. 804 01:03:41,550 --> 01:03:45,340 [Василије] Не можете ићи напред и назад? Мораш да идеш у једном смеру? 805 01:03:45,340 --> 01:03:48,570 [Хардисон] Да. Па како ћемо решити то, понекад? 806 01:03:48,570 --> 01:03:53,370 [Василије] двоструко-линкед листама? >> Тачно. Постоје двоструко-повезане листе. 807 01:03:53,370 --> 01:03:55,540 Ту су - жао? 808 01:03:55,540 --> 01:03:57,620 >> [Сам] Да ли је то исто што и коришћење Пред ствар - 809 01:03:57,620 --> 01:04:01,090 Управо сам се сетио, није то оно пред ствар је? 810 01:04:01,090 --> 01:04:05,850 Није ли то између двоструко и појединачно? 811 01:04:05,850 --> 01:04:10,020 [Хардисон] Погледајмо шта је он радио. 812 01:04:10,020 --> 01:04:15,760 Дакле, идемо. Ево листе код. 813 01:04:15,760 --> 01:04:25,620 Овде имамо предптр, овде. Да ли је то оно што сте причали? 814 01:04:25,620 --> 01:04:30,750 Дакле, ово је - он је ослобађајући листу и он покушава да складишти показивач на њега. 815 01:04:30,750 --> 01:04:35,000 Ово није двоструко, појединачно повезана-листе. 816 01:04:35,000 --> 01:04:40,090 Можемо разговарати више о овоме касније, јер ово је прича о ослобађању листу 817 01:04:40,090 --> 01:04:42,900 и желим да прво покажем неке друге ствари. 818 01:04:42,900 --> 01:04:51,480 али то је само - то је сећање на вредност ПТР 819 01:04:51,480 --> 01:04:54,170 [Студентски] Ох, то је Прецеединг поентер? >> Да. 820 01:04:54,170 --> 01:05:04,070 Тако да онда можемо повећавати ПТР сам пре него што смо тада слободни шта предптр је. 821 01:05:04,070 --> 01:05:09,130 Зато не можемо слободно птр а затим позива птр = птр следећи, зар не? 822 01:05:09,130 --> 01:05:11,260 То би било лоше. 823 01:05:11,260 --> 01:05:20,940 Дакле, хајде да видимо, назад на овог момка. 824 01:05:20,940 --> 01:05:23,900 >> Друга лоша ствар око листе је да, док са низом 825 01:05:23,900 --> 01:05:26,520 Ми само имамо све елементе саме наслагане једна поред друге, 826 01:05:26,520 --> 01:05:29,050 Овде смо увели овај показивач. 827 01:05:29,050 --> 01:05:34,060 Дакле, постоји додатни комад меморије која имамо за коришћење 828 01:05:34,060 --> 01:05:37,910 за сваки елемент који смо складиштења у нашој листи. 829 01:05:37,910 --> 01:05:40,030 Ми смо добили флексибилност, али то долази у цену. 830 01:05:40,030 --> 01:05:42,230 Она долази са ове временске трошкове, 831 01:05:42,230 --> 01:05:45,270 и то долази са овим меморијским цени превише. 832 01:05:45,270 --> 01:05:47,800 Време у смислу да сада морамо да прођемо кроз сваки елемент у низу 833 01:05:47,800 --> 01:05:58,670 да пронађе један по индексу 10, или да би били индекс 10 у низу. 834 01:05:58,670 --> 01:06:01,230 >> Само веома брзо, када смо дијаграм из ове листе, 835 01:06:01,230 --> 01:06:05,980 обично држимо на челу листе или први поентер листе 836 01:06:05,980 --> 01:06:08,010 и имајте на уму да је ово истина показивач. 837 01:06:08,010 --> 01:06:11,100 То је само 4 бајта. То није стварна сама чвор. 838 01:06:11,100 --> 01:06:17,120 Дакле, видите да нема инт вредност у томе, нема поред показивача у њој. 839 01:06:17,120 --> 01:06:20,790 То буквално је само показивач. 840 01:06:20,790 --> 01:06:23,550 То ће да укаже на нешто што је стварни чвор струцт. 841 01:06:23,550 --> 01:06:28,480 [Сам] показивач зове чвор? >> Ово је - не. Ово је показивач на нешто типа чвора. 842 01:06:28,480 --> 01:06:32,540 То је показивач на чвор струцт. >> О, у реду. 843 01:06:32,540 --> 01:06:36,870 Дијаграм на левој, кода на десној страни. 844 01:06:36,870 --> 01:06:42,190 Можемо га поставити на нулл, што је добар начин да се почне. 845 01:06:42,190 --> 01:06:49,850 Када га дијаграм, можете или писати га као нула или сте ставили линију кроз њега тако. 846 01:06:49,850 --> 01:06:53,910 >> Један од најлакших начина да раде са листама, 847 01:06:53,910 --> 01:06:57,430 и ми не питате како препенд и додати да видите разлике између два, 848 01:06:57,430 --> 01:07:01,320 али ако имену је дефинитивно лакше. 849 01:07:01,320 --> 01:07:05,790 Када препенд, ово је место где ти - када препенд (7), 850 01:07:05,790 --> 01:07:10,050 одете и направите струцт ноде 851 01:07:10,050 --> 01:07:13,870 и прво подесите да се укаже на њега, јер сада, пошто смо га припремљени, 852 01:07:13,870 --> 01:07:17,240 то ће бити на почетку листе. 853 01:07:17,240 --> 01:07:22,540 Ако смо препенд (3), што ствара још један чвор, али сада долази пре 3 7. 854 01:07:22,540 --> 01:07:31,130 Дакле, ми смо у суштини гура ствари на нашој листи. 855 01:07:31,130 --> 01:07:34,720 Сада можете видети да препенд, понекад људи зову пусх, 856 01:07:34,720 --> 01:07:39,600 јер сте гура нови елемент на вашој листи. 857 01:07:39,600 --> 01:07:43,270 Такође је лако избрисати на предњој листи. 858 01:07:43,270 --> 01:07:45,650 Тако ће људи често називају тај поп. 859 01:07:45,650 --> 01:07:52,200 И на тај начин, можете симулирати гомилу користећи повезану листу. 860 01:07:52,200 --> 01:07:57,880 Упс. Нажалост, сада смо улазим Додај. Дакле, овде смо припремљени (7), сада имамо препенд (3). 861 01:07:57,880 --> 01:08:02,600 Ако смо припремљени нешто друго на овој листи, ако смо припремљени (4), 862 01:08:02,600 --> 01:08:06,540 онда би имали 4 и онда 3 и онда 7. 863 01:08:06,540 --> 01:08:14,220 Онда смо могли појавити и уклоните 4, уклони 3, уклонити 7. 864 01:08:14,220 --> 01:08:16,500 Често више интуитиван начин да се размишља о томе је са Додај. 865 01:08:16,500 --> 01:08:20,310 Тако сам диаграммед шта би то изгледати са додати овде. 866 01:08:20,310 --> 01:08:23,380 Ево, приложио (7) не изгледа другачије 867 01:08:23,380 --> 01:08:25,160 јер постоји само један елемент у листи. 868 01:08:25,160 --> 01:08:28,620 И додавање (3) ставља га на крају. 869 01:08:28,620 --> 01:08:31,020 Можда можете видети сада трик са Приложена 870 01:08:31,020 --> 01:08:36,600 је да, пошто ми само знамо где је почетак листи је, 871 01:08:36,600 --> 01:08:39,450 да додате на листу, морате да ходају скроз кроз листу 872 01:08:39,450 --> 01:08:46,500 доћи до краја, стани, а затим изградити свој чвор и све што бубнути доле. 873 01:08:46,500 --> 01:08:50,590 Вире све ствари горе. 874 01:08:50,590 --> 01:08:55,170 Дакле, са препенд, као што смо управо риповали кроз ово заиста брзо, 875 01:08:55,170 --> 01:08:58,170 када препенд на листи, то је прилично једноставно. 876 01:08:58,170 --> 01:09:02,960 >> Ви направите свој нови чвор, укључују неку динамичку алокацију меморије. 877 01:09:02,960 --> 01:09:09,830 Дакле, овде се правиш чвора струцт помоћу маллоц. 878 01:09:09,830 --> 01:09:14,710 Тако маллоц користимо јер ће издвојити меморију за нас касније 879 01:09:14,710 --> 01:09:20,350 зато што не желим да ово - ми желимо ово меморије трају дуго. 880 01:09:20,350 --> 01:09:25,350 И ми смо добили показивач на простор у меморији који смо управо додељен. 881 01:09:25,350 --> 01:09:29,260 Ми користимо величину чвора, не сумирам поља. 882 01:09:29,260 --> 01:09:31,899 Ми не ручно генерише број бајтова, 883 01:09:31,899 --> 01:09:39,750 уместо тога користимо сизеоф тако да знамо да смо све одговарајући број бајтова. 884 01:09:39,750 --> 01:09:43,660 Ми смо се уверили да тестирамо да наш позив маллоц успео. 885 01:09:43,660 --> 01:09:47,939 То је нешто што желите да урадите у целини. 886 01:09:47,939 --> 01:09:52,590 На савременим машинама, понестаје меморије није нешто што је лако 887 01:09:52,590 --> 01:09:56,610 осим ако расподеле гомилу ствари и чинећи огромну листу, 888 01:09:56,610 --> 01:10:02,220 али ако правите ствари за, рецимо, као иПхоне или Андроид, 889 01:10:02,220 --> 01:10:05,230 Ви немате ограничене ресурсе меморије, поготово ако радиш нешто интензивније. 890 01:10:05,230 --> 01:10:08,300 Зато је добро да се у пракси. 891 01:10:08,300 --> 01:10:10,510 >> Приметите да сам овде користио пар различите функције 892 01:10:10,510 --> 01:10:12,880 да сте видели да су нова врста. 893 01:10:12,880 --> 01:10:15,870 Тако је исто као иф иф 894 01:10:15,870 --> 01:10:21,320 осим свог првог аргумента поток на који желите да одштампате. 895 01:10:21,320 --> 01:10:23,900 У овом случају, желимо да штампате на стандардни стринг грешке 896 01:10:23,900 --> 01:10:29,410 која се разликује од стандардног оутстреам. 897 01:10:29,410 --> 01:10:31,620 Подразумева се појави на истом месту. 898 01:10:31,620 --> 01:10:34,600 Такође, штампа на терминал, али можете - 899 01:10:34,600 --> 01:10:38,790 користите ове команде сте научили о томе, преусмеравање технике 900 01:10:38,790 --> 01:10:42,290 Ви о томе научили у видео Томија за проблем сет 4, можете га режирати 901 01:10:42,290 --> 01:10:47,900 различитим областима, а затим излазак, овде, излази ваш програм. 902 01:10:47,900 --> 01:10:50,440 То је у суштини је као повратка из главног, 903 01:10:50,440 --> 01:10:53,600 осим користимо излаз јер овде повратак неће учинити ништа. 904 01:10:53,600 --> 01:10:57,140 Ми нисмо у главни, па враћање не изађете из програма као што смо желели. 905 01:10:57,140 --> 01:11:03,020 Дакле, ми користимо излазну функцију и дати му неку грешку. 906 01:11:03,020 --> 01:11:11,890 Затим ту смо поставили вредност поља, новог чвора његова сам на терену да буду једнаки и, и онда смо га пошаљем горе. 907 01:11:11,890 --> 01:11:15,530 Ми смо поставили следећи показивач новог чвора да се укаже на први, 908 01:11:15,530 --> 01:11:20,460 и онда прво ће сада указати на нови чвор. 909 01:11:20,460 --> 01:11:25,120 Ове прве линије кода, ми заправо градимо нови чвор. 910 01:11:25,120 --> 01:11:27,280 Не последња два реда ове функције, али први. 911 01:11:27,280 --> 01:11:30,290 Ви заправо може извлачити у функцији, у функцији помагач. 912 01:11:30,290 --> 01:11:32,560 То је често оно што радим, ја га извуците у функцији, 913 01:11:32,560 --> 01:11:36,040 Ја то зовем нешто буилд чвора, 914 01:11:36,040 --> 01:11:40,410 и да држи препенд функција прилично мала, то је онда само 3 линије. 915 01:11:40,410 --> 01:11:48,710 Ја позивање на моје израде чвор функције, а онда сам жице све горе. 916 01:11:48,710 --> 01:11:51,970 >> Коначна ствар коју желим да вам покажем, 917 01:11:51,970 --> 01:11:54,030 а ја ћу ти додате и све то на своју руку, 918 01:11:54,030 --> 01:11:57,500 је како прелазили преко листу. 919 01:11:57,500 --> 01:12:00,780 Постоји гомила различитих начина да прелазили преко листу. 920 01:12:00,780 --> 01:12:03,140 У овом случају, ми ћемо наћи дужину листе. 921 01:12:03,140 --> 01:12:06,570 Тако ћемо почети са дужином = 0. 922 01:12:06,570 --> 01:12:11,580 Ово је веома сличан писању стрлен за ниске. 923 01:12:11,580 --> 01:12:17,780 То је оно што ја желим да вам покажем, ово петље овде. 924 01:12:17,780 --> 01:12:23,530 Изгледа некако фанки, то није уобичајена инт и = 0, и <штагод, и + +. 925 01:12:23,530 --> 01:12:34,920 Уместо тога је иницијализација нашу променљиву н да буде почетак листе. 926 01:12:34,920 --> 01:12:40,620 А онда, док је наш итератора променљива није нула, ми наставимо. 927 01:12:40,620 --> 01:12:46,340 То је зато, по обичају, крај наше листе ће бити нулл. 928 01:12:46,340 --> 01:12:48,770 А онда увећати, него раде + +, 929 01:12:48,770 --> 01:12:57,010 повезана листа еквивалент + + је н = н-> нект. 930 01:12:57,010 --> 01:13:00,410 >> Пустићу да попуните празнине овде, јер смо ван времена. 931 01:13:00,410 --> 01:13:09,300 Али, имајте то на уму док радите на својим спеллр псетс. 932 01:13:09,300 --> 01:13:11,650 Повезане листе, ако спровођењу хеш табелу, 933 01:13:11,650 --> 01:13:14,010 ће сигурно доћи у врло згодан. 934 01:13:14,010 --> 01:13:21,780 А има овај идиом за петље у ствари ће учинити живот много лакше, надам се. 935 01:13:21,780 --> 01:13:25,910 Сва питања, брзо? 936 01:13:25,910 --> 01:13:28,920 [Сам] Хоћете ли послати попуњен СЛЛ и СЦ? 937 01:13:28,920 --> 01:13:38,360 [Хардисон] Да. Ја ћу послати попуњене слајдове и попуњен СЛЛ штек и куеуе.цс. 938 01:13:38,360 --> 01:13:41,360 [ЦС50.ТВ]