1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Частка 6] [больш камфортным] 2 00:00:01,000 --> 00:00:04,000 [Rob Боуден] [Harvard University] 3 00:00:04,000 --> 00:00:09,000 [Гэта CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Мы можам адправіцца ў нашым раздзеле пытанняў. 5 00:00:11,000 --> 00:00:17,000 Я паслаў URL для касмічных раней. 6 00:00:17,000 --> 00:00:22,000 У пачатку падзелу пытанняў кажаце- 7 00:00:22,000 --> 00:00:26,000 мабыць я не зусім unsick-гэта вельмі просты пытанне 8 00:00:26,000 --> 00:00:28,000 усяго таго, што Valgrind? 9 00:00:28,000 --> 00:00:30,000 Што Valgrind рабіць? 10 00:00:30,000 --> 00:00:34,000 Любы хачу сказаць, што Valgrind робіць? 11 00:00:34,000 --> 00:00:36,000 [Студэнт] Праверка уцечак памяці. 12 00:00:36,000 --> 00:00:41,000 Так, Valgrind агульная праверка памяці. 13 00:00:41,000 --> 00:00:44,000 Гэта, у рэшце рэшт, кажа вам, калі ў вас ёсць нейкія ўцечкі памяці, 14 00:00:44,000 --> 00:00:49,000 які ў асноўным тое, што мы выкарыстоўваем яго для, таму што, калі вы хочаце 15 00:00:49,000 --> 00:00:54,000 атрымаць поспех у задачы набору або калі вы хочаце 16 00:00:54,000 --> 00:00:59,000 атрымаць на вялікай дошцы, вы павінны мець уцечак памяці наогул, 17 00:00:59,000 --> 00:01:01,000 і ў выпадку, калі ёсць уцечкі памяці, якія вы не можаце знайсці, 18 00:01:01,000 --> 00:01:04,000 Таксама майце на ўвазе, што кожны раз, калі вы адкрываеце файл 19 00:01:04,000 --> 00:01:07,000 і калі вы не зачыніце яго, што гэта ўцечка памяці. 20 00:01:07,000 --> 00:01:10,000 >> Многія людзі шукаюць для некаторых вузлоў, што яны не вызваляючы 21 00:01:10,000 --> 00:01:15,000 калі на самай справе, яны не зачыніць слоўнік у самы першы крок. 22 00:01:15,000 --> 00:01:19,000 Ён таксама кажа вам, калі ў вас ёсць нейкія несапраўдным чытае або піша, 23 00:01:19,000 --> 00:01:22,000 што азначае, калі вы спрабуеце ўсталяваць значэнне 24 00:01:22,000 --> 00:01:26,000 што гэта за канец кучы і гэта не адбудзецца ў сегменце віна 25 00:01:26,000 --> 00:01:30,000 але Valgrind ловіць яго, як вы на самай справе не павінна быць пісьмова там, 26 00:01:30,000 --> 00:01:33,000 і такім чынам, вы дакладна не павінны мець любы з гэтых таксама. 27 00:01:33,000 --> 00:01:38,000 Як вы выкарыстоўваеце Valgrind? 28 00:01:38,000 --> 00:01:42,000 Як вы выкарыстоўваеце Valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Гэта агульны пытанне 30 00:01:45,000 --> 00:01:49,000 выгляд запусціце яе і паглядзіце на выхадзе. 31 00:01:49,000 --> 00:01:51,000 Выхад пераважнай шмат разоў. 32 00:01:51,000 --> 00:01:54,000 Там жа, дзе весела памылкі, калі ў вас ёсць некаторыя вельмі няправільныя рэчы 33 00:01:54,000 --> 00:01:59,000 адбываецца ў цыкле, то яна будзе ў канчатковым выніку сказаць: "Занадта шмат памылак. 34 00:01:59,000 --> 00:02:03,000 Я збіраюся спыніць падлік цяпер ". 35 00:02:03,000 --> 00:02:08,000 Гэта ў асноўным тэкставы выснову, што вам прыйдзецца разабраць. 36 00:02:08,000 --> 00:02:13,000 У рэшце рэшт, ён скажа вам любы уцечкі памяці, якія ў вас ёсць, 37 00:02:13,000 --> 00:02:16,000 колькі блокаў, якія могуць быць карысныя, таму што 38 00:02:16,000 --> 00:02:20,000 калі гэта адзін блок unfreed, то яна, як правіла, лягчэй знайсці 39 00:02:20,000 --> 00:02:23,000 чым 1.000 блокаў unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 блокаў unfreed, верагодна, азначае, што вы не вызваляючы 41 00:02:26,000 --> 00:02:30,000 ваша звязаныя спісы належным ці чамусьці. 42 00:02:30,000 --> 00:02:32,000 Гэта Valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Цяпер у нас ёсць раздзел пытанняў, 44 00:02:35,000 --> 00:02:38,000 якія вам не патрэбныя для загрузкі. 45 00:02:38,000 --> 00:02:41,000 Вы можаце націснуць на маё імя, і пацягнуць іх у прасторы. 46 00:02:41,000 --> 00:02:44,000 Цяпер націсніце на мяне. 47 00:02:44,000 --> 00:02:46,000 1-я рэдакцыя будзе стэк, які мы робім у першую чаргу. 48 00:02:46,000 --> 00:02:55,000 Перагляд 2 будзе чарзе, і 3-я рэдакцыя будзе аднанакіраваныя спісу. 49 00:02:55,000 --> 00:02:58,000 Пачаўшы з нашым стэкам. 50 00:02:58,000 --> 00:03:02,000 Як сказана тут, стэк з'яўляецца адным з самых асноўных, 51 00:03:02,000 --> 00:03:07,000 фундаментальныя структуры дадзеных, інфарматыкі. 52 00:03:07,000 --> 00:03:11,000 Сам прататып прыкладу 53 00:03:11,000 --> 00:03:13,000 стос талерак у сталовай. 54 00:03:13,000 --> 00:03:16,000 Гэта ў асноўным, калі вы ўводзяцца ў стэк, 55 00:03:16,000 --> 00:03:20,000 нехта скажа: "О, як стэк латкоў". 56 00:03:20,000 --> 00:03:22,000 Вы стэк латкамі. 57 00:03:22,000 --> 00:03:24,000 Затым, калі вы ідзяце выцягнуць латок, 58 00:03:24,000 --> 00:03:31,000 1. латок, які становіцца выцягнуў з'яўляецца апошняй, якая была ўведзена ў стэку. 59 00:03:31,000 --> 00:03:34,000 Стэк таксама, як ён кажа тут- 60 00:03:34,000 --> 00:03:37,000 у нас ёсць сегмент памяці, званай стэкам. 61 00:03:37,000 --> 00:03:40,000 І чаму гэта называецца стэкам? 62 00:03:40,000 --> 00:03:42,000 >> Таму што, як структуры дадзеных стэка, 63 00:03:42,000 --> 00:03:46,000 ён штурхае і з'яўляецца кадры стэка ў стэк, 64 00:03:46,000 --> 00:03:53,000 дзе кадры стэка падобныя на канкрэтны выклік функцыі. 65 00:03:53,000 --> 00:03:57,000 І, як стэк, вы заўсёды будзеце мець, каб вярнуцца 66 00:03:57,000 --> 00:04:03,000 ад выкліку функцыі, перш чым спускацца ў ніжнія кадры стэка зноў. 67 00:04:03,000 --> 00:04:08,000 Вы не можаце мець галоўны выклік Foo Bar выкліку і бар вяртанне да асноўнага напрамую. 68 00:04:08,000 --> 00:04:14,000 Ён заўсёды павінны прытрымлівацца правільным стэк націску і з'яўляюцца. 69 00:04:14,000 --> 00:04:18,000 Дзве аперацыі, як я ўжо сказаў, штуршок і поп-музыкі. 70 00:04:18,000 --> 00:04:20,000 Гэта універсальныя тэрміны. 71 00:04:20,000 --> 00:04:26,000 Вы павінны ведаць, штуршок і поп-музыкі з пункту гледжання стэкі ні на што. 72 00:04:26,000 --> 00:04:28,000 Мы ўбачым чарзе выгляд іншы. 73 00:04:28,000 --> 00:04:32,000 Гэта сапраўды не мае універсальнага тэрміна, але штуршок і поп з'яўляюцца універсальнымі для стэкаў. 74 00:04:32,000 --> 00:04:34,000 Штуршок проста пакласці на стэк. 75 00:04:34,000 --> 00:04:37,000 Поп-гэта ўзяць з стэка. 76 00:04:37,000 --> 00:04:43,000 І мы бачым, тут у нас ёсць ЬурейеЕ стэк структуры, 77 00:04:43,000 --> 00:04:46,000 таму мы павінны знакаў радкі **. 78 00:04:46,000 --> 00:04:51,000 Не палохайцеся любой **. 79 00:04:51,000 --> 00:04:54,000 Гэта будзе ў канчатковым выніку масіў радкоў 80 00:04:54,000 --> 00:04:58,000 або масіў паказальнікаў на знакі, дзе 81 00:04:58,000 --> 00:05:00,000 паказальнікаў на знакі, як правіла, радка. 82 00:05:00,000 --> 00:05:05,000 Гэта не павінны быць радкамі, але тут яны збіраюцца быць радкамі. 83 00:05:05,000 --> 00:05:08,000 >> У нас ёсць масіў радкоў. 84 00:05:08,000 --> 00:05:14,000 У нас ёсць памер, які ўяўляе, колькі элементаў у цяперашні час у стэку, 85 00:05:14,000 --> 00:05:19,000 і ў нас ёсць патэнцыял, які, як многія элементы могуць быць у стэку. 86 00:05:19,000 --> 00:05:22,000 Ёмістасць павінна пачацца як нешта большае, чым 1, 87 00:05:22,000 --> 00:05:27,000 але памер будзе пачынацца як 0. 88 00:05:27,000 --> 00:05:36,000 Цяпер, у асноўным існуюць тры розных спосабу вы можаце думаць аб стэку. 89 00:05:36,000 --> 00:05:39,000 Ну, ёсць, верагодна, больш, але два асноўных шляху 90 00:05:39,000 --> 00:05:43,000 Вы можаце ажыццявіць гэта з дапамогай масіва, ці вы можаце рэалізаваць яго з дапамогай звязанага спісу. 91 00:05:43,000 --> 00:05:48,000 Звязаныя спісы з'яўляюцца свайго роду трывіяльная, каб стэк с. 92 00:05:48,000 --> 00:05:51,000 Гэта вельмі лёгка зрабіць стэк з дапамогай звязаных спісаў, 93 00:05:51,000 --> 00:05:55,000 дык вось, мы збіраемся зрабіць стэк з дапамогай масіва, 94 00:05:55,000 --> 00:05:59,000 а затым з дапамогай масіваў, ёсць таксама два шляхі вы можаце думаць пра гэта. 95 00:05:59,000 --> 00:06:01,000 Раней, калі я сказаў, у нас ёсць патэнцыял для стэка, 96 00:06:01,000 --> 00:06:04,000 так што мы можам адпавядаць элементу ў стэку. 97 00:06:04,000 --> 00:06:09,000 >> Аднаго боку, гэта магло адбыцца, як толькі вы націснеце 10 элементаў, то вы зрабілі. 98 00:06:09,000 --> 00:06:13,000 Магчыма, вы ведаеце, што ёсць верхняя мяжа з 10 рэчаў у свеце 99 00:06:13,000 --> 00:06:16,000 што вы ніколі не будзеце мець больш, чым 10 рэчаў, на ваш стэк, 100 00:06:16,000 --> 00:06:20,000 У гэтым выпадку вы можаце мець верхнюю мяжу памеру вашага стэка. 101 00:06:20,000 --> 00:06:23,000 Ці вы маглі б ваш стэк быць неабмежаваным, 102 00:06:23,000 --> 00:06:27,000 Але калі вы робіце масіў, гэта азначае, што кожны раз, калі вы патрапілі 10 элементаў, 103 00:06:27,000 --> 00:06:29,000 тады вы будзеце мець, каб вырасці да 20 элементаў, і калі вы патрапілі 20 элементаў, 104 00:06:29,000 --> 00:06:33,000 Вам прыйдзецца вырошчваць масіва да 30 элементаў і 40 элементаў. 105 00:06:33,000 --> 00:06:37,000 Вы будзеце мець патрэбу, каб павялічыць прапускную здольнасць, якая з'яўляецца тое, што мы збіраемся зрабіць тут. 106 00:06:37,000 --> 00:06:40,000 Кожны раз, калі мы дасягаем максімальнага памеру нашага стэка, 107 00:06:40,000 --> 00:06:46,000 калі мы націскаем на нешта іншае, мы будзем мець патрэбу, каб павялічыць прапускную здольнасць. 108 00:06:46,000 --> 00:06:50,000 Тут мы штуршок абвешчаныя як BOOL штуршок (сімвал * вул). 109 00:06:50,000 --> 00:06:54,000 Char * вул ўяўляе сабой радок, мы дамагаемся ў стэк, 110 00:06:54,000 --> 00:06:58,000 і BOOL проста кажа ці мы поспеху або няўдачы. 111 00:06:58,000 --> 00:07:00,000 >> Як мы можам патрываць няўдачу? 112 00:07:00,000 --> 00:07:04,000 Што з'яўляецца адзіным акалічнасцю, што вы можаце думаць аб 113 00:07:04,000 --> 00:07:07,000 дзе мы павінны былі б вярнуцца ілжывым? 114 00:07:07,000 --> 00:07:09,000 Так. 115 00:07:09,000 --> 00:07:12,000 [Студэнт] Калі гэта поўная і мы выкарыстоўваем абмежаваную рэалізацыю. 116 00:07:12,000 --> 00:07:17,000 Так, так як мы вызначаем, ён адказаў 117 00:07:17,000 --> 00:07:23,000 калі гэта поўная і мы выкарыстоўваем абмежаванай рэалізацыі. 118 00:07:23,000 --> 00:07:26,000 Тады мы вызначана вернемся ілжывым. 119 00:07:26,000 --> 00:07:31,000 Як толькі мы трапілі 10 рэчаў, якія ў масіве, мы не можа змясціцца 11, так што мы вяртаемся ілжывым. 120 00:07:31,000 --> 00:07:32,000 Што, калі яна не абмежаваная? Так. 121 00:07:32,000 --> 00:07:38,000 Калі вы не можаце пашырыць масіў па некаторых прычынах. 122 00:07:38,000 --> 00:07:43,000 Так, так што памяць з'яўляецца абмежаваным рэсурсам, 123 00:07:43,000 --> 00:07:51,000 і ў рэшце рэшт, калі мы працягваць настойваць рэчы ў стэк зноў і зноў, 124 00:07:51,000 --> 00:07:54,000 Мы збіраемся паспрабаваць і вылучыць большы масіў, каб адпавядаць 125 00:07:54,000 --> 00:07:59,000 вялікую ёмістасць, і таНос або любы іншы мы выкарыстоўваем збіраецца вярнуцца ілжывым. 126 00:07:59,000 --> 00:08:02,000 Ну, таНос верне NULL. 127 00:08:02,000 --> 00:08:05,000 >> Памятаеце, што кожны раз, калі вы тэлефануеце таНос, вы павінны правяраць, каб убачыць, калі яна 128 00:08:05,000 --> 00:08:12,000 вяртае нулявы ці яшчэ што правільнасць высновы. 129 00:08:12,000 --> 00:08:17,000 Так як мы хочам мець неабмежаваны стэка, 130 00:08:17,000 --> 00:08:21,000 Адзіны выпадак, мы збіраемся вяртацца ілжывым, калі мы паспрабуем 131 00:08:21,000 --> 00:08:26,000 павялічыць магутнасць і таНос або што вяртае хлусня. 132 00:08:26,000 --> 00:08:30,000 Тады поп не прымае аргументаў, 133 00:08:30,000 --> 00:08:37,000 і яна вяртае радок, якая знаходзіцца на вяршыні стэка. 134 00:08:37,000 --> 00:08:41,000 Якім бы ні быў нядаўна ў стэк з'яўляецца тое, што поп вяртаецца, 135 00:08:41,000 --> 00:08:44,000 і ён таксама выдаляецца з стэка. 136 00:08:44,000 --> 00:08:50,000 І заўважыў, што ён вяртае нулявое значэнне, калі няма нічога ў стэк. 137 00:08:50,000 --> 00:08:53,000 Гэта заўсёды магчыма, што стэк пусты. 138 00:08:53,000 --> 00:08:55,000 У Java, калі вы прывыклі да гэтага, або іншых моў, 139 00:08:55,000 --> 00:09:01,000 спрабуюць поп з пустога стэка можа выклікаць выключэнне ці чамусьці. 140 00:09:01,000 --> 00:09:09,000 >> Але ў C, нулявыя гэта свайго роду шмат выпадкаў, як мы спраўляемся з гэтымі праблемамі. 141 00:09:09,000 --> 00:09:13,000 Вяртаючыся нулявы, як мы збіраемся, каб паказаць, што стэк быў пусты. 142 00:09:13,000 --> 00:09:16,000 Мы далі код, які будзе правяраць функцыянальнасць вашага стэка, 143 00:09:16,000 --> 00:09:19,000 ажыццяўленне штурхаць і поп-музыкі. 144 00:09:19,000 --> 00:09:23,000 Гэта не будзе шмат кода. 145 00:09:23,000 --> 00:09:40,000 Я волі на самай справе, перш чым мы гэта зробім, намёк, падказка- 146 00:09:40,000 --> 00:09:44,000 Калі вы яшчэ не бачылі яго, таНос гэта не адзіная функцыя 147 00:09:44,000 --> 00:09:47,000 , Якая вылучае памяць у кучы для вас. 148 00:09:47,000 --> 00:09:51,000 Ёсць сем'і ідэнтыфікатар функцыі. 149 00:09:51,000 --> 00:09:53,000 Першы таНос, якія вы прывыклі. 150 00:09:53,000 --> 00:09:56,000 Тады ёсць calloc, якая робіць тое ж самае, што і таНос, 151 00:09:56,000 --> 00:09:59,000 але гэта будзе нуля ўсе для вас. 152 00:09:59,000 --> 00:10:04,000 Калі вы калі-небудзь хацелі, каб усталяваць усё да нуля пасля mallocing нешта 153 00:10:04,000 --> 00:10:06,000 Вы павінны проста выкарыстоўваць calloc, у першую чаргу, а не пісаць 154 00:10:06,000 --> 00:10:09,000 цыкл абнуліць ўвесь блок памяці. 155 00:10:09,000 --> 00:10:15,000 >> Realloc, як таНос і мае шмат асаблівых выпадкаў, 156 00:10:15,000 --> 00:10:19,000 але ў асноўным тое, што робіць пераразмеркаваць 157 00:10:19,000 --> 00:10:24,000 яна прымае паказальнік, якія ўжо былі вылучаныя. 158 00:10:24,000 --> 00:10:27,000 Realloc з'яўляецца функцыяй, якую неабходна звяртаць увагу на тут. 159 00:10:27,000 --> 00:10:31,000 Ён прымае паказальнік, які ўжо вярнуўся з таНос. 160 00:10:31,000 --> 00:10:35,000 Дапушчальны, вы патрабаваць ад таНос паказальнік з 10 байт. 161 00:10:35,000 --> 00:10:38,000 Пазней вы усведамляеце, што вы жадалі 20 байт, 162 00:10:38,000 --> 00:10:42,000 так вы тэлефануеце пераразмеркаваць на гэтым паказальнік з 20 байт, 163 00:10:42,000 --> 00:10:47,000 і пераразмеркаваць аўтаматычна скапіяваць усё за вас. 164 00:10:47,000 --> 00:10:51,000 Калі вы толькі што патэлефанаваў таНос зноў, як і ў мяне ёсць блок з 10 байт. 165 00:10:51,000 --> 00:10:53,000 Цяпер мне трэба блок з 20 байт, 166 00:10:53,000 --> 00:10:58,000 так што калі я таНос 20 байт, то мне прыйдзецца ўручную скапіяваць 10 байт з першай рэччу 167 00:10:58,000 --> 00:11:01,000 у другую рэч, а затым вызваліць першае. 168 00:11:01,000 --> 00:11:04,000 Realloc будзе апрацоўваць гэта для вас. 169 00:11:04,000 --> 00:11:11,000 >> Звярніце ўвагу, што подпіс будзе несапраўднай *, 170 00:11:11,000 --> 00:11:15,000 які проста вяртае паказальнік на блок памяці, 171 00:11:15,000 --> 00:11:17,000 Затым пустэчы * паказальнік. 172 00:11:17,000 --> 00:11:22,000 Вы можаце думаць аб пустаце * як агульны паказальнік. 173 00:11:22,000 --> 00:11:27,000 Наогул, вы ніколі не мець справу з несапраўднымі *, 174 00:11:27,000 --> 00:11:30,000 але таНос вяртаецца пустата *, а затым проста выкарыстоўваць як 175 00:11:30,000 --> 00:11:34,000 гэта на самай справе будзе сімвал *. 176 00:11:34,000 --> 00:11:37,000 * Папярэднія пустэчу, якая была вернута на таНос 177 00:11:37,000 --> 00:11:41,000 Цяпер будзе перададзены пераразмеркаваць, а затым памер 178 00:11:41,000 --> 00:11:49,000 гэта новае лік байт вы жадаеце вылучыць, так што вашы новыя магутнасці. 179 00:11:49,000 --> 00:11:57,000 Я дам вам некалькі хвілін, і зрабіць гэта ў нашай прасторы. 180 00:11:57,000 --> 00:12:02,000 Пачніце з перагляду 1. 181 00:12:16,000 --> 00:12:21,000 Я спыню цябе пасьля спадзяюся, аб дастаткова часу для ажыццяўлення штуршок, 182 00:12:21,000 --> 00:12:24,000 і тады я дам табе яшчэ адзін перапынак, каб зрабіць поп-музыкі. 183 00:12:24,000 --> 00:12:27,000 Але на самай справе гэта не так ужо шмат кода. 184 00:12:27,000 --> 00:12:35,000 Найбольш кода, верагодна, пашырае матэрыял, пашырэнне магутнасцяў. 185 00:12:35,000 --> 00:12:39,000 Добра, ніякага ціску, каб быць цалкам зроблена, 186 00:12:39,000 --> 00:12:47,000 але пакуль вы адчуваеце, што знаходзіцеся на правільным шляху, гэта добра. 187 00:12:47,000 --> 00:12:53,000 >> Хто-небудзь ёсць код, які яны адчуваюць сябе камфортна са мной, пацягнуўшы ўверх? 188 00:12:53,000 --> 00:12:59,000 Так, я хачу, а не каго-небудзь ёсць код я магу пацягнуць? 189 00:12:59,000 --> 00:13:05,000 Добра, вы можаце пачаць, захавайце яго, што гэта такое? 190 00:13:05,000 --> 00:13:09,000 Я заўсёды забываю, што крок. 191 00:13:09,000 --> 00:13:15,000 Добра, гледзячы на ​​штуршок, 192 00:13:15,000 --> 00:13:18,000 Вы хочаце, каб растлумачыць свой код? 193 00:13:18,000 --> 00:13:24,000 [Студэнт] Па-першае, я павялічыў памер. 194 00:13:24,000 --> 00:13:28,000 Я думаю, можа быць, я павінен мець што-ўсё роўна, я павялічыў памер, 195 00:13:28,000 --> 00:13:31,000 і я не бачу, калі ён менш, чым ёмістасць. 196 00:13:31,000 --> 00:13:36,000 І калі гэта менш, чым ёмістасць, дадаць у масіў, што мы ўжо маем. 197 00:13:36,000 --> 00:13:42,000 А калі гэта не так, я памножыць магутнасць на 2, 198 00:13:42,000 --> 00:13:50,000 і я пераразмеркаваць радкоў масіва нешта з большай магутнасцю памер цяпер. 199 00:13:50,000 --> 00:13:55,000 І потым, калі гэта не атрымоўваецца, я кажу карыстальніка і вярнуцца ілжывым, 200 00:13:55,000 --> 00:14:04,000 і калі ўсё нармальна, то я стаўлю радок у новым месцы. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Таксама звернеце ўвагу, што мы выкарыстоўвалі добры аператар пабітава тут 202 00:14:07,000 --> 00:14:09,000 памножыць на 2. 203 00:14:09,000 --> 00:14:11,000 Памятаеце, што зрух налева заўсёды будзе памножыць на 2. 204 00:14:11,000 --> 00:14:15,000 Зрух направа дзеліцца на 2, пакуль вы памятаеце, што гэта азначае 205 00:14:15,000 --> 00:14:18,000 дзелім на 2, як у цэлы лік дзеліцца на 2. 206 00:14:18,000 --> 00:14:20,000 Гэта можа абрэзаць на 1 тут ці там. 207 00:14:20,000 --> 00:14:26,000 Але зрух налева на 1 заўсёды будзе неабходна памножыць на 2, 208 00:14:26,000 --> 00:14:32,000 калі вы перапаўнення межы цэлага, і тады яна не будзе. 209 00:14:32,000 --> 00:14:34,000 Бакі каментара. 210 00:14:34,000 --> 00:14:39,000 Мне падабаецца рабіць-гэта не збіраецца мяняць кадавання любой форме, 211 00:14:39,000 --> 00:14:48,000 Але я хацеў бы зрабіць нешта накшталт гэтага. 212 00:14:48,000 --> 00:14:51,000 Гэта на самай справе адбываецца, каб зрабіць яго крыху даўжэй. 213 00:15:04,000 --> 00:15:08,000 Можа быць, гэта не ідэальны выпадак, каб паказаць гэта, 214 00:15:08,000 --> 00:15:14,000 але мне падабаецца сегменце яго ў гэтыя блокі- 215 00:15:14,000 --> 00:15:17,000 Добра, калі гэта, калі адбудзецца, то я буду нешта рабіць, 216 00:15:17,000 --> 00:15:19,000 , А затым функцыя выконваецца. 217 00:15:19,000 --> 00:15:22,000 Мне не трэба, каб потым пракруціць мае вочы ўсё, аж функцыі 218 00:15:22,000 --> 00:15:25,000 , Каб убачыць, што адбываецца пасля другога. 219 00:15:25,000 --> 00:15:27,000 Гэта, калі гэта, калі адбудзецца, то я проста вярнуцца. 220 00:15:27,000 --> 00:15:30,000 Яна таксама мае добрае дадатковае перавага ўсё, што за гэтым 221 00:15:30,000 --> 00:15:33,000 У цяперашні час зрушваецца налева адзін раз. 222 00:15:33,000 --> 00:15:40,000 Я больш не трэба, калі вы заўсёды побач смешнага доўгія чэргі, 223 00:15:40,000 --> 00:15:45,000 Затым гэтыя 4 байта можа дапамагчы, а таксама лявей нешта ёсць, 224 00:15:45,000 --> 00:15:48,000 менш перагружаны вы сябе адчувалі, калі хочаце, добра, я павінен памятаць, 225 00:15:48,000 --> 00:15:53,000 Я ў цяперашні час знаходжуся ў той час як цыкл ўнутры іншага ўнутры цыклу. 226 00:15:53,000 --> 00:15:58,000 Усюды вы можаце зрабіць гэта вяртанне неадкладна, я накшталт як. 227 00:15:58,000 --> 00:16:05,000 Гэта зусім неабавязковым і не чакаў ніяк. 228 00:16:05,000 --> 00:16:12,000 >> [Студэнт] Ці павінны быць памерам - у абавязковым парадку ўмовы? 229 00:16:12,000 --> 00:16:19,000 Абавязкова ўмова тут мы не змаглі пераразмеркаваць, так што так. 230 00:16:19,000 --> 00:16:22,000 Звярніце ўвагу, што ў абавязковым парадку ўмова, па-відаць, 231 00:16:22,000 --> 00:16:26,000 калі мы бясплатна рэчы пазней, мы заўсёды будзем на правал 232 00:16:26,000 --> 00:16:29,000 незалежна ад таго, колькі разоў мы спрабуем падштурхнуць нешта. 233 00:16:29,000 --> 00:16:32,000 Калі мы будзем працягваць настойваць, мы працягваем павялічваючы памер, 234 00:16:32,000 --> 00:16:36,000 нават калі мы не ставіць нічога ў стэк. 235 00:16:36,000 --> 00:16:39,000 Звычайна мы не павялічваем памер да 236 00:16:39,000 --> 00:16:43,000 пасля таго, як мы паспяхова пакласці яго ў стэк. 237 00:16:43,000 --> 00:16:50,000 Мы хацелі б гэта зрабіць, скажам, альбо тут і тут. 238 00:16:50,000 --> 00:16:56,000 І тады замест таго каб сказаць s.size ≤ патэнцыял, гэта менш, чым магутнасць, 239 00:16:56,000 --> 00:17:01,000 толькі таму, што мы пераехалі, дзе ўсё было. 240 00:17:01,000 --> 00:17:07,000 >> І памятайце, што адзінае месца, дзе мы маглі б вярнуцца ілжывым 241 00:17:07,000 --> 00:17:14,000 Тут, дзе пераразмеркаваць вяртаецца нуль, 242 00:17:14,000 --> 00:17:19,000 і калі Вы выпадкова не памятаеце стандартная памылка, 243 00:17:19,000 --> 00:17:22,000 Можа быць, вы маглі б разгледзець гэты выпадак, калі вы хочаце друкаваць стандартныя памылкі, 244 00:17:22,000 --> 00:17:26,000 так Fprintf STDERR, а не проста друк непасрэдна на стандартны вывад. 245 00:17:26,000 --> 00:17:31,000 Зноў жа, гэта не чаканне, але калі гэта памылка, 246 00:17:31,000 --> 00:17:41,000 Калі ласка, увядзіце Printf, то вы можаце зрабіць гэта друк на стандартнай памылкі, а не стандартны вывад. 247 00:17:41,000 --> 00:17:44,000 >> Любы, ёсць што-небудзь яшчэ адзначыць? Так. 248 00:17:44,000 --> 00:17:47,000 [Студэнт] Ці можаце вы перайсці на [неразборліва]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Так, фактычна binariness гэта ці проста, што гэта такое? 250 00:17:55,000 --> 00:17:57,000 [Студэнт] Такім чынам, вы памножыць на 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Так, у асноўным. 252 00:17:59,000 --> 00:18:11,000 У двайковай зямлі, у нас заўсёды ёсць наш набор лічбаў. 253 00:18:11,000 --> 00:18:22,000 Пераход гэтым левая на 1 асноўным ўстаўляе яго тут, на правай баку. 254 00:18:22,000 --> 00:18:25,000 Вярнуцца да гэтага, проста памятаеце, што ўсё ў двайковым 255 00:18:25,000 --> 00:18:28,000 з'яўляецца ступенню 2, так што гэта ўяўляе 2 да 0, 256 00:18:28,000 --> 00:18:30,000 гэта 2 да 1, гэта 2 да 2. 257 00:18:30,000 --> 00:18:33,000 Дадаючы 0 да правага боку зараз, мы проста перакласці ўсё скончана. 258 00:18:33,000 --> 00:18:38,000 Тое, што было 2 да 0, у цяперашні час 2 да 1, 2 да 2. 259 00:18:38,000 --> 00:18:41,000 На правай баку, што мы ўставілі 260 00:18:41,000 --> 00:18:44,000 абавязкова будзе 0, 261 00:18:44,000 --> 00:18:46,000 які мае сэнс. 262 00:18:46,000 --> 00:18:49,000 Калі вы калі-небудзь памножыць лік на 2, гэта не будзе ў канчатковым выніку няцотных, 263 00:18:49,000 --> 00:18:54,000 так што 2 да 0 месца павінна быць 0, 264 00:18:54,000 --> 00:18:59,000 і гэта тое, што першае паўгоддзе папярэдзіў, перш чым ёсць, калі вы ўсё ж такі перайсці 265 00:18:59,000 --> 00:19:01,000 за колькасць біт у цэлае, 266 00:19:01,000 --> 00:19:04,000 то гэта 1, будзе ў канчатковым выніку сыходзіць. 267 00:19:04,000 --> 00:19:10,000 Гэта адзінае неспакой, калі вам здарыцца мець справу з сапраўды вялікімі магчымасцямі. 268 00:19:10,000 --> 00:19:15,000 Але ў гэты момант, то вы маеце справу з масівам мільярды рэчаў, 269 00:19:15,000 --> 00:19:25,000 якая можа не змясціцца ў памяці ў любым выпадку. 270 00:19:25,000 --> 00:19:31,000 >> Цяпер мы можам дабрацца да поп-музыкі, якая яшчэ прасцей. 271 00:19:31,000 --> 00:19:36,000 Вы можаце зрабіць гэта падабаецца, калі вам здарыцца поп цэлая куча, 272 00:19:36,000 --> 00:19:38,000 і цяпер вы ў палову магутнасці зноў. 273 00:19:38,000 --> 00:19:42,000 Вы маглі б пераразмеркаваць, каб паменшыць аб'ём памяці ў вас ёсць, 274 00:19:42,000 --> 00:19:47,000 але вы не павінны турбавацца аб тым, што, такім чынам, адзіны выпадак, пераразмеркаваць будзе 275 00:19:47,000 --> 00:19:50,000 якая расце памяці, ніколі не скарачэнне памяці, 276 00:19:50,000 --> 00:19:59,000 які збіраецца зрабіць поп-супер проста. 277 00:19:59,000 --> 00:20:02,000 Зараз у чарзе, які будзе, як стэкі, 278 00:20:02,000 --> 00:20:06,000 але для таго, каб узяць рэчы на ​​супрацьлеглае. 279 00:20:06,000 --> 00:20:10,000 Найпросты прыклад з чаргі лініі, 280 00:20:10,000 --> 00:20:12,000 таму я думаю, калі б вы былі на англійскай, я б сказаў, 281 00:20:12,000 --> 00:20:17,000 Найпросты прыклад з чаргі ў чаргу. 282 00:20:17,000 --> 00:20:22,000 Так як лінія, калі вы першы чалавек у лініі, 283 00:20:22,000 --> 00:20:24,000 Вы чакаеце, каб быць першым чалавекам з чаргі. 284 00:20:24,000 --> 00:20:31,000 Калі вы апошні чалавек у лініі, вы збіраецеся быць апошнім чалавекам у рамонт. 285 00:20:31,000 --> 00:20:35,000 Мы называем гэта FIFO мадэлі, у той час як стэк LIFO шаблоне. 286 00:20:35,000 --> 00:20:40,000 Гэтыя словы з'яўляюцца даволі універсальнымі. 287 00:20:40,000 --> 00:20:46,000 >> Як стэкі і ў адрозненне ад масіваў, чэргаў звычайна не дапускаюць доступ да элементаў у сярэдзіне. 288 00:20:46,000 --> 00:20:50,000 Тут, стэк, мы павінны штурхаць і поп-музыкі. 289 00:20:50,000 --> 00:20:54,000 Тут мы, здараецца, называюць іх пастаноўкі ў чаргу і выдалення з чаргі. 290 00:20:54,000 --> 00:20:58,000 Акрамя таго, я чуў, як яны называюць зрухам і Адмяніць замену. 291 00:20:58,000 --> 00:21:02,000 Я чуў, людзі кажуць, штуршок і поп прымяняюцца таксама да чэрг. 292 00:21:02,000 --> 00:21:05,000 Я чуў, ўстаўкі, выдалення, 293 00:21:05,000 --> 00:21:11,000 так штурхаць і поп, калі вы кажаце пра стэкі, вы штурхаеце і пляскаць. 294 00:21:11,000 --> 00:21:16,000 Калі вы кажаце аб чэргах, вы маглі б абраць словы, якія вы хочаце выкарыстоўваць 295 00:21:16,000 --> 00:21:23,000 для ўстаўкі і выдаленні, і няма адзінага меркавання пра тое, што яны павінны быць названыя. 296 00:21:23,000 --> 00:21:27,000 Але тут, у нас ёсць паставіць у чаргу і выдалення з чаргі. 297 00:21:27,000 --> 00:21:37,000 Цяпер, структура выглядае амаль ідэнтычна стэк структуры. 298 00:21:37,000 --> 00:21:40,000 Але мы павінны сачыць за галаву. 299 00:21:40,000 --> 00:21:44,000 Я думаю, гэта кажа тут, але чаму мы маем патрэбу ў галаву? 300 00:21:53,000 --> 00:21:57,000 Прататыпы ў асноўным ідэнтычныя штурхаць і поп-музыкі. 301 00:21:57,000 --> 00:21:59,000 Вы можаце думаць пра гэта як штуршок і поп-музыкі. 302 00:21:59,000 --> 00:22:08,000 Розніца толькі ў тым поп вяртаецца, замест апошняга, то ён вяртае першы. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, ці нешта яшчэ. 304 00:22:12,000 --> 00:22:14,000 І вось старт. 305 00:22:14,000 --> 00:22:17,000 Наша чаргу цалкам запоўненая, так што чатыры элемента ў ім. 306 00:22:17,000 --> 00:22:21,000 У канцы нашай чэргі ў цяперашні час 2, 307 00:22:21,000 --> 00:22:24,000 і зараз мы ідзем, каб ўставіць нешта іншае. 308 00:22:24,000 --> 00:22:29,000 >> Калі мы хочам, каб ўставіць нешта іншае, што мы зрабілі для стэка версія 309 00:22:29,000 --> 00:22:36,000 гэта мы пашырылі наш блок памяці. 310 00:22:36,000 --> 00:22:40,000 У чым праблема з гэтым? 311 00:22:40,000 --> 00:22:45,000 [Студэнт] Вы рухаецеся 2. 312 00:22:45,000 --> 00:22:51,000 Як я ўжо казаў пра канец чаргі, 313 00:22:51,000 --> 00:22:57,000 гэта не мае сэнсу, што мы пачынаем з 1, 314 00:22:57,000 --> 00:23:01,000 Затым мы хочам, каб з чаргі 1, то з чаргі 3, то з чаргі 4, 315 00:23:01,000 --> 00:23:05,000 то з чаргі 2, то з чаргі гэтага. 316 00:23:05,000 --> 00:23:08,000 Мы не можам выкарыстоўваць пераразмеркаваць зараз, 317 00:23:08,000 --> 00:23:11,000 або, па крайняй меры, вы павінны выкарыстоўваць пераразмеркаваць па-іншаму. 318 00:23:11,000 --> 00:23:15,000 Але вы, верагодна, не варта выкарыстоўваць толькі пераразмеркаваць. 319 00:23:15,000 --> 00:23:18,000 Вы будзеце павінны ўручную скапіяваць памяці. 320 00:23:18,000 --> 00:23:21,000 >> Ёсць дзве функцыі для капіявання памяці. 321 00:23:21,000 --> 00:23:25,000 Там у memcopy і memmove. 322 00:23:25,000 --> 00:23:29,000 Я зараз чытаю чалавек старонак, каб убачыць, які вы збіраецеся хочаце выкарыстаць. 323 00:23:29,000 --> 00:23:35,000 Добра, memcopy, розніца 324 00:23:35,000 --> 00:23:38,000 што memcopy і memmove, адзін апрацоўвае выпадку правільна 325 00:23:38,000 --> 00:23:41,000 дзе вы капіруеце ў рэгіёне, што адбываецца перакрыцце рэгіёне 326 00:23:41,000 --> 00:23:46,000 Вы капіяванні. 327 00:23:46,000 --> 00:23:50,000 Memcopy не справіцца. Memmove робіць. 328 00:23:50,000 --> 00:23:59,000 Вы можаце думаць аб праблеме, як- 329 00:23:59,000 --> 00:24:09,000 скажам, я хачу, каб скапіяваць гэты хлопец, 330 00:24:09,000 --> 00:24:13,000 гэтыя чатыры з гэтым хлопцам старэй. 331 00:24:13,000 --> 00:24:16,000 У рэшце рэшт, тое, што масіў павінен выглядаць 332 00:24:16,000 --> 00:24:26,000 пасля таго, як копія 2, 1, 2, 1, 3, 4, а затым некаторыя рэчы ў канцы. 333 00:24:26,000 --> 00:24:29,000 Але гэта залежыць ад парадку, у якім мы на самай справе капіяваць, 334 00:24:29,000 --> 00:24:32,000 бо калі мы не лічым той факт, што рэгіён мы капіявання ў 335 00:24:32,000 --> 00:24:35,000 перакрывае адзін мы капіяванні, 336 00:24:35,000 --> 00:24:46,000 Затым мы маглі б зрабіць, як пачаць тут, капіяванне 2 у месца, дзе мы хочам пайсці, 337 00:24:46,000 --> 00:24:52,000 затым перамясціць нашы паказальнікі наперад. 338 00:24:52,000 --> 00:24:56,000 >> Цяпер мы збіраемся быць тут і тут, і цяпер мы хочам, каб скапіяваць 339 00:24:56,000 --> 00:25:04,000 гэты хлопец за гэтым хлопцам, і перамясціць нашы паказальнікі наперад. 340 00:25:04,000 --> 00:25:07,000 Тое, што мы збіраемся ў канчатковым выніку атрымаць у 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 замест таго, каб адпаведныя 2, 1, 2, 1, 3, 4, таму што 342 00:25:10,000 --> 00:25:15,000 2, 1 пераадолеў арыгінальны 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove апрацоўвае гэта правільна. 344 00:25:19,000 --> 00:25:23,000 У гэтым выпадку, у асноўным заўсёды выкарыстоўваць memmove 345 00:25:23,000 --> 00:25:26,000 таму што ён працуе правільна. 346 00:25:26,000 --> 00:25:29,000 Як правіла, ён не выконвае горш. 347 00:25:29,000 --> 00:25:32,000 Ідэя складаецца ў тым, а не з пачатку і капіяванні такім чынам, 348 00:25:32,000 --> 00:25:35,000 як мы толькі што зрабілі тут, яна пачынаецца з канца і капіюе у, 349 00:25:35,000 --> 00:25:38,000 і ў гэтым выпадку, вы не можаце мець праблемы. 350 00:25:38,000 --> 00:25:40,000 Там прадукцыйнасць не страціў. 351 00:25:40,000 --> 00:25:47,000 Заўсёды выкарыстоўвайце memmove. Ніколі не турбуйцеся аб memcopy. 352 00:25:47,000 --> 00:25:51,000 І вось, калі вы будзеце мець, каб асобна memmove 353 00:25:51,000 --> 00:26:01,000 абгорнуты вакол часткі вашай чаргі. 354 00:26:01,000 --> 00:26:04,000 Не хвалюйцеся, калі не цалкам зроблена. 355 00:26:04,000 --> 00:26:10,000 Гэта цяжэй, чым стэк, штуршок, і поп-музыкі. 356 00:26:10,000 --> 00:26:15,000 >> Любы, ёсць якія-небудзь кода мы маглі б працаваць? 357 00:26:15,000 --> 00:26:21,000 Нават калі цалкам няпоўным? 358 00:26:21,000 --> 00:26:23,000 [Студэнт] Так, гэта зусім няпоўным, аднак. 359 00:26:23,000 --> 00:26:27,000 Цалкам няпоўнай выдатна да тых часоў, як мы, вы можаце зэканоміць перагляду? 360 00:26:27,000 --> 00:26:32,000 Я забываю, што кожны раз. 361 00:26:32,000 --> 00:26:39,000 Добра, ігнаруючы тое, што адбываецца, калі мы павінны змяніць памер рэчы. 362 00:26:39,000 --> 00:26:42,000 Цалкам ігнараваць змены памеру. 363 00:26:42,000 --> 00:26:49,000 Патлумачыць код. 364 00:26:49,000 --> 00:26:54,000 Я правяраю, перш за ўсё, калі памер менш, чым копія, перш за ўсё, 365 00:26:54,000 --> 00:27:01,000 і пасля гэтага, я ўстаўляю-я бяру галаву + памер, 366 00:27:01,000 --> 00:27:05,000 і я пераканацца, што яна абцякае ёмістасць масіва, 367 00:27:05,000 --> 00:27:08,000 і я ўставіць новую радок у гэтым становішчы. 368 00:27:08,000 --> 00:27:12,000 Тады я павялічыць памер і вярнуць праўдзівы. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Гэта, безумоўна, адзін з тых выпадкаў, калі вы захочаце выкарыстоўваць мод. 370 00:27:22,000 --> 00:27:25,000 Любы выпадак, калі вы паплаўкоў, калі вы думаеце паплаўкоў, 371 00:27:25,000 --> 00:27:29,000 непасрэднай думка павінна быць мода. 372 00:27:29,000 --> 00:27:36,000 Як хутка аптымізацыі / зрабіць ваш код адну радок карацей, 373 00:27:36,000 --> 00:27:42,000 Вы заўважылі, што радкі адразу пасля гэтага 374 00:27:42,000 --> 00:27:53,000 толькі памер + +, так што вы аб'ядноўваеце, што ў гэтую лінію, памер + +. 375 00:27:53,000 --> 00:27:58,000 Цяпер тут мы маем выпадак 376 00:27:58,000 --> 00:28:01,000 , Дзе ў нас не хапае памяці, 377 00:28:01,000 --> 00:28:05,000 так мы павялічваем нашу здольнасць на 2. 378 00:28:05,000 --> 00:28:09,000 Я думаю, вы маглі б мець тыя ж праблемы, але мы можам ігнараваць гэта цяпер, 379 00:28:09,000 --> 00:28:13,000 , Дзе, калі вы не змаглі павялічыць магутнасць, 380 00:28:13,000 --> 00:28:18,000 то вы будзеце жадаць, каб паменшыць ёмістасць на 2 зноў. 381 00:28:18,000 --> 00:28:24,000 Іншы кароткую запіску гэтак жа, як вы можаце зрабіць, + =, 382 00:28:24,000 --> 00:28:30,000 Вы таксама можаце зрабіць << =. 383 00:28:30,000 --> 00:28:43,000 Амаль усё, што можа пайсці да роўных, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * новы наш новы блок памяці. 385 00:28:52,000 --> 00:28:55,000 О, тут. 386 00:28:55,000 --> 00:29:02,000 >> Што людзі думаюць пра тып наш новы блок памяці? 387 00:29:02,000 --> 00:29:06,000 [Студэнт] Ён павінен быць знак **. 388 00:29:06,000 --> 00:29:12,000 Успамінаючы нашу структуру тут, 389 00:29:12,000 --> 00:29:14,000 радкоў тое, што мы пераразмеркавання. 390 00:29:14,000 --> 00:29:21,000 Мы робім зусім новы дынамічнай памяці для элементаў у чарзе. 391 00:29:21,000 --> 00:29:25,000 Тое, што мы збіраемся прызначэнні на вашы радкі з'яўляецца тое, што мы mallocing прама зараз, 392 00:29:25,000 --> 00:29:30,000 і так новая будзе сімвал **. 393 00:29:30,000 --> 00:29:34,000 Гэта будзе масіў радкоў. 394 00:29:34,000 --> 00:29:38,000 Тады ў чым жа справа, па якім мы збіраемся вярнуцца ілжывым? 395 00:29:38,000 --> 00:29:41,000 [Студэнт] мы павінны рабіць знакаў *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Так, добры выклік. 397 00:29:44,000 --> 00:29:46,000 [Студэнт] Што гэта было? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Мы хацелі зрабіць памер сімвалаў *, таму што мы ўжо не- 399 00:29:49,000 --> 00:29:53,000 гэта фактычна будзе вельмі вялікая праблема, таму што SizeOf (Char) будзе 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof сімвал * будзе 4, 401 00:29:55,000 --> 00:29:58,000 так шмат разоў, калі вы маеце справу з цэлымі, 402 00:29:58,000 --> 00:30:01,000 Вы, як правіла, усё сыдзе з рук, таму што памер Int і памер Int * 403 00:30:01,000 --> 00:30:04,000 на 32-разрадныя сістэмы будзе тое ж самае. 404 00:30:04,000 --> 00:30:09,000 Але тут, SizeOf (Char) і SizeOf (Char *) зараз будзе тое ж самае. 405 00:30:09,000 --> 00:30:15,000 >> Што такое акалічнасць, дзе мы вярнуцца ілжывым? 406 00:30:15,000 --> 00:30:17,000 [Студэнт] Новы роўны нулю. 407 00:30:17,000 --> 00:30:23,000 Так, калі новы пусты, мы вяртаемся ілжывымі, 408 00:30:23,000 --> 00:30:34,000 і я збіраюся кінуць тут- 409 00:30:34,000 --> 00:30:37,000 [Студэнт] [неразборліва] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Так, гэта выдатна. 411 00:30:39,000 --> 00:30:46,000 Вы можаце альбо рабіць 2 разы магутнасць або ёмістасць зрух 1, а затым толькі ўсталяваць яго тут або любы іншы. 412 00:30:46,000 --> 00:30:52,000 Мы зробім гэта, як у нас было. 413 00:30:52,000 --> 00:30:56,000 Ёмістасць >> = 1. 414 00:30:56,000 --> 00:31:08,000 І вы ніколі не прыйдзецца турбавацца аб страце 1-Месца 415 00:31:08,000 --> 00:31:12,000 таму што вы пакінулі ссунуты на 1, таму 1-Месца абавязкова 0, 416 00:31:12,000 --> 00:31:16,000 так прама зрух на 1, вы ўсё яшчэ будзе добра. 417 00:31:16,000 --> 00:31:19,000 [Студэнт] Вам неабходна зрабіць гэта да вяртання? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Так, гэта не мае абсалютна ніякага сэнсу. 419 00:31:29,000 --> 00:31:36,000 >> Зараз выкажам здагадку, што мы збіраемся ў канчатковым выніку вяртаецца сапраўдным да канца. 420 00:31:36,000 --> 00:31:39,000 Як мы збіраемся зрабіць гэта memmoves, 421 00:31:39,000 --> 00:31:45,000 Мы павінны быць асцярожныя з тым, як мы іх робім. 422 00:31:45,000 --> 00:31:50,000 Хто-небудзь ёсць якія-небудзь прапановы аб тым, як мы іх робім? 423 00:32:17,000 --> 00:32:21,000 Вось наш старт. 424 00:32:21,000 --> 00:32:28,000 Безумоўна, мы хочам пачаць з самага пачатку яшчэ раз 425 00:32:28,000 --> 00:32:35,000 і копіі рэчаў у Адтуль, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Як вы гэта зрабілі? 427 00:32:41,000 --> 00:32:52,000 Па-першае, я павінен глядзець на мужчыну старонкі для memmove зноў. 428 00:32:52,000 --> 00:32:57,000 Memmove, парадак аргументаў заўсёды важна. 429 00:32:57,000 --> 00:33:01,000 Мы хочам, каб наша прызначэнне першага, другога крыніцы, памеру трэцяга. 430 00:33:01,000 --> 00:33:06,000 Ёсць шмат функцый, якія зваротным крыніцы і прызначэння. 431 00:33:06,000 --> 00:33:11,000 Напрамак, крыніца, як правіла, адпавядае некалькі. 432 00:33:17,000 --> 00:33:21,000 Move, што гэта вяртанне? 433 00:33:21,000 --> 00:33:27,000 Яна вяртае паказальнік да месца прызначэння, па якой прычыне вы, магчыма, захочаце гэтага. 434 00:33:27,000 --> 00:33:32,000 Я магу сабе чытаць, але мы хочам рухацца ў нашым прызначэння. 435 00:33:32,000 --> 00:33:35,000 >> Тое, што наш пункт прызначэння будзе? 436 00:33:35,000 --> 00:33:37,000 [Студэнт] New. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Так, і дзе мы капіяванні? 438 00:33:39,000 --> 00:33:43,000 Першае, што мы капіяваны гэта 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Што такое-гэта 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Што такое адрас гэтага 1? 441 00:33:55,000 --> 00:33:58,000 Што гэта адрас, што 1? 442 00:33:58,000 --> 00:34:01,000 [Студэнт] [неразборліва] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Кіраўнік + адрас першага элемента. 444 00:34:03,000 --> 00:34:05,000 Як мы можам атрымаць першы элемент у масіве? 445 00:34:05,000 --> 00:34:10,000 [Студэнт] Queue. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Так, q.strings. 447 00:34:15,000 --> 00:34:20,000 Памятаеце, што тут, нашы галовы 1. 448 00:34:20,000 --> 00:34:24,000 Цыраваць яго. Я проста думаю, што гэта чароўна- 449 00:34:24,000 --> 00:34:29,000 Тут нашы галовы 1. Я збіраюся мяняць свой колер таксама. 450 00:34:29,000 --> 00:34:36,000 А вось радка. 451 00:34:36,000 --> 00:34:41,000 Гэта, мы можам альбо напісаць яго, як мы зрабілі тут 452 00:34:41,000 --> 00:34:43,000 з кіраўнікамі + q.strings. 453 00:34:43,000 --> 00:34:51,000 Шмат людзей таксама пісаць і q.strings [кіраўнік]. 454 00:34:51,000 --> 00:34:55,000 У рэчаіснасці гэта не любое менш эфектыўным. 455 00:34:55,000 --> 00:34:58,000 Вы можаце думаць пра гэта, як вы разнаймення яго, а затым атрымаць адрас, 456 00:34:58,000 --> 00:35:04,000 але кампілятар збіраецца перавесці яго на тое, што мы былі прадстаўлены ва ўсякім выпадку, q.strings + галава. 457 00:35:04,000 --> 00:35:06,000 У любым выпадку вы хочаце, каб думаць пра гэта. 458 00:35:06,000 --> 00:35:11,000 >> І колькі байт мы хочам, каб скапіяваць? 459 00:35:11,000 --> 00:35:15,000 [Студэнт] Магутнасць - галава. 460 00:35:15,000 --> 00:35:18,000 Ўмяшчальнасць - галава. 461 00:35:18,000 --> 00:35:21,000 І тады вы заўсёды можаце напісаць прыклад 462 00:35:21,000 --> 00:35:23,000 каб высветліць, калі гэта так. 463 00:35:23,000 --> 00:35:26,000 [Студэнт] Яна павінна быць падзелена на 2, то. 464 00:35:26,000 --> 00:35:30,000 Так, таму я думаю, мы маглі б выкарыстоўваць памер. 465 00:35:30,000 --> 00:35:35,000 У нас яшчэ ёсць памер быцця- 466 00:35:35,000 --> 00:35:39,000 з выкарыстаннем памеру, у нас ёсць памер, роўны 4. 467 00:35:39,000 --> 00:35:42,000 Наш памер 4. Нашы галовы 1. 468 00:35:42,000 --> 00:35:46,000 Мы хочам, каб скапіяваць гэтыя 3 элемента. 469 00:35:46,000 --> 00:35:54,000 Гэта здаровае праверыць, што памер - галава правільна 3. 470 00:35:54,000 --> 00:35:58,000 І вяртацца сюды, як мы ўжо казалі, 471 00:35:58,000 --> 00:36:00,000 калі б мы выкарыстоўвалі патэнцыял, то мы павінны былі б падзяліць на 2 472 00:36:00,000 --> 00:36:04,000 таму што мы ўжо выраслі нашы магчымасці, таму замест гэтага мы збіраемся выкарыстаць памер. 473 00:36:11,000 --> 00:36:13,000 Гэта копій гэтай частцы. 474 00:36:13,000 --> 00:36:18,000 Цяпер нам трэба скапіяваць іншая частка, частка, што засталося ад самага пачатку. 475 00:36:18,000 --> 00:36:28,000 >> Гэта збіраецца memmove у якім становішчы? 476 00:36:28,000 --> 00:36:32,000 [Студэнт] Вялікія памеры - галава. 477 00:36:32,000 --> 00:36:38,000 Так, так мы ўжо скапіявалі ў памеры - кіраўнік байт, 478 00:36:38,000 --> 00:36:43,000 і таму там, дзе мы хочам скапіяваць тыя, што засталіся байты новага 479 00:36:43,000 --> 00:36:48,000 , А затым памер мінус, ну, колькасць байт, мы ўжо скапіявалі цалі 480 00:36:48,000 --> 00:36:52,000 А потым куды мы капіяванні? 481 00:36:52,000 --> 00:36:54,000 [Студэнт] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Так, q.strings. 483 00:36:56,000 --> 00:37:02,000 Мы маглі альбо зрабіць і q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Гэта значна радзей, чым гэта. 485 00:37:05,000 --> 00:37:14,000 Калі ён проста будзе 0, то вы будзеце схільныя бачыць q.strings. 486 00:37:14,000 --> 00:37:16,000 Вось дзе мы капіяванні. 487 00:37:16,000 --> 00:37:18,000 Колькі байт у нас засталося скапіяваць? >> [Студэнт] 10. 488 00:37:18,000 --> 00:37:20,000 Права. 489 00:37:20,000 --> 00:37:25,000 [Студэнт] Ці павінны мы памножым 5 - 10 разоў больш байта ці яшчэ што-небудзь? 490 00:37:25,000 --> 00:37:30,000 Так, так гэта дзесьці, што менавіта мы капіявання? 491 00:37:30,000 --> 00:37:32,000 [Студэнт] [неразборліва] 492 00:37:32,000 --> 00:37:34,000 Які тып рэч, якую мы капіявання? 493 00:37:34,000 --> 00:37:36,000 [Студэнт] [неразборліва] 494 00:37:36,000 --> 00:37:41,000 Так, так што знак * ы, што мы капіявання, мы не ведаем, дзе тыя і адкуль. 495 00:37:41,000 --> 00:37:47,000 Ну, дзе яны паказваюць на, як струны, мы ў канчатковым выніку націснуўшы на яе ў чаргу 496 00:37:47,000 --> 00:37:49,000 або enqueuing на чарзе. 497 00:37:49,000 --> 00:37:51,000 Дзе тыя, і адкуль, мы паняцця не маем. 498 00:37:51,000 --> 00:37:56,000 Нам проста трэба сачыць за сімвал * з сябе. 499 00:37:56,000 --> 00:38:00,000 Мы не хочам, каб скапіяваць памеру - начальнік байт. 500 00:38:00,000 --> 00:38:03,000 Мы хочам, каб скапіяваць памеру - начальнік сімвал * з, 501 00:38:03,000 --> 00:38:11,000 так што мы збіраемся памножыць гэта на SizeOf (Char *). 502 00:38:11,000 --> 00:38:17,000 Тое ж самае тут, унізе, галава * SizeOf (Char *). 503 00:38:17,000 --> 00:38:24,000 >> [Студэнт] А [неразборліва]? 504 00:38:24,000 --> 00:38:26,000 Гэта прама тут? 505 00:38:26,000 --> 00:38:28,000 [Студэнт] Не, ніжэй, памер - галава. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Гэта прама тут? 507 00:38:30,000 --> 00:38:32,000 Паказальнік арыфметыка. 508 00:38:32,000 --> 00:38:35,000 Як арыфметыка паказальнікаў будзе працаваць гэта 509 00:38:35,000 --> 00:38:40,000 ён аўтаматычна памнажаецца на памер тыпу, што мы маем справу з. 510 00:38:40,000 --> 00:38:46,000 Гэтак жа, як тут, новая + (памер - галава) 511 00:38:46,000 --> 00:38:56,000 дакладна адпавядае і новая [памер - начальнік] 512 00:38:56,000 --> 00:39:00,000 пакуль мы не чакаем, што працуе правільна, 513 00:39:00,000 --> 00:39:04,000 бо калі мы маем справу з Int масіва, то мы не робім індэкс INT- 514 00:39:04,000 --> 00:39:07,000 або, калі гэта памер з 5, і вы хочаце 4-й элемент, то індэкс ў 515 00:39:07,000 --> 00:39:10,000 Int масіва [4]. 516 00:39:10,000 --> 00:39:14,000 Вы не-[4] * памер Int. 517 00:39:14,000 --> 00:39:21,000 , Які апрацоўвае яго аўтаматычна, і гэты выпадак 518 00:39:21,000 --> 00:39:29,000 Літаральна эквівалентныя, таму кранштэйны сінтаксісу 519 00:39:29,000 --> 00:39:34,000 толькі збіраецца быць ператвораны ў гэтым, як толькі вы кампіляцыі. 520 00:39:34,000 --> 00:39:38,000 Гэта тое, што вы павінны быць асцярожныя, што 521 00:39:38,000 --> 00:39:42,000 пры даданні памераў - галава 522 00:39:42,000 --> 00:39:45,000 Вы дадаеце не адзін байт. 523 00:39:45,000 --> 00:39:53,000 Вы дадаеце адзін знак *, які можа быць адным байт або любы іншы. 524 00:39:53,000 --> 00:39:56,000 >> Іншыя пытанні? 525 00:39:56,000 --> 00:40:04,000 Так, з чаргі будзе лягчэй. 526 00:40:04,000 --> 00:40:11,000 Я дам вам хвіліну, каб рэалізаваць. 527 00:40:11,000 --> 00:40:18,000 Так, і я мяркую, што гэта тая ж самая сітуацыя, дзе 528 00:40:18,000 --> 00:40:21,000 што епдиеие выпадку, калі мы enqueuing нулявы, 529 00:40:21,000 --> 00:40:24,000 Можа быць, мы хочам справіцца з гэтым, можа быць, мы не ведаем. 530 00:40:24,000 --> 00:40:27,000 Мы не будзем рабіць гэта зноў тут, але гэтак жа, як наш стэк выпадку. 531 00:40:27,000 --> 00:40:34,000 Калі паставіць у чаргу нулявыя, мы маглі бы на яго ўвагі. 532 00:40:34,000 --> 00:40:40,000 Любы, ёсць некаторы код, я магу пацягнуць? 533 00:40:40,000 --> 00:40:45,000 [Студэнт] Я проста з чаргі. 534 00:40:45,000 --> 00:40:56,000 Версія 2 з'яўляецца тое, што, усё ў парадку. 535 00:40:56,000 --> 00:40:59,000 Вы хочаце, каб растлумачыць? 536 00:40:59,000 --> 00:41:01,000 [Студэнт] Па-першае, вы пераканаецеся, што ёсць нешта ў чарзе 537 00:41:01,000 --> 00:41:07,000 і што памер паніжаецца на 1. 538 00:41:07,000 --> 00:41:11,000 Вы павінны зрабіць гэта, а затым вярнуць яго галаву 539 00:41:11,000 --> 00:41:13,000 а затым перамясціць галаву 1. 540 00:41:13,000 --> 00:41:19,000 Такім чынам, ёсць куток выпадку мы павінны разгледзець. Так. 541 00:41:19,000 --> 00:41:24,000 [Студэнт] Калі ваша галава знаходзіцца на апошнім элеменце, 542 00:41:24,000 --> 00:41:26,000 то вы не хочаце галаву, каб паказаць межы масіва. 543 00:41:26,000 --> 00:41:29,000 >> Так, так, як толькі галава тычыцца канцы нашага масіва, 544 00:41:29,000 --> 00:41:35,000 Калі мы з чаргі, наша галава павінна быць мода на 0. 545 00:41:35,000 --> 00:41:40,000 На жаль, мы не можам зрабіць гэта за адзін крок. 546 00:41:40,000 --> 00:41:44,000 Я думаю, так, як я б, верагодна, выправіць гэта 547 00:41:44,000 --> 00:41:52,000 гэта будзе сімвал *, тое, што мы вяртаемся, 548 00:41:52,000 --> 00:41:55,000 Незалежна ад вашага імя зменнай хоча быць. 549 00:41:55,000 --> 00:42:02,000 Затым мы хочам мода галавы нашых магчымасцяў 550 00:42:02,000 --> 00:42:10,000 , А затым вярнуцца ў адстаўцы. 551 00:42:10,000 --> 00:42:14,000 Многія людзі тут, яны маглі б зрабіць- 552 00:42:14,000 --> 00:42:19,000 гэта выпадак-вы будзеце бачыць, як людзі рабіць, калі галава 553 00:42:19,000 --> 00:42:29,000 больш ёмістасць, зрабіць галаву - ёмістасць. 554 00:42:29,000 --> 00:42:36,000 І гэта толькі рабочая вакол таго, што мод. 555 00:42:36,000 --> 00:42:41,000 Кіраўнік МО = ёмістасць нашмат чысцей 556 00:42:41,000 --> 00:42:51,000 з обцяканьне, чым калі б галава больш, чым магутнасць галавой - ёмістасць. 557 00:42:51,000 --> 00:42:56,000 >> Пытанні? 558 00:42:56,000 --> 00:43:02,000 Добра, апошняя рэч, якую мы пакінулі наш звязанага спісу. 559 00:43:02,000 --> 00:43:07,000 Вы маглі б быць выкарыстаны для некаторых з звязанага спісу паводзіны, калі вы зрабілі 560 00:43:07,000 --> 00:43:11,000 звязаных спісаў у вашай хэш-табліцы, калі вы зрабілі хэш-табліцы. 561 00:43:11,000 --> 00:43:15,000 Я настойліва рэкамендую рабіць хэш-табліцы. 562 00:43:15,000 --> 00:43:17,000 Магчыма, вы ўжо зрабілі выглядзе дрэва, 563 00:43:17,000 --> 00:43:23,000 але спрабуе цяжэй. 564 00:43:23,000 --> 00:43:27,000 У тэорыі, яны асімптатычна лепш. 565 00:43:27,000 --> 00:43:30,000 Але паглядзіце на вялікай дошцы, 566 00:43:30,000 --> 00:43:35,000 і імкнецца ніколі не рабіць лепш, і яны займаюць больш памяці. 567 00:43:35,000 --> 00:43:43,000 Усё аб спробе заканчвае тым, што яшчэ горш для дадатковай працы. 568 00:43:43,000 --> 00:43:49,000 Гэта тое, што рашэнне David Malan заўсёды з'яўляецца 569 00:43:49,000 --> 00:43:56,000 ён заўсёды свае паведамленні Trie рашэнне, і давайце паглядзім, дзе ён у цяперашні час. 570 00:43:56,000 --> 00:44:00,000 Што ён пад зямлёй, David J? 571 00:44:00,000 --> 00:44:06,000 Ён № 18, так што гэта не вельмі дрэнна, 572 00:44:06,000 --> 00:44:09,000 і што гэта будзе адзін з лепшых спрабуе Вы можаце думаць 573 00:44:09,000 --> 00:44:17,000 ці адна з лепшых спрабуе з Trie. 574 00:44:17,000 --> 00:44:23,000 Гэта нават не яго арыгінальнае рашэнне? 575 00:44:23,000 --> 00:44:29,000 Я адчуваю, як Trie рашэнні, як правіла, больш у гэтай галіне выкарыстання аператыўнай памяці. 576 00:44:29,000 --> 00:44:33,000 >> Спусьцецеся на самы верх, і аператыўнай памяці знаходзіцца ў адной лічбы. 577 00:44:33,000 --> 00:44:36,000 Спусьцецеся ўніз да ніжняй, а затым вы пачынаеце бачыць спрабуе 578 00:44:36,000 --> 00:44:41,000 дзе вы атрымаеце абсалютна масіўнай аператыўнай памяці, 579 00:44:41,000 --> 00:44:45,000 і спрабуе цяжэй. 580 00:44:45,000 --> 00:44:53,000 Не зусім, але каштуе гэта адукацыйны вопыт, калі вы зрабілі адзін. 581 00:44:53,000 --> 00:44:56,000 Апошняе, што наша звязанага спісу, 582 00:44:56,000 --> 00:45:04,000 і гэтыя тры рэчы, стэкі, чэргі і звязаныя спісы, 583 00:45:04,000 --> 00:45:09,000 любая будучая што можна зрабіць у вобласці кампутарных навук 584 00:45:09,000 --> 00:45:12,000 Выкажам здагадку ў вас ёсць знаёмства з гэтымі рэчамі. 585 00:45:12,000 --> 00:45:19,000 Яны проста такім фундаментальным да ўсяго. 586 00:45:19,000 --> 00:45:25,000 >> Змяненні, спісы, і тут мы аднанакіраваныя спісу будзе наша рэалізацыя. 587 00:45:25,000 --> 00:45:34,000 Што односвязный значыць, у адрозненне ад двусвязный? Так. 588 00:45:34,000 --> 00:45:37,000 [Студэнт] Гэта толькі паказвае на наступны паказальнік, а не паказальнікаў, 589 00:45:37,000 --> 00:45:39,000 як той перад ім і пасля яе. 590 00:45:39,000 --> 00:45:44,000 Так, так і ў фармаце малюнка, што я толькі што зрабіў? 591 00:45:44,000 --> 00:45:48,000 У мяне ёсць дзве рэчы. У мяне ёсць карціны і фатаграфіі. 592 00:45:48,000 --> 00:45:51,000 У фармаце малюнка, нашы аднанакіраваныя спісу, 593 00:45:51,000 --> 00:45:57,000 Безумоўна, у нас ёсць нейкі паказальнік на кіраўніка нашага спісу, 594 00:45:57,000 --> 00:46:02,000 , А затым у наш спіс, мы проста паказальнікі, 595 00:46:02,000 --> 00:46:05,000 і, магчыма, гэта паказвае на нуль. 596 00:46:05,000 --> 00:46:08,000 Гэта будзе ваш тыповы малюнак аднанакіраваныя спісу. 597 00:46:08,000 --> 00:46:14,000 Двойчы звязаны спіс, вы можаце пайсці ў зваротным кірунку. 598 00:46:14,000 --> 00:46:19,000 Калі я дам вам любы вузел у спісе, то вы можаце заўсёды атрымаць у 599 00:46:19,000 --> 00:46:23,000 любой іншай вузел у спіс, калі ён двойчы звязаны спіс. 600 00:46:23,000 --> 00:46:27,000 Але калі я вам трэцюю вузла ў спісе, і гэта аднанакіраваныя спіс, 601 00:46:27,000 --> 00:46:30,000 ніякім чынам не вы калі-небудзь, каб дабрацца да першага і другога вузлоў. 602 00:46:30,000 --> 00:46:34,000 І ёсць пераваг і недахопаў, і адзін відавочны 603 00:46:34,000 --> 00:46:42,000 гэта вы займаюць больш памерам, і вы павінны адсочваць, дзе гэтыя рэчы павінны быць звернутыя цяпер. 604 00:46:42,000 --> 00:46:49,000 Але мы клапоцімся толькі пра односвязанны. 605 00:46:49,000 --> 00:46:53,000 >> Некалькі рэчаў, якія мы збіраемся мець рэалізаваць. 606 00:46:53,000 --> 00:47:00,000 Ваша ЬурейеЕ вузла структуры, Int I: Структура вузла * наступны; вузла. 607 00:47:00,000 --> 00:47:09,000 Гэта ЬурейеЕ павінны быць спалены ў вашым розуме. 608 00:47:09,000 --> 00:47:14,000 Віктарына 1 варта хацелі даць вызначэнне тыпу звязанага спісу вузлоў, 609 00:47:14,000 --> 00:47:18,000 і вы павінны быць у стане неадкладна штабнаваць, што ўніз 610 00:47:18,000 --> 00:47:22,000 нават не задумваючыся пра гэта. 611 00:47:22,000 --> 00:47:27,000 Я думаю, пара пытанняў, чаму мы павінны пабудуем тут? 612 00:47:27,000 --> 00:47:32,000 Чаму мы не можам сказаць вузла *? 613 00:47:32,000 --> 00:47:35,000 [Студэнт] [неразборліва] 614 00:47:35,000 --> 00:47:38,000 Так. 615 00:47:38,000 --> 00:47:44,000 Адзінае, што вызначае вузел, як рэч 616 00:47:44,000 --> 00:47:47,000 з'яўляецца ЬурейеЕ сябе. 617 00:47:47,000 --> 00:47:55,000 Але на дадзены момант, калі мы накшталт разбору праз гэта вызначэнне вузла структуры, 618 00:47:55,000 --> 00:48:01,000 Мы яшчэ не скончылі нашу ЬурейеЕ яшчэ, так што з ЬурейеЕ не скончана, 619 00:48:01,000 --> 00:48:05,000 вузел не існуе. 620 00:48:05,000 --> 00:48:12,000 Але структура вузла робіць, і гэты вузел сюды, 621 00:48:12,000 --> 00:48:14,000 гэта таксама можна назваць што-небудзь яшчэ. 622 00:48:14,000 --> 00:48:16,000 Гэта можна назваць з. 623 00:48:16,000 --> 00:48:19,000 Гэта можна было б назваць звязаны спіс вузлоў. 624 00:48:19,000 --> 00:48:21,000 Яго можна назваць што заўгодна. 625 00:48:21,000 --> 00:48:26,000 Але гэтая структура вузел павінен быць названа ж самае, што гэтая структура вузла. 626 00:48:26,000 --> 00:48:29,000 Што вы называеце гэта павінна быць тут, 627 00:48:29,000 --> 00:48:32,000 і так, што таксама адказвае на другі кропцы пытанне 628 00:48:32,000 --> 00:48:37,000 Менавіта таму-шмат разоў, калі вы бачыце структур і вызначэння тыпаў з структуры, 629 00:48:37,000 --> 00:48:42,000 Вы ўбачыце, ананімныя структуры, дзе вы ўбачыце толькі ЬурейеЕ структуры, 630 00:48:42,000 --> 00:48:47,000 рэалізацыя структуры, слоўнік, ці Што заўгодна. 631 00:48:47,000 --> 00:48:51,000 >> Чаму тут мы павінны сказаць вузла? 632 00:48:51,000 --> 00:48:54,000 Чаму яна не можа быць ананімнай структуры? 633 00:48:54,000 --> 00:48:56,000 Гэта амаль той жа адказ. 634 00:48:56,000 --> 00:48:58,000 [Студэнт] Вам трэба спасылацца на яго ў межах структуры. 635 00:48:58,000 --> 00:49:04,000 Так, у межах структуры, неабходна звярнуцца да структуры самога. 636 00:49:04,000 --> 00:49:10,000 Калі вы не даяце структуры імя, калі гэта ананімная структура, вы не можаце спасылацца на яго. 637 00:49:10,000 --> 00:49:17,000 І апошняе, але не менш усе яны павінны быць некалькі прамалінейна, 638 00:49:17,000 --> 00:49:20,000 і яны павінны дапамагчы вам зразумець, калі вы пішаце гэта ўніз 639 00:49:20,000 --> 00:49:24,000 што вы робіце нешта няправільна, калі такога роду рэчы не маюць сэнсу. 640 00:49:24,000 --> 00:49:28,000 Апошняе, але не менш важна, чаму гэта павінна быць структура вузла *? 641 00:49:28,000 --> 00:49:34,000 Чаму гэта не можа быць проста будуем вузла далей? 642 00:49:34,000 --> 00:49:37,000 [Студэнт] Паказальнік на наступную структуру. 643 00:49:37,000 --> 00:49:39,000 Гэта непазбежна, што мы хочам. 644 00:49:39,000 --> 00:49:42,000 Чаму б гэта ніколі не будзе структура вузла далей? 645 00:49:42,000 --> 00:49:50,000 Чаму гэта павінна быць структура вузла * далей? Так. 646 00:49:50,000 --> 00:49:53,000 [Студэнт] Гэта як бясконцы цыкл. 647 00:49:53,000 --> 00:49:55,000 Так. 648 00:49:55,000 --> 00:49:57,000 [Студэнт], што ўсё будзе ў адным. 649 00:49:57,000 --> 00:50:02,000 Так, проста думаю пра тое, як мы будзем рабіць памеру ці чамусьці. 650 00:50:02,000 --> 00:50:08,000 Памер структуры ў асноўным + або - некаторыя карціны тут ці там. 651 00:50:08,000 --> 00:50:15,000 Гэта ў асноўным будзе сума памеры рэчаў у структуры. 652 00:50:15,000 --> 00:50:18,000 Гэта прама тут, нічога не змяняючы, памер будзе лёгка. 653 00:50:18,000 --> 00:50:24,000 Памер структуры вузла будзе памерам я + памер наступнага. 654 00:50:24,000 --> 00:50:27,000 Памер мне будзе 4. Памер наступны будзе 4. 655 00:50:27,000 --> 00:50:30,000 Памер структуры вузла будзе 8. 656 00:50:30,000 --> 00:50:34,000 Калі мы не будзем мець *, думаючы пра SizeOf, 657 00:50:34,000 --> 00:50:37,000 Затым SizeOf (I) будзе 4. 658 00:50:37,000 --> 00:50:43,000 Памер структуры вузла наступны будзе памерам я + памер структуры вузла наступнага 659 00:50:43,000 --> 00:50:46,000 + Памер я + памер структуры вузла наступнага. 660 00:50:46,000 --> 00:50:55,000 Было б бясконцай рэкурсіі вузлоў. 661 00:50:55,000 --> 00:51:00,000 Вось чаму ўсё гэта так павінна быць. 662 00:51:00,000 --> 00:51:03,000 >> Зноў жа, абавязкова запомніце, што, 663 00:51:03,000 --> 00:51:06,000 або, па крайняй меры, зразумець, досыць таго, што вы можаце быць у стане 664 00:51:06,000 --> 00:51:12,000 Прычынай праз тое, што яна павінна выглядаць. 665 00:51:12,000 --> 00:51:14,000 Тое, што мы збіраемся хочам рэалізаваць. 666 00:51:14,000 --> 00:51:18,000 Калі даўжыня спісу 667 00:51:18,000 --> 00:51:21,000 Вы можаце падманваць і трымаць вакол 668 00:51:21,000 --> 00:51:24,000 глабальныя даўжыні або нешта, але мы не збіраемся гэтага рабіць. 669 00:51:24,000 --> 00:51:28,000 Мы збіраемся, каб падлічыць даўжыню спісу. 670 00:51:28,000 --> 00:51:34,000 Мы змяшчаецца, так што гэта ў асноўным, як пошук, 671 00:51:34,000 --> 00:51:41,000 таму ў нас ёсць звязаны спіс цэлых лікаў, каб убачыць, калі гэта лік знаходзіцца ў звязаным спісе. 672 00:51:41,000 --> 00:51:44,000 Далучэнне будзе ўставіць у пачатку спісу. 673 00:51:44,000 --> 00:51:46,000 Append збіраецца ўключыць у канцы. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted будзе ўставіць у спарадкаваныя пазіцыі ў спісе. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted выгляд мяркуе, што вы ніколі не выкарыстоўвалі пачатак ці канец у дрэнных адносінах. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted, калі вы рэалізуеце insert_sorted- 677 00:52:09,000 --> 00:52:13,000 скажам, у нас ёсць звязаны спіс. 678 00:52:13,000 --> 00:52:18,000 Гэта тое, што ў цяперашні час ён выглядае, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Я хачу, каб ўставіць 3, так як пакуль сам спіс ужо адсартаваны, 680 00:52:24,000 --> 00:52:27,000 лёгка знайсці, дзе 3 належыць. 681 00:52:27,000 --> 00:52:29,000 Я пачынаю ў 2. 682 00:52:29,000 --> 00:52:32,000 Добра, 3 больш, чым 2, таму я хачу, каб працягваць ісці. 683 00:52:32,000 --> 00:52:35,000 Ах, 4 занадта вялікі, так што я ведаю 3 будзе ісці паміж 2 і 4, 684 00:52:35,000 --> 00:52:39,000 і ў мяне ёсць, каб выправіць паказальнікі і ўсё такое. 685 00:52:39,000 --> 00:52:43,000 Але калі мы не будзем выкарыстоўваць строга insert_sorted, 686 00:52:43,000 --> 00:52:50,000 хацелася давайце проста скажам, я папярэднічаць 6, 687 00:52:50,000 --> 00:52:55,000 Затым мой звязанага спісу стане гэтым. 688 00:52:55,000 --> 00:53:01,000 У цяперашні час яна не мае ніякага сэнсу, таму для insert_sorted, можна толькі выказаць здагадку, 689 00:53:01,000 --> 00:53:04,000 што спіс адсартаваны, хоць існуюць аперацыі 690 00:53:04,000 --> 00:53:09,000 якія могуць прывесці да не быць адсартаваныя, вось і ўсё. 691 00:53:09,000 --> 00:53:20,000 Знайсці карысным ўстаўка-так гэта тыя асноўныя рэчы, якія вы будзеце мець рэалізаваць. 692 00:53:20,000 --> 00:53:24,000 >> Цяпер, знайдзіце хвілінку, каб зрабіць даўжыню і ўтрымоўвае, 693 00:53:24,000 --> 00:53:30,000 і тыя павінны быць адносна хутка. 694 00:53:41,000 --> 00:53:48,000 Набліжаецца час закрыцця, так што ў каго нічога даўжыню ці ўтрымоўвае? 695 00:53:48,000 --> 00:53:50,000 Яны збіраюцца, каб быць амаль ідэнтычнымі. 696 00:53:50,000 --> 00:53:57,000 [Студэнт] Даўжыня. 697 00:53:57,000 --> 00:54:01,000 Давайце паглядзім, перагляд. 698 00:54:01,000 --> 00:54:04,000 Добра. 699 00:54:12,000 --> 00:54:15,000 Вы хочаце, каб растлумачыць? 700 00:54:15,000 --> 00:54:21,000 [Студэнт] Я проста стварыць паказальнік вузлоў і ініцыялізаваць яго да першага, які з'яўляецца нашай глабальнай зменнай, 701 00:54:21,000 --> 00:54:27,000 а потым праверыць, калі гэта нулявы, таму я не атрымліваю сегменце віна і вяртаць 0, калі гэта так. 702 00:54:27,000 --> 00:54:34,000 У адваротным выпадку, я цыкле, адсочванне на працягу цэлага 703 00:54:34,000 --> 00:54:38,000 Колькі разоў я звяртаўся да наступнага элемента спісу 704 00:54:38,000 --> 00:54:43,000 і ў тым жа аперацыю прырашчэння таксама доступ да гэтай фактычнай элемент, 705 00:54:43,000 --> 00:54:47,000 і тады я бесперапынна зрабіць праверку, каб убачыць, калі гэта NULL, 706 00:54:47,000 --> 00:54:56,000 і калі ён нулявы, то ён перарывае і проста вяртае колькасць элементаў я даступны. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Хто-небудзь ёсць якія-небудзь каментары на што-небудзь? 708 00:55:01,000 --> 00:55:06,000 Гэта выглядае выдатна правільнасць мудра. 709 00:55:06,000 --> 00:55:10,000 [Студэнт] Я не думаю, што вам трэба вузла == NULL. 710 00:55:10,000 --> 00:55:13,000 Так, так што калі вузел == NULL 0 вяртанні. 711 00:55:13,000 --> 00:55:18,000 Але калі вузел == NULL, то гэта-о-о, ёсць карэктнасці пытання. 712 00:55:18,000 --> 00:55:23,000 Гэта было проста вы вярнуўшыся, я, але гэта не ўваходзіць у камплект прама цяпер. 713 00:55:23,000 --> 00:55:30,000 Вам проста трэба Int я, так што я = 0. 714 00:55:30,000 --> 00:55:34,000 Але калі вузел з'яўляецца нулявым, то я па-ранейшаму будзе 0, 715 00:55:34,000 --> 00:55:39,000 і мы збіраемся вяртаць 0, так што гэты выпадак з'яўляецца аднолькавым. 716 00:55:39,000 --> 00:55:48,000 Іншая распаўсюджаная рэч, каб захаваць дэкларацыю 717 00:55:48,000 --> 00:55:51,000 вузлоў ўнутры цыклу. 718 00:55:51,000 --> 00:55:54,000 Можна сказаць, што-о-о, няма. 719 00:55:54,000 --> 00:55:56,000 Давайце трымаць гэта як гэта. 720 00:55:56,000 --> 00:55:59,000 Я б, напэўна пакласці Int = 0 тут, 721 00:55:59,000 --> 00:56:05,000 Затым вузел * = 1. Вузел тут. 722 00:56:05,000 --> 00:56:11,000 І гэта, напэўна, як-пазбавіцца ад гэтага цяпер. 723 00:56:11,000 --> 00:56:14,000 Гэта, напэўна, як бы я напісаў. 724 00:56:14,000 --> 00:56:21,000 Акрамя таго, можна-гледзячы на ​​гэта, як гэта. 725 00:56:21,000 --> 00:56:25,000 Гэты цыкл структура прама тут 726 00:56:25,000 --> 00:56:30,000 павінна быць амаль гэтак жа натуральна для вас, як і для Int я = 0 727 00:56:30,000 --> 00:56:33,000 Я менш, чым даўжыня масіва я + +. 728 00:56:33,000 --> 00:56:38,000 Калі гэта, як вы ітэрацыі па масіве, гэта, як вы ітэрацыю па спісе. 729 00:56:38,000 --> 00:56:45,000 >> Гэта павінна быць другой натурай ў некаторай кропцы. 730 00:56:45,000 --> 00:56:50,000 Маючы гэта на ўвазе, гэта будзе амаль тое ж самае. 731 00:56:50,000 --> 00:56:57,000 Вы збіраецеся хочаце перабраць звязанага спісу. 732 00:56:57,000 --> 00:57:02,000 Калі вузел-я паняцця не маю, што велічыня называецца. 733 00:57:02,000 --> 00:57:04,000 Я вузла. 734 00:57:04,000 --> 00:57:15,000 Калі значэнне ў гэтым вузле = я вярнуся, праўда, і гэта ўсё. 735 00:57:15,000 --> 00:57:18,000 Звярніце ўвагу, што толькі так мы калі-небудзь вярнуцца ілжывым 736 00:57:18,000 --> 00:57:23,000 , Калі мы перабору ўсёй звязаны спіс і ніколі не вяртацца праўда, 737 00:57:23,000 --> 00:57:29,000 так гэта тое, што яна робіць. 738 00:57:29,000 --> 00:57:36,000 Як нататка боку, мы, верагодна, не атрымаеце, каб дадаць пачатку ці ў канцы. 739 00:57:36,000 --> 00:57:39,000 >> Хуткі апошняй ноты. 740 00:57:39,000 --> 00:57:52,000 Калі Вы бачыце статычную ключавых словах, так скажам статычнага колькасць Int = 0, 741 00:57:52,000 --> 00:57:56,000 Затым мы робім фота + +, вы можаце ў асноўным думаюць пра яго як пра глабальнай зменнай, 742 00:57:56,000 --> 00:58:00,000 хоць я толькі што сказаў, што гэта не так, як мы збіраемся рэалізаваць даўжыні. 743 00:58:00,000 --> 00:58:06,000 Я раблю гэта тут, а потым разлічваць + +. 744 00:58:06,000 --> 00:58:11,000 У любым выпадку, мы можам увайсці вузла ў нашым звязанага спісу мы павялічваючы наш рахунак. 745 00:58:11,000 --> 00:58:15,000 Сутнасць гэтага з'яўляецца тое, што статычная ключавое слова значыць. 746 00:58:15,000 --> 00:58:20,000 Калі б я толькі што соипЬ = 0, што будзе рэгулярна старых глабальных зменных. 747 00:58:20,000 --> 00:58:25,000 Што статычнага Int колькасць сродкаў з'яўляецца тое, што глабальная пераменная за гэты файл. 748 00:58:25,000 --> 00:58:28,000 Гэта немагчыма для некаторых іншых файлаў, 749 00:58:28,000 --> 00:58:34,000 хацелася думаць пра PSET 5, калі вы пачалі. 750 00:58:34,000 --> 00:58:39,000 Вы абодва speller.c, і ў вас ёсць dictionary.c, 751 00:58:39,000 --> 00:58:42,000 і калі вы проста абвясціць глабальную рэч, то нічога ў speller.c 752 00:58:42,000 --> 00:58:45,000 можна атрымаць у dictionary.c і наадварот. 753 00:58:45,000 --> 00:58:48,000 Глабальныя зменныя даступныя любому. Файл з, 754 00:58:48,000 --> 00:58:54,000 але статычныя зменныя даступныя толькі ўнутры самога файла, 755 00:58:54,000 --> 00:59:01,000 так што ўнутры праверку арфаграфіі або ўнутры dictionary.c, 756 00:59:01,000 --> 00:59:06,000 гэта накшталт як бы я заяўляю аб сваім зменнай для памеру маёй масіва 757 00:59:06,000 --> 00:59:10,000 або памер майго колькасць слоў у слоўніку. 758 00:59:10,000 --> 00:59:15,000 Так як я не хачу, каб абвясціць глабальную зменную, што хтосьці мае доступ, 759 00:59:15,000 --> 00:59:18,000 Я сапраўды клапоцяцца толькі пра яго для маіх уласных мэтаў. 760 00:59:18,000 --> 00:59:21,000 >> Добрая рэч аб гэтым таксама ўвесь матэрыял сутыкнення імя. 761 00:59:21,000 --> 00:59:27,000 Калі некаторы іншы файл спрабуе выкарыстаць глабальную зменную з імем графа, усё ідзе вельмі, вельмі няправільна, 762 00:59:27,000 --> 00:59:33,000 так што гэта добра трымае рэчы бяспечныя, і толькі вы можаце атрымаць да яго доступ, 763 00:59:33,000 --> 00:59:38,000 і ніхто іншы не можа, і калі нехта заяўляе, глабальная пераменная называецца граф, 764 00:59:38,000 --> 00:59:43,000 то ён не будзе ўмешвацца ў вашу статычнай зменнай кольк. 765 00:59:43,000 --> 00:59:47,000 Гэта тое, што з'яўляецца статычным. Гэта файл глабальных зменных. 766 00:59:47,000 --> 00:59:52,000 >> Пытанні пра што-небудзь? 767 00:59:52,000 --> 00:59:59,000 Ўсё гатова. Пакуль. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]