1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Seksyen 6] [Lebih Selesa] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Universiti Harvard] 3 00:00:04,000 --> 00:00:09,000 [Ini adalah CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Kita boleh pergi ke seksyen kami soalan. 5 00:00:11,000 --> 00:00:17,000 Saya menghantar URL untuk ruang sebelum. 6 00:00:17,000 --> 00:00:22,000 Permulaan seksyen soalan berkata- 7 00:00:22,000 --> 00:00:26,000 nampaknya saya tidak sepenuhnya unsick adalah satu soalan yang sangat mudah 8 00:00:26,000 --> 00:00:28,000 hanya apa yang valgrind? 9 00:00:28,000 --> 00:00:30,000 Apakah valgrind lakukan? 10 00:00:30,000 --> 00:00:34,000 Sesiapa yang mahu untuk mengatakan apa valgrind tidak? 11 00:00:34,000 --> 00:00:36,000 [Pelajar] Pemeriksaan memori kebocoran. 12 00:00:36,000 --> 00:00:41,000 Ya, valgrind pemeriksa memori am. 13 00:00:41,000 --> 00:00:44,000 Ia, pada akhirnya, memberitahu anda jika anda mempunyai sebarang kebocoran memori, 14 00:00:44,000 --> 00:00:49,000 yang kebanyakannya apa yang kita sedang menggunakan ia untuk kerana jika anda mahu 15 00:00:49,000 --> 00:00:54,000 berbuat baik dalam set masalah atau jika anda mahu 16 00:00:54,000 --> 00:00:59,000 mendapatkan di papan besar, anda perlu mempunyai apa jua pun tiada kebocoran memori, 17 00:00:59,000 --> 00:01:01,000 dan dalam kes anda mempunyai kebocoran memori yang anda tidak dapat mencari, 18 00:01:01,000 --> 00:01:04,000 juga ingat bahawa apabila anda membuka fail 19 00:01:04,000 --> 00:01:07,000 dan jika anda tidak menutupnya, itulah kebocoran memori. 20 00:01:07,000 --> 00:01:10,000 >> Ramai orang mencari beberapa nod bahawa mereka sedang tidak membebaskan 21 00:01:10,000 --> 00:01:15,000 apabila benar-benar, mereka tidak menutup kamus dalam langkah yang pertama. 22 00:01:15,000 --> 00:01:19,000 Ia juga memberitahu anda jika anda mempunyai apa-apa yang tidak sah membaca atau menulis, 23 00:01:19,000 --> 00:01:22,000 yang bermaksud jika anda cuba dan menetapkan nilai 24 00:01:22,000 --> 00:01:26,000 yang luar akhir timbunan dan ia tidak berlaku kepada kesalahan seg 25 00:01:26,000 --> 00:01:30,000 tetapi valgrind tangkapan, kerana anda harus sebenarnya tidak akan menulis di sana, 26 00:01:30,000 --> 00:01:33,000 dan sebagainya anda pasti tidak perlu mempunyai apa-apa daripada mereka sama ada. 27 00:01:33,000 --> 00:01:38,000 Bagaimana anda menggunakan valgrind? 28 00:01:38,000 --> 00:01:42,000 Bagaimana anda menggunakan valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Ia satu soalan umum 30 00:01:45,000 --> 00:01:49,000 jenis berjalan dan melihat output. 31 00:01:49,000 --> 00:01:51,000 Output luar biasa banyak kali. 32 00:01:51,000 --> 00:01:54,000 Ada juga kesilapan yang menyeronokkan di mana jika anda mempunyai beberapa perkara yang betul-betul salah 33 00:01:54,000 --> 00:01:59,000 berlaku dalam gelung, maka ia akhirnya akan berkata, "Terlalu banyak kesilapan. 34 00:01:59,000 --> 00:02:03,000 Saya akan berhenti mengira sekarang. " 35 00:02:03,000 --> 00:02:08,000 Ia pada dasarnya output teks yang anda perlu untuk menghuraikan. 36 00:02:08,000 --> 00:02:13,000 Pada akhirnya, ia akan memberitahu anda sebarang kebocoran memori yang anda mempunyai, 37 00:02:13,000 --> 00:02:16,000 berapa banyak blok, yang boleh berguna kerana 38 00:02:16,000 --> 00:02:20,000 jika ia satu blok unfreed, maka ia biasanya lebih mudah untuk mencari 39 00:02:20,000 --> 00:02:23,000 daripada 1,000 blok unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 blok unfreed mungkin bermakna anda tidak membebaskan 41 00:02:26,000 --> 00:02:30,000 senarai dikaitkan anda sesuai atau sesuatu. 42 00:02:30,000 --> 00:02:32,000 Itu valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Sekarang kita mempunyai seksyen kami soalan, 44 00:02:35,000 --> 00:02:38,000 yang anda tidak perlu memuat turun. 45 00:02:38,000 --> 00:02:41,000 Anda boleh klik pada nama saya dan menarik mereka dalam ruang. 46 00:02:41,000 --> 00:02:44,000 Sekarang klik pada saya. 47 00:02:44,000 --> 00:02:46,000 Semakan 1 akan menjadi timbunan, yang kita lakukan 1. 48 00:02:46,000 --> 00:02:55,000 Semakan 2 akan beratur, dan Semakan 3 akan menjadi senarai secara tunggal dikaitkan. 49 00:02:55,000 --> 00:02:58,000 Bermula dengan timbunan kami. 50 00:02:58,000 --> 00:03:02,000 Seperti yang dikatakan di sini, timbunan adalah salah satu yang paling asas, 51 00:03:02,000 --> 00:03:07,000 struktur data asas sains komputer. 52 00:03:07,000 --> 00:03:11,000 Contoh yang sangat prototypical 53 00:03:11,000 --> 00:03:13,000 timbunan dulang di dewan makan. 54 00:03:13,000 --> 00:03:16,000 Ia pada asasnya apabila anda sedang diperkenalkan kepada timbunan, 55 00:03:16,000 --> 00:03:20,000 seseorang akan berkata, "Oh, seperti timbunan dulang." 56 00:03:20,000 --> 00:03:22,000 Anda timbunan dulang. 57 00:03:22,000 --> 00:03:24,000 Kemudian apabila anda pergi ke tarik dulang, 58 00:03:24,000 --> 00:03:31,000 dulang pertama yang mendapat ditarik adalah yang terakhir yang telah meletakkan pada timbunan. 59 00:03:31,000 --> 00:03:34,000 Timbunan juga-seperti ia mengatakan di sini 60 00:03:34,000 --> 00:03:37,000 kita mempunyai segmen memori dipanggil timbunan. 61 00:03:37,000 --> 00:03:40,000 Dan mengapa ia dipanggil timbunan? 62 00:03:40,000 --> 00:03:42,000 >> Kerana seperti struktur data stack, 63 00:03:42,000 --> 00:03:46,000 ia menolak dan timbul bingkai timbunan pada timbunan, 64 00:03:46,000 --> 00:03:53,000 mana bingkai tindanan adalah seperti panggilan tertentu bagi suatu fungsi. 65 00:03:53,000 --> 00:03:57,000 Dan seperti timbunan, anda akan sentiasa perlu untuk kembali 66 00:03:57,000 --> 00:04:03,000 dari panggilan fungsi sebelum anda boleh mendapatkan turun ke dalam bingkai tindanan yang lebih rendah lagi. 67 00:04:03,000 --> 00:04:08,000 Anda tidak boleh mempunyai panggilan utama foo panggilan bar dan bar kembali untuk terus utama. 68 00:04:08,000 --> 00:04:14,000 Ia sentiasa mendapat ikut susunan betul menolak dan pop. 69 00:04:14,000 --> 00:04:18,000 Dua operasi, seperti saya katakan, adalah menolak dan pop. 70 00:04:18,000 --> 00:04:20,000 Mereka adalah istilah sejagat. 71 00:04:20,000 --> 00:04:26,000 Anda perlu tahu menolak dan pop dari segi susunan tidak kira apa. 72 00:04:26,000 --> 00:04:28,000 Kita akan melihat beratur adalah jenis yang berbeza. 73 00:04:28,000 --> 00:04:32,000 Ia tidak benar-benar mempunyai satu istilah yang universal, tetapi menolak dan pop sejagat bagi susunan. 74 00:04:32,000 --> 00:04:34,000 Tekan hanya meletakkan pada timbunan. 75 00:04:34,000 --> 00:04:37,000 Pop adalah mengambil kira timbunan. 76 00:04:37,000 --> 00:04:43,000 Dan kita lihat di sini kita mempunyai timbunan struct typedef kami, 77 00:04:43,000 --> 00:04:46,000 jadi kita mempunyai char ** rentetan. 78 00:04:46,000 --> 00:04:51,000 Jangan takut oleh mana-mana **. 79 00:04:51,000 --> 00:04:54,000 Ini akan berakhir sehingga menjadi pelbagai rentetan 80 00:04:54,000 --> 00:04:58,000 atau pelbagai petunjuk untuk watak-watak, di mana 81 00:04:58,000 --> 00:05:00,000 petunjuk untuk watak cenderung untuk menjadi rentetan. 82 00:05:00,000 --> 00:05:05,000 Ia tidak perlu untuk menjadi rentetan, tetapi di sini, mereka akan menjadi rentetan. 83 00:05:05,000 --> 00:05:08,000 >> Kami mempunyai pelbagai rentetan. 84 00:05:08,000 --> 00:05:14,000 Kami mempunyai saiz, yang mewakili berapa banyak elemen yang kini pada timbunan, 85 00:05:14,000 --> 00:05:19,000 dan kemudian kita mempunyai keupayaan, yang adalah berapa banyak unsur-unsur yang boleh pada timbunan. 86 00:05:19,000 --> 00:05:22,000 Kapasiti harus bermula sebagai sesuatu yang lebih besar daripada 1, 87 00:05:22,000 --> 00:05:27,000 tetapi saiz akan bermula sebagai 0. 88 00:05:27,000 --> 00:05:36,000 Sekarang, terdapat pada asasnya tiga cara yang berbeza yang anda boleh berfikir timbunan. 89 00:05:36,000 --> 00:05:39,000 Nah, terdapat mungkin lebih, tetapi dua cara utama 90 00:05:39,000 --> 00:05:43,000 anda boleh melaksanakan ia menggunakan array, atau anda boleh melaksanakan ia menggunakan senarai yang dipautkan. 91 00:05:43,000 --> 00:05:48,000 Berkaitan senarai adalah jenis remeh membuat susunan dari. 92 00:05:48,000 --> 00:05:51,000 Ia adalah sangat mudah untuk membuat timbunan menggunakan senarai berkaitan, 93 00:05:51,000 --> 00:05:55,000 jadi di sini, kita akan membuat timbunan menggunakan tatasusunan, 94 00:05:55,000 --> 00:05:59,000 dan kemudian menggunakan tatasusunan, terdapat juga dua cara anda boleh berfikir tentang hal itu. 95 00:05:59,000 --> 00:06:01,000 Sebelum ini, apabila saya berkata kita mempunyai kapasiti untuk timbunan, 96 00:06:01,000 --> 00:06:04,000 supaya kita boleh memuatkan elemen pada timbunan. 97 00:06:04,000 --> 00:06:09,000 >> Satu cara ia boleh berlaku dengan seberapa segera seperti yang anda memukul 10 unsur, maka anda selesai. 98 00:06:09,000 --> 00:06:13,000 Anda mungkin tahu bahawa terdapat atas terikat 10 perkara di dunia 99 00:06:13,000 --> 00:06:16,000 bahawa anda tidak akan mempunyai lebih daripada 10 perkara pada timbunan anda, 100 00:06:16,000 --> 00:06:20,000 di mana anda boleh mempunyai atas terikat kepada saiz timbunan anda. 101 00:06:20,000 --> 00:06:23,000 Atau anda boleh mempunyai timbunan anda akan terbatas, 102 00:06:23,000 --> 00:06:27,000 tetapi jika anda melakukan pelbagai, ini bermakna bahawa setiap kali tunggal anda mencecah 10 elemen, 103 00:06:27,000 --> 00:06:29,000 maka anda akan mempunyai berkembang kepada 20 elemen, dan apabila anda mencecah 20 elemen, 104 00:06:29,000 --> 00:06:33,000 anda akan mempunyai untuk mengembangkan pelbagai anda hingga 30 elemen atau 40 unsur. 105 00:06:33,000 --> 00:06:37,000 Anda akan perlu untuk meningkatkan keupayaan, yang adalah apa yang kita akan lakukan di sini. 106 00:06:37,000 --> 00:06:40,000 Setiap kali tunggal kita mencapai saiz maksimum timbunan kita, 107 00:06:40,000 --> 00:06:46,000 apabila kita menolak sesuatu yang lain pada, kita akan perlu untuk meningkatkan kapasiti. 108 00:06:46,000 --> 00:06:50,000 Di sini, kita telah menolak diisytiharkan sebagai menolak bool (char * str). 109 00:06:50,000 --> 00:06:54,000 Str * Char adalah rentetan bahawa kita menolak ke dalam tindanan, 110 00:06:54,000 --> 00:06:58,000 dan bool hanya mengatakan sama ada kita berjaya atau gagal. 111 00:06:58,000 --> 00:07:00,000 >> Bagaimana kita boleh gagal? 112 00:07:00,000 --> 00:07:04,000 Apakah keadaan sahaja yang boleh anda fikirkan 113 00:07:04,000 --> 00:07:07,000 di mana kita akan perlu kembali palsu? 114 00:07:07,000 --> 00:07:09,000 Yeah. 115 00:07:09,000 --> 00:07:12,000 [Pelajar] Jika ia penuh dan kami menggunakan pelaksanaan disempadani. 116 00:07:12,000 --> 00:07:17,000 Ya, jadi bagaimana kita menentukan dia menjawab 117 00:07:17,000 --> 00:07:23,000 jika ia penuh dan kita menggunakan pelaksanaan yang terbatas. 118 00:07:23,000 --> 00:07:26,000 Kemudian kita pasti akan kembali palsu. 119 00:07:26,000 --> 00:07:31,000 Secepat kita mencapai 10 perkara dalam array, kita tidak boleh memuatkan 11, jadi kita kembali palsu. 120 00:07:31,000 --> 00:07:32,000 Bagaimana jika ia tidak terbatas? Yeah. 121 00:07:32,000 --> 00:07:38,000 Jika anda tidak boleh mengembangkan pelbagai untuk sebab-sebab tertentu. 122 00:07:38,000 --> 00:07:43,000 Ya, jadi ingatan adalah sumber yang terhad, 123 00:07:43,000 --> 00:07:51,000 dan akhirnya, jika kita terus menolak perkara-perkara ke dalam tindanan berulang-ulang kali, 124 00:07:51,000 --> 00:07:54,000 kita akan cuba dan memperuntukkan pelbagai yang lebih besar patut 125 00:07:54,000 --> 00:07:59,000 kapasiti yang lebih besar, dan malloc atau apa sahaja yang kita gunakan akan kembali palsu. 126 00:07:59,000 --> 00:08:02,000 Nah, malloc akan kembali null. 127 00:08:02,000 --> 00:08:05,000 >> Ingat, setiap kali tunggal anda pernah memanggil malloc, anda perlu menyemak untuk melihat jika ia 128 00:08:05,000 --> 00:08:12,000 mengembalikan null atau lain yang potongan betulnya. 129 00:08:12,000 --> 00:08:17,000 Sejak kita mahu untuk mempunyai timbunan yang amat besar, 130 00:08:17,000 --> 00:08:21,000 kes sahaja kita pergi akan kembali palsu adalah jika kita cuba 131 00:08:21,000 --> 00:08:26,000 meningkatkan kapasiti dan malloc atau apa-apa pulangan palsu. 132 00:08:26,000 --> 00:08:30,000 Kemudian pop mengambil tiada hujah, 133 00:08:30,000 --> 00:08:37,000 dan ia kembali rentetan yang di atas tindanan. 134 00:08:37,000 --> 00:08:41,000 Apa sahaja yang paling baru-baru ini ditolak pada timbunan adalah apa pop kembali, 135 00:08:41,000 --> 00:08:44,000 dan ia juga membuang ia dari timbunan. 136 00:08:44,000 --> 00:08:50,000 Dan notis bahawa ia kembali batal jika terdapat apa-apa pada timbunan. 137 00:08:50,000 --> 00:08:53,000 Ia sentiasa mungkin bahawa timbunan kosong. 138 00:08:53,000 --> 00:08:55,000 Di Jawa, jika anda digunakan untuk itu, atau bahasa-bahasa lain, 139 00:08:55,000 --> 00:09:01,000 cuba untuk pop dari timbunan kosong mungkin menyebabkan pengecualian atau sesuatu. 140 00:09:01,000 --> 00:09:09,000 >> Tetapi dalam C, null adalah jenis banyak kes-kes bagaimana kita menangani masalah-masalah ini. 141 00:09:09,000 --> 00:09:13,000 Kembali null ialah bagaimana kita pergi untuk menandakan bahawa tindanan adalah kosong. 142 00:09:13,000 --> 00:09:16,000 Kami telah menyediakan kod yang akan menguji kefungsian timbunan anda, 143 00:09:16,000 --> 00:09:19,000 melaksanakan menolak dan pop. 144 00:09:19,000 --> 00:09:23,000 Ini tidak akan banyak kod. 145 00:09:23,000 --> 00:09:40,000 Saya akan-sebenarnya, sebelum kita berbuat demikian, bayangan, bayangan- 146 00:09:40,000 --> 00:09:44,000 jika anda tidak pernah melihat ia, malloc bukan adalah fungsi sahaja 147 00:09:44,000 --> 00:09:47,000 yang memperuntukkan memori pada timbunan untuk anda. 148 00:09:47,000 --> 00:09:51,000 Terdapat keluarga fungsinya alloc. 149 00:09:51,000 --> 00:09:53,000 Yang pertama adalah malloc, yang anda digunakan untuk. 150 00:09:53,000 --> 00:09:56,000 Kemudian ada calloc, yang melakukan perkara yang sama seperti malloc, 151 00:09:56,000 --> 00:09:59,000 tetapi ia akan sifar segala-galanya untuk anda. 152 00:09:59,000 --> 00:10:04,000 Jika anda pernah mahu untuk menetapkan segala-galanya untuk menyeimbangkan selepas mallocing sesuatu 153 00:10:04,000 --> 00:10:06,000 anda sepatutnya hanya digunakan calloc di tempat pertama bukannya menulis 154 00:10:06,000 --> 00:10:09,000 untuk gelung untuk sifar daripada keseluruhan blok ingatan. 155 00:10:09,000 --> 00:10:15,000 >> Realloc adalah seperti malloc dan mempunyai banyak kes-kes khas, 156 00:10:15,000 --> 00:10:19,000 tetapi pada dasarnya apa realloc 157 00:10:19,000 --> 00:10:24,000 ia mengambil penunjuk yang telah diagihkan. 158 00:10:24,000 --> 00:10:27,000 Realloc adalah fungsi yang anda mahu untuk membayar perhatian ke sini. 159 00:10:27,000 --> 00:10:31,000 Ia mengambil penunjuk yang sudah pulang dari malloc. 160 00:10:31,000 --> 00:10:35,000 Katakan anda meminta dari malloc penunjuk 10 bait. 161 00:10:35,000 --> 00:10:38,000 Kemudian anda sedar anda mahu 20 bytes, 162 00:10:38,000 --> 00:10:42,000 jadi anda memanggil realloc pada penunjuk bahawa dengan 20 bait, 163 00:10:42,000 --> 00:10:47,000 dan realloc secara automatik akan menyalin atas segala-galanya untuk anda. 164 00:10:47,000 --> 00:10:51,000 Jika anda hanya dipanggil malloc lagi, seperti saya mempunyai 10 bait. 165 00:10:51,000 --> 00:10:53,000 Sekarang saya perlu blok sebanyak 20 bait, 166 00:10:53,000 --> 00:10:58,000 jadi jika saya malloc 20 bytes, maka saya mempunyai manual menyalin lebih 10 bait dari perkara yang pertama 167 00:10:58,000 --> 00:11:01,000 ke perkara yang kedua dan kemudian perkara pertama percuma. 168 00:11:01,000 --> 00:11:04,000 Realloc akan mengendalikan untuk anda. 169 00:11:04,000 --> 00:11:11,000 >> Notis tandatangan itu akan menjadi * tidak sah, 170 00:11:11,000 --> 00:11:15,000 yang hanya kembali penunjuk kepada blok memori, 171 00:11:15,000 --> 00:11:17,000 maka tidak sah * ptr. 172 00:11:17,000 --> 00:11:22,000 Anda boleh berfikir * terbatal sebagai penunjuk generik. 173 00:11:22,000 --> 00:11:27,000 Secara umumnya, anda tidak pernah berurusan dengan * tidak sah, 174 00:11:27,000 --> 00:11:30,000 tetapi malloc kembali * terbatal, dan kemudian ia hanya digunakan seperti 175 00:11:30,000 --> 00:11:34,000 ini sebenarnya akan menjadi * char. 176 00:11:34,000 --> 00:11:37,000 * Kekosongan sebelumnya yang telah dikembalikan oleh malloc 177 00:11:37,000 --> 00:11:41,000 kini akan akan diluluskan untuk realloc, dan kemudian saiz 178 00:11:41,000 --> 00:11:49,000 adalah nombor baru bait yang anda ingin memperuntukkan, jadi kapasiti baru anda. 179 00:11:49,000 --> 00:11:57,000 Saya akan memberikan anda beberapa minit, dan melakukannya dalam ruang kita. 180 00:11:57,000 --> 00:12:02,000 Mula dengan Ulangkaji 1. 181 00:12:16,000 --> 00:12:21,000 Saya akan berhenti anda selepas diharapkan tentang masa yang cukup untuk melaksanakan menolak, 182 00:12:21,000 --> 00:12:24,000 dan kemudian saya akan memberikan anda lain rehat untuk berbuat pop. 183 00:12:24,000 --> 00:12:27,000 Tetapi ia benar-benar tidak adalah bahawa kod banyak pada semua. 184 00:12:27,000 --> 00:12:35,000 Kod yang paling mungkin barangan berkembang, memperluaskan kapasiti. 185 00:12:35,000 --> 00:12:39,000 Okay, tiada tekanan untuk sepenuhnya dilakukan, 186 00:12:39,000 --> 00:12:47,000 tetapi selagi anda berasa seperti anda berada di landasan yang betul, yang baik. 187 00:12:47,000 --> 00:12:53,000 >> Adakah sesiapa yang mempunyai apa-apa kod yang mereka berasa selesa dengan saya menarik? 188 00:12:53,000 --> 00:12:59,000 Ya, saya akan, tetapi tidak sesiapa yang mempunyai apa-apa kod saya boleh tarik sehingga? 189 00:12:59,000 --> 00:13:05,000 Baiklah, anda boleh mula, menyimpan, apa sahaja ia adalah? 190 00:13:05,000 --> 00:13:09,000 Saya sentiasa lupa langkah itu. 191 00:13:09,000 --> 00:13:15,000 Okay, mencari di tolak, 192 00:13:15,000 --> 00:13:18,000 adakah anda mahu untuk menjelaskan kod anda? 193 00:13:18,000 --> 00:13:24,000 [Pelajar] Pertama sekali, saya meningkatkan saiz. 194 00:13:24,000 --> 00:13:28,000 Saya rasa mungkin saya patut mempunyai bahawa-anyway, saya meningkat saiz, 195 00:13:28,000 --> 00:13:31,000 dan saya melihat jika ia adalah kurang daripada kapasiti. 196 00:13:31,000 --> 00:13:36,000 Dan jika ia kurang daripada kapasiti, saya menambah kepada pelbagai bahawa kita sudah mempunyai. 197 00:13:36,000 --> 00:13:42,000 Dan jika ia tidak, saya menggandakan kapasiti oleh 2, 198 00:13:42,000 --> 00:13:50,000 dan saya mengagihkan semula array rentetan sesuatu dengan saiz kapasiti yang lebih besar sekarang. 199 00:13:50,000 --> 00:13:55,000 Dan kemudian jika itu gagal, saya memberitahu pengguna dan kembali palsu, 200 00:13:55,000 --> 00:14:04,000 dan jika ia baik, maka saya meletakkan tali di tempat baru. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Juga melihat bahawa kita digunakan pengendali nice bitwise sini 202 00:14:07,000 --> 00:14:09,000 membiak dengan 2. 203 00:14:09,000 --> 00:14:11,000 Ingat, peralihan kiri sentiasa akan didarab dengan 2. 204 00:14:11,000 --> 00:14:15,000 Anjakan yang betul dibahagikan dengan 2 selagi anda ingat bahawa ia bermakna 205 00:14:15,000 --> 00:14:18,000 dibahagikan dengan 2 seperti dalam integer dibahagikan dengan 2. 206 00:14:18,000 --> 00:14:20,000 Ia mungkin menyingkatkan sebanyak 1 di sini atau di sana. 207 00:14:20,000 --> 00:14:26,000 Tetapi peralihan yang ditinggalkan oleh 1 sentiasa akan didarab dengan 2, 208 00:14:26,000 --> 00:14:32,000 melainkan jika anda limpahan batas integer, dan kemudian ia tidak akan menjadi. 209 00:14:32,000 --> 00:14:34,000 Satu komen sampingan. 210 00:14:34,000 --> 00:14:39,000 Saya suka untuk melakukan ini tidak akan mengubah kod apa jua cara sekalipun, 211 00:14:39,000 --> 00:14:48,000 tetapi saya suka untuk melakukan sesuatu seperti ini. 212 00:14:48,000 --> 00:14:51,000 Ia sebenarnya akan membuat ia sedikit lagi. 213 00:15:04,000 --> 00:15:08,000 Mungkin ini bukan kes yang sempurna untuk menunjukkan ini, 214 00:15:08,000 --> 00:15:14,000 tetapi saya suka untuk segmen ia ke dalam blok-blok- 215 00:15:14,000 --> 00:15:17,000 okay, jika ini jika berlaku, maka saya akan melakukan sesuatu, 216 00:15:17,000 --> 00:15:19,000 dan kemudian fungsi dilakukan. 217 00:15:19,000 --> 00:15:22,000 Saya tidak perlu kemudian tatal ke mata saya sepanjang jalan ke fungsi 218 00:15:22,000 --> 00:15:25,000 untuk melihat apa yang berlaku selepas yang lain. 219 00:15:25,000 --> 00:15:27,000 Ia adalah jika ini jika berlaku, maka saya hanya kembali. 220 00:15:27,000 --> 00:15:30,000 Ia juga mempunyai manfaat yang bagus ditambah segala-galanya luar ini 221 00:15:30,000 --> 00:15:33,000 kini beralih kiri sekali. 222 00:15:33,000 --> 00:15:40,000 Saya tidak perlu lagi ke jika anda pernah berhampiran sungguh barisan panjang, 223 00:15:40,000 --> 00:15:45,000 maka orang-orang 4 bait boleh membantu, dan juga sesuatu yang lebih kiri, 224 00:15:45,000 --> 00:15:48,000 kurang terharu anda rasa jika suka-okay, saya perlu ingat 225 00:15:48,000 --> 00:15:53,000 Saya kini dalam gelung sementara di dalam di dalam sebuah lain untuk gelung. 226 00:15:53,000 --> 00:15:58,000 Mana-mana anda boleh melakukan penyata ini dengan serta-merta, saya semacam. 227 00:15:58,000 --> 00:16:05,000 Ia adalah benar-benar pilihan dan tidak dijangka dalam apa jua cara. 228 00:16:05,000 --> 00:16:12,000 >> [Pelajar] Sekiranya terdapat saiz - dalam keadaan gagal? 229 00:16:12,000 --> 00:16:19,000 Keadaan gagal di sini kita gagal kepada realloc, begitu ya. 230 00:16:19,000 --> 00:16:22,000 Perhatikan bagaimana dalam keadaan gagal, mungkin, 231 00:16:22,000 --> 00:16:26,000 melainkan jika kita barangan percuma kemudian, kita sentiasa akan gagal 232 00:16:26,000 --> 00:16:29,000 tidak kira berapa kali kita cuba untuk menolak sesuatu. 233 00:16:29,000 --> 00:16:32,000 Jika kita terus menolak, kami menyimpan saiz incrementing, 234 00:16:32,000 --> 00:16:36,000 walaupun kita tidak meletakkan apa-apa ke dalam tindanan. 235 00:16:36,000 --> 00:16:39,000 Biasanya kita tidak kenaikan saiz sehingga 236 00:16:39,000 --> 00:16:43,000 selepas kita telah berjaya meletakkan ia pada timbunan. 237 00:16:43,000 --> 00:16:50,000 Kami akan melakukannya, katakan, sama ada di sini dan di sini. 238 00:16:50,000 --> 00:16:56,000 Dan kemudian bukannya mengatakan s.size kapasiti ≤, ia adalah kurang daripada kapasiti, 239 00:16:56,000 --> 00:17:01,000 hanya kerana kita berpindah di mana segala-galanya adalah. 240 00:17:01,000 --> 00:17:07,000 >> Dan ingat, satu-satunya tempat yang kita mungkin dapat kembali palsu 241 00:17:07,000 --> 00:17:14,000 di sini, di mana realloc kembali batal, 242 00:17:14,000 --> 00:17:19,000 dan jika anda berlaku untuk ingat ralat piawai, 243 00:17:19,000 --> 00:17:22,000 mungkin anda boleh mempertimbangkan ini kes di mana anda mahu mencetak ralat piawai, 244 00:17:22,000 --> 00:17:26,000 stderr begitu fprintf bukan hanya mencetak terus keluar standard. 245 00:17:26,000 --> 00:17:31,000 Sekali lagi, yang bukan jangkaan, tetapi jika ia adalah satu kesilapan, 246 00:17:31,000 --> 00:17:41,000 menaip printf, maka anda mungkin mahu untuk membuat ia mencetak ralat piawai bukannya keluar standard. 247 00:17:41,000 --> 00:17:44,000 >> Sesiapa yang mempunyai apa-apa lagi yang perlu diambil perhatian? Ya. 248 00:17:44,000 --> 00:17:47,000 [Pelajar] Bolehkah anda pergi ke [didengar]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Ya, binariness sebenar atau hanya apa yang ia? 250 00:17:55,000 --> 00:17:57,000 [Pelajar] Jadi anda membiak dengan 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Ya, pada asasnya. 252 00:17:59,000 --> 00:18:11,000 Di negeri binari, kita sentiasa mempunyai set kami digit. 253 00:18:11,000 --> 00:18:22,000 Peralihan kiri ini dengan 1 pada dasarnya memasukkan ia di sini di sebelah kanan. 254 00:18:22,000 --> 00:18:25,000 Kembali ke ini, hanya mengingati bahawa segala-galanya dalam perduaan 255 00:18:25,000 --> 00:18:28,000 adalah kuasa 2, jadi ini mewakili 2 0,, 256 00:18:28,000 --> 00:18:30,000 ini 2 untuk 1, 2 ke 2. 257 00:18:30,000 --> 00:18:33,000 Dengan memasukkan 0 hingga sebelah kanan sekarang, kita hanya beralih segala-galanya berakhir. 258 00:18:33,000 --> 00:18:38,000 Apa yang digunakan untuk menjadi 2 0, kini 2 ke 1, 2 ke 2. 259 00:18:38,000 --> 00:18:41,000 Sebelah kanan yang kita dimasukkan 260 00:18:41,000 --> 00:18:44,000 semestinya akan menjadi 0, 261 00:18:44,000 --> 00:18:46,000 yang masuk akal. 262 00:18:46,000 --> 00:18:49,000 Jika anda pernah membiak nombor dengan 2, ia tidak akan berakhir ganjil, 263 00:18:49,000 --> 00:18:54,000 jadi 2 ke tempat 0 harus 0, 264 00:18:54,000 --> 00:18:59,000 dan ini adalah apa yang saya separuh memberi amaran tentang sebelum ini jika anda berlaku untuk beralih 265 00:18:59,000 --> 00:19:01,000 luar bilangan bit integer, 266 00:19:01,000 --> 00:19:04,000 kemudian 1 ini akan berakhir sehingga terkeluar. 267 00:19:04,000 --> 00:19:10,000 Itu hanya bimbang jika anda berlaku untuk berurusan dengan kapasiti yang benar-benar besar. 268 00:19:10,000 --> 00:19:15,000 Tetapi pada ketika itu, maka anda berurusan dengan pelbagai berbilion perkara, 269 00:19:15,000 --> 00:19:25,000 yang mungkin tidak dimuatkan ke dalam ingatan anyway. 270 00:19:25,000 --> 00:19:31,000 >> Sekarang kita boleh mendapatkan pop, yang adalah lebih mudah. 271 00:19:31,000 --> 00:19:36,000 Anda boleh melakukannya suka jika anda berlaku untuk pop sekumpulan keseluruhan, 272 00:19:36,000 --> 00:19:38,000 dan kini anda berada pada kapasiti setengah lagi. 273 00:19:38,000 --> 00:19:42,000 Anda boleh realloc untuk mengecilkan jumlah memori yang anda ada, 274 00:19:42,000 --> 00:19:47,000 tetapi anda tidak perlu risau tentang itu, jadi kes realloc hanya akan menjadi 275 00:19:47,000 --> 00:19:50,000 semakin meningkat ingatan, tidak mengecut memori, 276 00:19:50,000 --> 00:19:59,000 yang akan membuat super pop mudah. 277 00:19:59,000 --> 00:20:02,000 Sekarang beratur, yang akan menjadi seperti susunan, 278 00:20:02,000 --> 00:20:06,000 tetapi supaya kamu mengambil perkara keluar diterbalikkan. 279 00:20:06,000 --> 00:20:10,000 Contoh prototypical barisan adalah garis, 280 00:20:10,000 --> 00:20:12,000 jadi saya rasa jika anda adalah Bahasa Inggeris, saya akan berkata 281 00:20:12,000 --> 00:20:17,000 contoh prototypical barisan adalah barisan. 282 00:20:17,000 --> 00:20:22,000 Jadi, seperti garis, jika anda orang yang pertama dalam baris, 283 00:20:22,000 --> 00:20:24,000 anda mengharapkan untuk menjadi orang pertama di luar garisan. 284 00:20:24,000 --> 00:20:31,000 Jika anda orang terakhir dalam talian, anda akan menjadi orang yang terakhir yang diservis. 285 00:20:31,000 --> 00:20:35,000 Kami menyeru bahawa corak FIFO, manakala timbunan adalah corak LIFO. 286 00:20:35,000 --> 00:20:40,000 Mereka perkataan cukup sejagat. 287 00:20:40,000 --> 00:20:46,000 >> Seperti susunan dan tidak seperti tatasusunan, beratur biasanya tidak membenarkan akses kepada unsur-unsur di tengah-tengah. 288 00:20:46,000 --> 00:20:50,000 Di sini, timbunan, kita perlu menolak dan pop. 289 00:20:50,000 --> 00:20:54,000 Di sini, kita berlaku telah dipanggil mereka enqueue dan dequeue. 290 00:20:54,000 --> 00:20:58,000 Saya juga telah mendengar mereka dipanggil anjakan dan unshift. 291 00:20:58,000 --> 00:21:02,000 Saya pernah mendengar orang mengatakan menolak dan pop juga terpakai untuk beratur. 292 00:21:02,000 --> 00:21:05,000 Saya telah mendengar memasukkan, keluarkan, 293 00:21:05,000 --> 00:21:11,000 supaya menolak dan pop, jika anda bercakap tentang susunan, anda menolak dan pop. 294 00:21:11,000 --> 00:21:16,000 Jika anda bercakap tentang antrian, anda boleh memilih perkataan yang anda mahu gunakan 295 00:21:16,000 --> 00:21:23,000 untuk kemasukan dan penyingkiran, dan tidak ada kata sepakat tentang apa yang ia harus dipanggil. 296 00:21:23,000 --> 00:21:27,000 Tetapi di sini, kita mempunyai enqueue dan dequeue. 297 00:21:27,000 --> 00:21:37,000 Sekarang, struct kelihatan hampir sama kepada struct timbunan. 298 00:21:37,000 --> 00:21:40,000 Tetapi kita perlu menjejaki kepala. 299 00:21:40,000 --> 00:21:44,000 Saya rasa ia mengatakan turun di sini, tetapi mengapa kita perlu kepala? 300 00:21:53,000 --> 00:21:57,000 Prototaip pada dasarnya adalah sama untuk menolak dan pop. 301 00:21:57,000 --> 00:21:59,000 Anda boleh berfikir ia sebagai menolak dan pop. 302 00:21:59,000 --> 00:22:08,000 Satu-satunya perbezaan adalah pop kembali-bukan terakhir, ia kembali pertama. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, atau sesuatu. 304 00:22:12,000 --> 00:22:14,000 Dan di sini adalah permulaan. 305 00:22:14,000 --> 00:22:17,000 Beratur kami adalah benar-benar penuh, jadi terdapat empat elemen di dalamnya. 306 00:22:17,000 --> 00:22:21,000 Hujung barisan kita kini 2, 307 00:22:21,000 --> 00:22:24,000 dan sekarang kita pergi untuk memasukkan sesuatu yang lain. 308 00:22:24,000 --> 00:22:29,000 >> Apabila kita mahu untuk memasukkan sesuatu yang lain, apa yang kita lakukan untuk versi tindanan 309 00:22:29,000 --> 00:22:36,000 kita dilanjutkan blok ingatan kami. 310 00:22:36,000 --> 00:22:40,000 Apakah masalah dengan ini? 311 00:22:40,000 --> 00:22:45,000 [Pelajar] Anda bergerak 2,. 312 00:22:45,000 --> 00:22:51,000 Apa yang saya katakan sebelum ini tentang akhir barisan, 313 00:22:51,000 --> 00:22:57,000 ini tidak masuk akal bahawa kita mula pada 1, 314 00:22:57,000 --> 00:23:01,000 maka kita mahu untuk dequeue 1, maka dequeue 3, maka dequeue 4, 315 00:23:01,000 --> 00:23:05,000 maka dequeue 2, maka dequeue satu ini. 316 00:23:05,000 --> 00:23:08,000 Kita tidak boleh menggunakan realloc kini, 317 00:23:08,000 --> 00:23:11,000 atau sekurang-kurangnya, anda perlu menggunakan realloc dalam cara yang berbeza. 318 00:23:11,000 --> 00:23:15,000 Tetapi anda mungkin perlu tidak hanya menggunakan realloc. 319 00:23:15,000 --> 00:23:18,000 Anda akan perlu untuk manual menyalin ingatan anda. 320 00:23:18,000 --> 00:23:21,000 >> Terdapat dua fungsi untuk menyalin ingatan. 321 00:23:21,000 --> 00:23:25,000 Ada memcopy dan memmove. 322 00:23:25,000 --> 00:23:29,000 Saya sedang membaca muka surat manusia untuk melihat yang mana satu anda akan mahu menggunakan. 323 00:23:29,000 --> 00:23:35,000 Okay, memcopy, perbezaan adalah 324 00:23:35,000 --> 00:23:38,000 bahawa memcopy dan memmove, salah mengendalikan kes itu betul 325 00:23:38,000 --> 00:23:41,000 mana anda hendak menyalin ke rantau yang berlaku bertindih rantau 326 00:23:41,000 --> 00:23:46,000 anda menyalin dari. 327 00:23:46,000 --> 00:23:50,000 Memcopy tidak mengendalikan ia. Memmove tidak. 328 00:23:50,000 --> 00:23:59,000 Anda boleh berfikir masalah sebagai- 329 00:23:59,000 --> 00:24:09,000 katakan saya mahu menyalin lelaki ini, 330 00:24:09,000 --> 00:24:13,000 keempat-empat lelaki ini lebih. 331 00:24:13,000 --> 00:24:16,000 Pada akhirnya, apa array perlu kelihatan seperti 332 00:24:16,000 --> 00:24:26,000 selepas salinan 2, 1, 2, 1, 3, 4, dan kemudian beberapa barangan pada akhir. 333 00:24:26,000 --> 00:24:29,000 Tetapi ini adalah bergantung kepada perintah di mana kita sebenarnya menyalin, 334 00:24:29,000 --> 00:24:32,000 kerana jika kita tidak mempertimbangkan hakikat bahawa rantau kita menyalin ke dalam 335 00:24:32,000 --> 00:24:35,000 bertindih yang kita sedang menyalin dari, 336 00:24:35,000 --> 00:24:46,000 maka kita mungkin melakukan seperti permulaan di sini, menyalin 2, ke tempat yang kita mahu pergi, 337 00:24:46,000 --> 00:24:52,000 kemudian bergerak petunjuk kita ke hadapan. 338 00:24:52,000 --> 00:24:56,000 >> Sekarang kita akan berada di sini dan di sini, dan kini kita mahu menyalin 339 00:24:56,000 --> 00:25:04,000 lelaki ini ke atas lelaki ini dan bergerak petunjuk kita ke hadapan. 340 00:25:04,000 --> 00:25:07,000 Apa yang kita akan akhirnya mendapat 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 bukannya 2 sesuai, 1, 2, 1, 3, 4 kerana 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode asal 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove mengendalikan bahawa betul. 344 00:25:19,000 --> 00:25:23,000 Dalam kes ini, pada dasarnya hanya sentiasa menggunakan memmove 345 00:25:23,000 --> 00:25:26,000 kerana ia mengendalikan ia dengan betul. 346 00:25:26,000 --> 00:25:29,000 Ia biasanya tidak melakukan apa-apa lebih teruk. 347 00:25:29,000 --> 00:25:32,000 Idea ini adalah bukannya bermula dari awal dan menyalin cara ini 348 00:25:32,000 --> 00:25:35,000 seperti kita hanya lakukan di sini, ia bermula dari akhir dan menyalinnya dalam, 349 00:25:35,000 --> 00:25:38,000 dan dalam hal yang demikian, anda tidak boleh mempunyai masalah. 350 00:25:38,000 --> 00:25:40,000 Terdapat prestasi tidak hilang. 351 00:25:40,000 --> 00:25:47,000 Sentiasa gunakan memmove. Jangan bimbang tentang memcopy. 352 00:25:47,000 --> 00:25:51,000 Dan itulah di mana anda akan perlu berasingan memmove 353 00:25:51,000 --> 00:26:01,000 bahagian yang dibalut sekitar barisan anda. 354 00:26:01,000 --> 00:26:04,000 Jangan bimbang jika tidak benar-benar dilakukan. 355 00:26:04,000 --> 00:26:10,000 Ini adalah lebih sukar daripada timbunan, tolak, pop dan. 356 00:26:10,000 --> 00:26:15,000 >> Sesiapa yang mempunyai apa-apa kod yang kita boleh bekerja dengan? 357 00:26:15,000 --> 00:26:21,000 Malah jika benar-benar tidak lengkap? 358 00:26:21,000 --> 00:26:23,000 [Pelajar] Ya, ia adalah benar-benar tidak lengkap, walaupun. 359 00:26:23,000 --> 00:26:27,000 Sepenuhnya lengkap adalah baik selagi kita boleh anda menjimatkan semakan? 360 00:26:27,000 --> 00:26:32,000 Saya lupa bahawa setiap kali tunggal. 361 00:26:32,000 --> 00:26:39,000 Okay, tanpa menghiraukan apa yang berlaku apabila kita perlu mengubah perkara. 362 00:26:39,000 --> 00:26:42,000 Benar-benar mengabaikan saiz semula. 363 00:26:42,000 --> 00:26:49,000 Terangkan kod ini. 364 00:26:49,000 --> 00:26:54,000 Saya memeriksa pertama sekali jika saiz kurang daripada salinan pertama sekali 365 00:26:54,000 --> 00:27:01,000 dan kemudian selepas itu, saya memasukkan saya mengambil kepala + saiz, 366 00:27:01,000 --> 00:27:05,000 dan saya pastikan ia wrap keliling kapasiti array, 367 00:27:05,000 --> 00:27:08,000 dan saya masukkan rentetan baru pada kedudukan itu. 368 00:27:08,000 --> 00:27:12,000 Kemudian saya meningkatkan saiz dan kembali benar. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Ini adalah pasti salah satu daripada kes-kes di mana anda akan mahu menggunakan arena. 370 00:27:22,000 --> 00:27:25,000 Mana-mana jenis kes di mana anda telah melingkari, jika anda berfikir melingkari, 371 00:27:25,000 --> 00:27:29,000 pemikiran segera harus arena. 372 00:27:29,000 --> 00:27:36,000 Sebagai pengoptimuman cepat / membuat kod anda satu baris pendek, 373 00:27:36,000 --> 00:27:42,000 anda dapati bahawa garisan sejurus selepas satu ini 374 00:27:42,000 --> 00:27:53,000 hanya saiz + +, jadi anda bergabung ke dalam barisan ini, saiz + +. 375 00:27:53,000 --> 00:27:58,000 Sekarang turun di sini, kita mempunyai kes 376 00:27:58,000 --> 00:28:01,000 di mana kita tidak mempunyai memori yang cukup, 377 00:28:01,000 --> 00:28:05,000 jadi kita meningkatkan kapasiti kami dengan 2. 378 00:28:05,000 --> 00:28:09,000 Saya rasa anda boleh mempunyai masalah yang sama di sini, tetapi kita boleh mengabaikan ia kini, 379 00:28:09,000 --> 00:28:13,000 di mana jika anda gagal untuk meningkatkan keupayaan anda, 380 00:28:13,000 --> 00:28:18,000 maka anda akan mahu untuk mengurangkan keupayaan anda dengan 2 lagi. 381 00:28:18,000 --> 00:28:24,000 Satu lagi nota ringkas adalah seperti yang anda boleh lakukan + =, 382 00:28:24,000 --> 00:28:30,000 anda juga boleh melakukan << =. 383 00:28:30,000 --> 00:28:43,000 Hampir apa sahaja boleh pergi sebelum sama, + =, | = & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * baru blok baru kami ingatan. 385 00:28:52,000 --> 00:28:55,000 Oh, di sini. 386 00:28:55,000 --> 00:29:02,000 >> Apa yang orang berfikir tentang jenis blok baru kami ingatan? 387 00:29:02,000 --> 00:29:06,000 [Pelajar] Ia harus ** char. 388 00:29:06,000 --> 00:29:12,000 Memikirkan kembali struct kami di sini, 389 00:29:12,000 --> 00:29:14,000 rentetan adalah apa yang kita pembahagian semula. 390 00:29:14,000 --> 00:29:21,000 Kami membuat keseluruhan penyimpanan dinamik baru bagi unsur-unsur dalam barisan. 391 00:29:21,000 --> 00:29:25,000 Apa yang kita akan akan memberikan kepada rentetan anda adalah apa yang kita sedang mallocing sekarang, 392 00:29:25,000 --> 00:29:30,000 dan sebagainya yang baru akan menjadi ** char. 393 00:29:30,000 --> 00:29:34,000 Ia akan menjadi pelbagai rentetan. 394 00:29:34,000 --> 00:29:38,000 Maka apakah kes di bawah mana kita pergi untuk kembali palsu? 395 00:29:38,000 --> 00:29:41,000 [Pelajar] Sekiranya kita melakukan * char? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Ya, panggilan yang baik. 397 00:29:44,000 --> 00:29:46,000 [Pelajar] Apa itu? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Kami ingin melakukan saiz * char kerana kita tidak lagi 399 00:29:49,000 --> 00:29:53,000 ini sebenarnya akan menjadi masalah yang sangat besar kerana sizeof (char) akan menjadi 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof * char akan menjadi 4, 401 00:29:55,000 --> 00:29:58,000 jadi banyak kali apabila anda berurusan dengan ints, 402 00:29:58,000 --> 00:30:01,000 anda cenderung untuk lari dengan ia kerana saiz int dan saiz * int 403 00:30:01,000 --> 00:30:04,000 pada sistem 32-bit akan menjadi perkara yang sama. 404 00:30:04,000 --> 00:30:09,000 Tetapi di sini, sizeof (char) dan sizeof (char *) kini akan menjadi perkara yang sama. 405 00:30:09,000 --> 00:30:15,000 >> Apakah keadaan di mana kita kembali palsu? 406 00:30:15,000 --> 00:30:17,000 [Pelajar] New adalah batal. 407 00:30:17,000 --> 00:30:23,000 Ya, jika baru adalah batal, kita kembali palsu, 408 00:30:23,000 --> 00:30:34,000 dan saya akan menjatuhkan sini- 409 00:30:34,000 --> 00:30:37,000 [Pelajar] [didengar] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Yeah, ini adalah baik. 411 00:30:39,000 --> 00:30:46,000 Anda boleh sama ada melakukan 2 kali kapasiti atau anjakan kapasiti 1 dan kemudian hanya menetapkan ke bawah sini atau apa sahaja. 412 00:30:46,000 --> 00:30:52,000 Kami akan melakukannya kerana kita terpaksa. 413 00:30:52,000 --> 00:30:56,000 Kapasiti >> = 1. 414 00:30:56,000 --> 00:31:08,000 Dan anda tidak akan perlu bimbang tentang kehilangan tempat 1 415 00:31:08,000 --> 00:31:12,000 kerana anda meninggalkan beralih sebanyak 1, jadi tempat 1 semestinya 0 a, 416 00:31:12,000 --> 00:31:16,000 begitu tepat peralihan sebanyak 1, anda masih akan menjadi halus. 417 00:31:16,000 --> 00:31:19,000 [Pelajar] Adakah anda memerlukan untuk berbuat demikian sebelum kembali? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Ya, ini menjadikan benar-benar tidak masuk akal. 419 00:31:29,000 --> 00:31:36,000 >> Sekarang andaikan kita akan akhirnya kembali benar hingga akhir. 420 00:31:36,000 --> 00:31:39,000 Cara kita pergi untuk melakukan ini memmoves, 421 00:31:39,000 --> 00:31:45,000 kita perlu berhati-hati dengan bagaimana kita melakukannya. 422 00:31:45,000 --> 00:31:50,000 Adakah sesiapa yang mempunyai apa-apa cadangan untuk bagaimana kita melakukannya? 423 00:32:17,000 --> 00:32:21,000 Berikut adalah permulaan kami. 424 00:32:21,000 --> 00:32:28,000 Tidak dapat tidak, kita mahu untuk memulakan pada awal lagi 425 00:32:28,000 --> 00:32:35,000 perkara salinan dan dari sana, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Bagaimana anda berbuat demikian? 427 00:32:41,000 --> 00:32:52,000 Pertama, saya perlu untuk melihat halaman lelaki untuk memmove lagi. 428 00:32:52,000 --> 00:32:57,000 Memmove, perintah hujah adalah sentiasa penting. 429 00:32:57,000 --> 00:33:01,000 Kami mahu destinasi pertama kami, sumber kedua, ketiga saiz. 430 00:33:01,000 --> 00:33:06,000 Terdapat banyak fungsi yang membalikkan sumber dan destinasi. 431 00:33:06,000 --> 00:33:11,000 Destinasi, sumber cenderung untuk menjadi konsisten agak. 432 00:33:17,000 --> 00:33:21,000 Pindah, apa yang ia kembali? 433 00:33:21,000 --> 00:33:27,000 Ia mengembalikan penunjuk ke destinasi, untuk apa-apa sebab anda mungkin mahu bahawa. 434 00:33:27,000 --> 00:33:32,000 Gambar saya boleh membaca, tetapi kita mahu bergerak ke destinasi kami. 435 00:33:32,000 --> 00:33:35,000 >> Apa destinasi kami akan? 436 00:33:35,000 --> 00:33:37,000 [Pelajar] Baru. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Ya, dan di mana kita menyalin dari? 438 00:33:39,000 --> 00:33:43,000 Perkara pertama yang kita akan menyalin ini 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Apakah ini 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Apakah alamat ini 1? 441 00:33:55,000 --> 00:33:58,000 Apakah alamat bahawa 1? 442 00:33:58,000 --> 00:34:01,000 [Pelajar] [didengar] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Head + alamat elemen pertama. 444 00:34:03,000 --> 00:34:05,000 Bagaimana kita mendapatkan elemen pertama dalam array? 445 00:34:05,000 --> 00:34:10,000 [Pelajar] Queue. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Ya, q.strings. 447 00:34:15,000 --> 00:34:20,000 Ingat, di sini, kepala kita ialah 1. 448 00:34:20,000 --> 00:34:24,000 Darn. Saya hanya fikir ia adalah ajaib- 449 00:34:24,000 --> 00:34:29,000 Di sini, kepala kita ialah 1. Saya akan menukar warna saya terlalu. 450 00:34:29,000 --> 00:34:36,000 Dan di sini adalah rentetan. 451 00:34:36,000 --> 00:34:41,000 Ini, sama ada kita boleh menulis seperti yang kita lakukan di sini 452 00:34:41,000 --> 00:34:43,000 dengan kepala + q.strings. 453 00:34:43,000 --> 00:34:51,000 Ramai orang juga menulis & q.strings [kepala]. 454 00:34:51,000 --> 00:34:55,000 Ini tidak benar-benar apa-apa kurang cekap. 455 00:34:55,000 --> 00:34:58,000 Anda mungkin memikirkan ia sebagai anda dereferencing dan kemudian mendapatkan alamat, 456 00:34:58,000 --> 00:35:04,000 tetapi pengkompil akan menterjemahkan apa yang kita lalui sebelum anyway, q.strings + kepala. 457 00:35:04,000 --> 00:35:06,000 Sama ada cara yang anda mahu berfikir ia. 458 00:35:06,000 --> 00:35:11,000 >> Dan berapa banyak bait yang kita mahu untuk menyalin? 459 00:35:11,000 --> 00:35:15,000 [Pelajar] Kapasiti - kepala. 460 00:35:15,000 --> 00:35:18,000 Kapasiti - kepala. 461 00:35:18,000 --> 00:35:21,000 Dan kemudian anda sentiasa boleh menulis contoh 462 00:35:21,000 --> 00:35:23,000 untuk memikirkan jika itu betul. 463 00:35:23,000 --> 00:35:26,000 [Pelajar] Ia perlu dibahagikan oleh 2 kemudian. 464 00:35:26,000 --> 00:35:30,000 Ya, jadi saya rasa kita boleh menggunakan saiz. 465 00:35:30,000 --> 00:35:35,000 Kita masih mempunyai saiz- 466 00:35:35,000 --> 00:35:39,000 menggunakan saiz, kita mempunyai saiz yang sama dengan 4. 467 00:35:39,000 --> 00:35:42,000 Saiz kami adalah 4. Kepala kita ialah 1. 468 00:35:42,000 --> 00:35:46,000 Kami mahu menyalin 3 elemen ini. 469 00:35:46,000 --> 00:35:54,000 Itulah kewarasan cek saiz yang - kepala betul 3. 470 00:35:54,000 --> 00:35:58,000 Dan kembali di sini, seperti yang kita katakan sebelum ini, 471 00:35:58,000 --> 00:36:00,000 jika kita menggunakan kapasiti, maka kita akan perlu untuk membahagikan dengan 2 472 00:36:00,000 --> 00:36:04,000 kerana kita sudah berkembang keupayaan kita, begitu sebaliknya, kita akan menggunakan saiz. 473 00:36:11,000 --> 00:36:13,000 Bahawa salinan bahagian itu. 474 00:36:13,000 --> 00:36:18,000 Sekarang, kita perlu menyalin bahagian lain, bahagian yang ditinggalkan permulaan. 475 00:36:18,000 --> 00:36:28,000 >> Itu akan untuk memmove ke apa kedudukan? 476 00:36:28,000 --> 00:36:32,000 [Pelajar] Plus saiz - kepala. 477 00:36:32,000 --> 00:36:38,000 Ya, jadi kami telah disalin dalam saiz - bait kepala, 478 00:36:38,000 --> 00:36:43,000 dan sebagainya di mana kita mahu menyalin bait selebihnya baru 479 00:36:43,000 --> 00:36:48,000 dan kemudian tolak saiz-baik, bilangan bait kita sudah disalin masuk 480 00:36:48,000 --> 00:36:52,000 Dan kemudian di mana kita menyalin dari? 481 00:36:52,000 --> 00:36:54,000 [Pelajar] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Ya, q.strings. 483 00:36:56,000 --> 00:37:02,000 Kita boleh sama ada melakukan & q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Ini adalah ketara kurang biasa daripada ini. 485 00:37:05,000 --> 00:37:14,000 Jika ia hanya akan menjadi 0, maka anda akan cenderung untuk melihat q.strings. 486 00:37:14,000 --> 00:37:16,000 Itulah di mana kita sedang menyalin dari. 487 00:37:16,000 --> 00:37:18,000 Berapa banyak bait yang kita telah meninggalkan untuk menyalin? >> [Pelajar] 10. 488 00:37:18,000 --> 00:37:20,000 Betul. 489 00:37:20,000 --> 00:37:25,000 [Pelajar] Adakah kita perlu untuk membiak 5 - 10 kali saiz bait atau sesuatu? 490 00:37:25,000 --> 00:37:30,000 Ya, jadi ini adalah di mana-apa sebenarnya kita menyalin? 491 00:37:30,000 --> 00:37:32,000 [Pelajar] [didengar] 492 00:37:32,000 --> 00:37:34,000 Apakah jenis perkara yang kita menyalin? 493 00:37:34,000 --> 00:37:36,000 [Pelajar] [didengar] 494 00:37:36,000 --> 00:37:41,000 Ya, jadi char * s yang kita menyalin, kita tidak tahu di mana mereka datang dari. 495 00:37:41,000 --> 00:37:47,000 Nah, di mana mereka sedang menunjuk ke, seperti tali, kita akhirnya menolak ke barisan 496 00:37:47,000 --> 00:37:49,000 atau enqueuing ke barisan. 497 00:37:49,000 --> 00:37:51,000 Di mana mereka datang dari, kita tidak mempunyai idea. 498 00:37:51,000 --> 00:37:56,000 Kita hanya perlu menjejaki * s char sendiri. 499 00:37:56,000 --> 00:38:00,000 Kita tidak mahu untuk menyalin saiz - bait kepala. 500 00:38:00,000 --> 00:38:03,000 Kami mahu menyalin saiz - kepala char * s, 501 00:38:03,000 --> 00:38:11,000 jadi kita akan membiak ini oleh sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Sama ke sini, ketua * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Pelajar] Bagaimana pula [didengar]? 504 00:38:24,000 --> 00:38:26,000 Hak ini di sini? 505 00:38:26,000 --> 00:38:28,000 [Pelajar] Tidak, di bawah itu, saiz - kepala. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Ini hak di sini? 507 00:38:30,000 --> 00:38:32,000 Aritmetik pointer. 508 00:38:32,000 --> 00:38:35,000 Bagaimana aritmetik penunjuk akan bekerja adalah 509 00:38:35,000 --> 00:38:40,000 ia secara automatik mendarab oleh saiz jenis yang kita sedang berurusan dengan. 510 00:38:40,000 --> 00:38:46,000 Sama seperti di sini, baru + (saiz kepala) 511 00:38:46,000 --> 00:38:56,000 adalah betul-betul bersamaan dengan & baru [saiz - kepala] 512 00:38:56,000 --> 00:39:00,000 sehingga kita menjangkakan bahawa untuk bekerja dengan betul, 513 00:39:00,000 --> 00:39:04,000 kerana jika kita sedang berurusan dengan pelbagai int, maka kita tidak melakukan indeks oleh int 514 00:39:04,000 --> 00:39:07,000 atau jika ia adalah saiz 5 dan anda mahu elemen 4, maka kita indeks ke 515 00:39:07,000 --> 00:39:10,000 int array [4]. 516 00:39:10,000 --> 00:39:14,000 Anda Don 't-[4] * saiz int. 517 00:39:14,000 --> 00:39:21,000 Yang mengendalikan ia secara automatik, dan kes ini 518 00:39:21,000 --> 00:39:29,000 adalah benar-benar bersamaan, jadi sintaks kurungan 519 00:39:29,000 --> 00:39:34,000 hanya akan ditukar kepada ini secepat anda menyusun. 520 00:39:34,000 --> 00:39:38,000 Itu adalah sesuatu yang anda perlu berhati-hati bahawa 521 00:39:38,000 --> 00:39:42,000 apabila anda menambah saiz - kepala 522 00:39:42,000 --> 00:39:45,000 anda menambah tidak satu bait. 523 00:39:45,000 --> 00:39:53,000 Anda menambah satu char *, yang boleh menjadi salah satu bait atau apa sahaja. 524 00:39:53,000 --> 00:39:56,000 >> Soalan-soalan lain? 525 00:39:56,000 --> 00:40:04,000 Okay, dequeue akan menjadi lebih mudah. 526 00:40:04,000 --> 00:40:11,000 Saya akan memberikan anda beberapa minit untuk melaksanakan. 527 00:40:11,000 --> 00:40:18,000 Oh, dan saya rasa ini adalah situasi yang sama di mana 528 00:40:18,000 --> 00:40:21,000 apa kes enqueue, jika kita sedang enqueuing null, 529 00:40:21,000 --> 00:40:24,000 mungkin kita mahu menghadapinya, mungkin kita tidak lakukan. 530 00:40:24,000 --> 00:40:27,000 Kami tidak akan melakukannya sekali lagi di sini, tetapi sama seperti kes timbunan kami. 531 00:40:27,000 --> 00:40:34,000 Jika kita enqueue null, kita mungkin mahu untuk mengabaikan ia. 532 00:40:34,000 --> 00:40:40,000 Sesiapa yang mempunyai beberapa kod saya boleh tarik sehingga? 533 00:40:40,000 --> 00:40:45,000 [Pelajar] Saya hanya mempunyai dequeue. 534 00:40:45,000 --> 00:40:56,000 Versi 2 adalah bahawa-okay. 535 00:40:56,000 --> 00:40:59,000 Anda ingin menjelaskan? 536 00:40:59,000 --> 00:41:01,000 [Pelajar] Pertama, anda pastikan ada sesuatu dalam barisan 537 00:41:01,000 --> 00:41:07,000 dan bahawa saiz akan diturunkan 1. 538 00:41:07,000 --> 00:41:11,000 Anda perlu untuk berbuat demikian, dan kemudian anda kembali kepala 539 00:41:11,000 --> 00:41:13,000 dan kemudian bergerak kepala sehingga 1. 540 00:41:13,000 --> 00:41:19,000 Okay, jadi terdapat kes sudut yang kita perlu pertimbangkan. Yeah. 541 00:41:19,000 --> 00:41:24,000 [Pelajar] Jika kepala anda adalah pada elemen terakhir, 542 00:41:24,000 --> 00:41:26,000 maka anda tidak mahu kepala untuk menunjukkan luar array. 543 00:41:26,000 --> 00:41:29,000 >> Ya, jadi dengan seberapa segera sebagai ketua hits akhir pelbagai kami, 544 00:41:29,000 --> 00:41:35,000 apabila kita dequeue, kepala kita harus modded kembali kepada 0. 545 00:41:35,000 --> 00:41:40,000 Malangnya, kita tidak boleh berbuat demikian dalam satu langkah. 546 00:41:40,000 --> 00:41:44,000 Saya rasa cara saya mungkin akan menetapkan ia adalah 547 00:41:44,000 --> 00:41:52,000 ini akan menjadi * char, apa yang kita kembali, 548 00:41:52,000 --> 00:41:55,000 apa jua nama pembolehubah anda mahu menjadi. 549 00:41:55,000 --> 00:42:02,000 Kemudian kita mahu MOD ketua oleh keupayaan kita 550 00:42:02,000 --> 00:42:10,000 dan kemudian kembali ret. 551 00:42:10,000 --> 00:42:14,000 Ramai orang di sini, mereka mungkin melakukan 552 00:42:14,000 --> 00:42:19,000 ini adalah kes, karena melihat orang lakukan jika kepala 553 00:42:19,000 --> 00:42:29,000 adalah lebih besar daripada kapasiti, adakah kepala kapasiti. 554 00:42:29,000 --> 00:42:36,000 Dan itu hanya bekerja di sekitar apa arena. 555 00:42:36,000 --> 00:42:41,000 Ketua arena = kapasiti lebih bersih 556 00:42:41,000 --> 00:42:51,000 pembalut sekitar berbanding jika kepala yang lebih besar daripada kepala kapasiti kapasiti. 557 00:42:51,000 --> 00:42:56,000 >> Soalan? 558 00:42:56,000 --> 00:43:02,000 Okay, perkara terakhir yang kita telah meninggalkan adalah senarai berpaut kami. 559 00:43:02,000 --> 00:43:07,000 Anda mungkin digunakan untuk beberapa senarai tingkah laku yang dikaitkan jika anda lakukan 560 00:43:07,000 --> 00:43:11,000 mengaitkan senarai dalam jadual hash anda, jika anda lakukan jadual hash. 561 00:43:11,000 --> 00:43:15,000 Saya amat mengesyorkan melakukan jadual hash. 562 00:43:15,000 --> 00:43:17,000 Anda mungkin telah dilakukan sebuah indone, 563 00:43:17,000 --> 00:43:23,000 tetapi cuba adalah lebih sukar. 564 00:43:23,000 --> 00:43:27,000 Secara teori, mereka berasimptot lebih baik. 565 00:43:27,000 --> 00:43:30,000 Tetapi hanya melihat lembaga besar, 566 00:43:30,000 --> 00:43:35,000 dan cuba tidak pernah melakukan yang lebih baik, dan mereka mengambil lebih banyak memori. 567 00:43:35,000 --> 00:43:43,000 Segala-galanya tentang cuba berakhir menjadi buruk bagi kerja lebih. 568 00:43:43,000 --> 00:43:49,000 Ia adalah apa penyelesaian David Malan sentiasa 569 00:43:49,000 --> 00:43:56,000 adalah dia sentiasa posts penyelesaian indone beliau, dan mari kita lihat di mana beliau kini. 570 00:43:56,000 --> 00:44:00,000 Apa yang dia di bawah, David J? 571 00:44:00,000 --> 00:44:06,000 Dia # 18, supaya tidak terlalu buruk, 572 00:44:06,000 --> 00:44:09,000 dan yang akan menjadi salah satu yang terbaik cuba anda boleh berfikir 573 00:44:09,000 --> 00:44:17,000 atau salah satu yang terbaik cuba indone satu. 574 00:44:17,000 --> 00:44:23,000 Adakah ia tidak walaupun penyelesaian asal beliau? 575 00:44:23,000 --> 00:44:29,000 Saya berasa seperti penyelesaian indone cenderung untuk menjadi lebih dalam julat ini penggunaan RAM. 576 00:44:29,000 --> 00:44:33,000 >> Pergi ke atas sangat, dan penggunaan RAM adalah dalam digit tunggal. 577 00:44:33,000 --> 00:44:36,000 Pergi ke arah bawah, dan kemudian anda mula melihat cuba 578 00:44:36,000 --> 00:44:41,000 di mana anda akan mendapat penggunaan RAM yang benar-benar besar-besaran, 579 00:44:41,000 --> 00:44:45,000 dan cuba adalah lebih sukar. 580 00:44:45,000 --> 00:44:53,000 Tidak sepenuhnya berbaloi tetapi pengalaman pendidikan jika anda lakukan. 581 00:44:53,000 --> 00:44:56,000 Perkara terakhir adalah senarai berkaitan kami, 582 00:44:56,000 --> 00:45:04,000 dan ketiga-tiga perkara, susunan, beratur, dan senarai yang berkaitan, 583 00:45:04,000 --> 00:45:09,000 apa-apa benda masa depan anda pernah lakukan dalam bidang sains komputer 584 00:45:09,000 --> 00:45:12,000 akan menganggap anda mempunyai kebiasaan dengan perkara-perkara ini. 585 00:45:12,000 --> 00:45:19,000 Mereka hanya begitu asas kepada segala-galanya. 586 00:45:19,000 --> 00:45:25,000 >> Berkaitan senarai, dan di sini kita mempunyai senarai yang dikaitkan secara tunggal akan menjadi pelaksanaan kami. 587 00:45:25,000 --> 00:45:34,000 Apa tidak berseorangan dikaitkan bermakna berbanding duanya adalah terpakai dikaitkan? Ya. 588 00:45:34,000 --> 00:45:37,000 [Pelajar] Ia hanya menunjukkan penunjuk seterusnya bukannya kepada petunjuk, 589 00:45:37,000 --> 00:45:39,000 seperti sebelum dan selepas. 590 00:45:39,000 --> 00:45:44,000 Yeah, jadi dalam format gambar, apa yang tidak saya hanya melakukan? 591 00:45:44,000 --> 00:45:48,000 Saya mempunyai dua perkara. Saya mempunyai gambar dan gambar. 592 00:45:48,000 --> 00:45:51,000 Dalam format gambar, secara tunggal kami dikaitkan senarai, 593 00:45:51,000 --> 00:45:57,000 tidak dapat dielakkan, kami mempunyai beberapa jenis penunjuk kepada kepala senarai kami, 594 00:45:57,000 --> 00:46:02,000 dan kemudian dalam senarai kami, kami hanya mempunyai petunjuk, 595 00:46:02,000 --> 00:46:05,000 dan mungkin ini mata untuk menyeimbangkan. 596 00:46:05,000 --> 00:46:08,000 Ia akan menjadi lukisan biasa anda senarai dikaitkan secara tunggal. 597 00:46:08,000 --> 00:46:14,000 Satu senarai duanya adalah terpakai dikaitkan, anda boleh pergi ke belakang. 598 00:46:14,000 --> 00:46:19,000 Jika saya memberikan anda sebarang nod dalam senarai, maka anda semestinya boleh mendapatkan untuk 599 00:46:19,000 --> 00:46:23,000 mana-mana nod lain dalam senarai jika ia adalah senarai duanya adalah terpakai dikaitkan. 600 00:46:23,000 --> 00:46:27,000 Tetapi jika saya mendapat anda nod ketiga dalam senarai dan ia adalah senarai berseorangan dikaitkan, 601 00:46:27,000 --> 00:46:30,000 ada cara anda pernah akan sampai kepada nod pertama dan kedua. 602 00:46:30,000 --> 00:46:34,000 Dan ada manfaat dan Bahaya, dan seseorang individu yang jelas 603 00:46:34,000 --> 00:46:42,000 anda mengambil lebih saiz, dan anda perlu untuk menjejaki di mana perkara-perkara ini menunjuk sekarang. 604 00:46:42,000 --> 00:46:49,000 Tetapi kita hanya mengambil berat tentang berseorangan dikaitkan. 605 00:46:49,000 --> 00:46:53,000 >> Beberapa perkara yang kita akan perlu untuk melaksanakan. 606 00:46:53,000 --> 00:47:00,000 Struct nod typedef anda, int i: struct nod * seterusnya; nod. 607 00:47:00,000 --> 00:47:09,000 Itu typedef harus dibakar ke dalam minda anda. 608 00:47:09,000 --> 00:47:14,000 Kuiz 1 harus suka memberi typedef nod senarai yang dikaitkan, 609 00:47:14,000 --> 00:47:18,000 dan anda akan dapat dengan segera tulisan oragn ayam yang turun 610 00:47:18,000 --> 00:47:22,000 tanpa memikirkan ia. 611 00:47:22,000 --> 00:47:27,000 Saya rasa soalan pasangan, mengapa kita perlu struct sini? 612 00:47:27,000 --> 00:47:32,000 Mengapa tidak boleh kita katakan * nod? 613 00:47:32,000 --> 00:47:35,000 [Pelajar] [didengar] 614 00:47:35,000 --> 00:47:38,000 Yeah. 615 00:47:38,000 --> 00:47:44,000 Satunya perkara yang mentakrifkan nod sebagai perkara 616 00:47:44,000 --> 00:47:47,000 typedef sendiri. 617 00:47:47,000 --> 00:47:55,000 Tetapi seperti titik ini, apabila kita jenis menghuraikan melalui struct nod ini definisi, 618 00:47:55,000 --> 00:48:01,000 kita belum selesai typedef kami lagi, jadi sejak typedef belum selesai, 619 00:48:01,000 --> 00:48:05,000 nod tidak wujud. 620 00:48:05,000 --> 00:48:12,000 Tetapi struct nod tidak, dan nod ini di sini, 621 00:48:12,000 --> 00:48:14,000 ini juga boleh dipanggil apa-apa lagi. 622 00:48:14,000 --> 00:48:16,000 Ini boleh dipanggil n. 623 00:48:16,000 --> 00:48:19,000 Ia boleh dipanggil nod senarai berpaut. 624 00:48:19,000 --> 00:48:21,000 Ia boleh dipanggil apa-apa. 625 00:48:21,000 --> 00:48:26,000 Tetapi ini struct nod perlu dipanggil perkara yang sama sebagai nod struct ini. 626 00:48:26,000 --> 00:48:29,000 Apa yang anda panggil ini juga berada di sini, 627 00:48:29,000 --> 00:48:32,000 dan sebagainya yang juga menjawab titik kedua soalan 628 00:48:32,000 --> 00:48:37,000 itulah sebabnya banyak kali apabila anda melihat structs dan typedefs daripada structs, 629 00:48:37,000 --> 00:48:42,000 anda akan melihat structs tanpa nama di mana anda hanya akan melihat struct typedef, 630 00:48:42,000 --> 00:48:47,000 pelaksanaan struct, kamus, atau apa sahaja. 631 00:48:47,000 --> 00:48:51,000 >> Mengapa di sini adakah kita perlu untuk mengatakan nod? 632 00:48:51,000 --> 00:48:54,000 Mengapa ia tidak boleh menjadi struct tanpa nama? 633 00:48:54,000 --> 00:48:56,000 Ia hampir jawapan yang sama. 634 00:48:56,000 --> 00:48:58,000 [Pelajar] Anda perlu merujuk kepadanya dalam struct. 635 00:48:58,000 --> 00:49:04,000 Ya, dalam struct, anda perlu merujuk kepada struct itu sendiri. 636 00:49:04,000 --> 00:49:10,000 Jika anda tidak memberi struct nama, jika ia adalah satu struct tanpa nama, anda tidak boleh merujuk kepadanya. 637 00:49:10,000 --> 00:49:17,000 Dan lepas tetapi tidak kurangnya ini semua harus agak mudah, 638 00:49:17,000 --> 00:49:20,000 dan mereka harus membantu anda merealisasikan jika anda menulis ini turun 639 00:49:20,000 --> 00:49:24,000 bahawa anda sedang melakukan sesuatu yang salah jika ini pelbagai perkara yang tidak masuk akal. 640 00:49:24,000 --> 00:49:28,000 Lepas tetapi tidak kurangnya, mengapa ini perlu menjadi * struct nod? 641 00:49:28,000 --> 00:49:34,000 Mengapa ia tidak boleh hanya struct nod seterusnya? 642 00:49:34,000 --> 00:49:37,000 [Pelajar] pointer struct seterusnya. 643 00:49:37,000 --> 00:49:39,000 Itu tidak dapat dielakkan apa yang kita mahu. 644 00:49:39,000 --> 00:49:42,000 Mengapa boleh ia tidak pernah menjadi nod struct seterusnya? 645 00:49:42,000 --> 00:49:50,000 Mengapa ia perlu struct nod * seterusnya? Yeah. 646 00:49:50,000 --> 00:49:53,000 [Pelajar] Ia seperti gelung tak terhingga. 647 00:49:53,000 --> 00:49:55,000 Yeah. 648 00:49:55,000 --> 00:49:57,000 [Pelajar] Ia semua akan berada dalam salah satu. 649 00:49:57,000 --> 00:50:02,000 Ya, hanya berfikir bagaimana kita akan melakukan saiz atau sesuatu. 650 00:50:02,000 --> 00:50:08,000 Saiz struct satu adalah pada dasarnya + atau - beberapa corak di sini atau di sana. 651 00:50:08,000 --> 00:50:15,000 Ia pada dasarnya akan menjadi jumlah saiz perkara dalam struct. 652 00:50:15,000 --> 00:50:18,000 Hak ini di sini, tanpa mengubah apa-apa, saiz akan menjadi mudah. 653 00:50:18,000 --> 00:50:24,000 Saiz nod struct akan menjadi saiz i saiz + seterusnya. 654 00:50:24,000 --> 00:50:27,000 Saiz i akan menjadi 4. Saiz depan akan menjadi 4. 655 00:50:27,000 --> 00:50:30,000 Saiz nod struct akan menjadi 8. 656 00:50:30,000 --> 00:50:34,000 Jika kita tidak mempunyai *, memikirkan sizeof, 657 00:50:34,000 --> 00:50:37,000 maka sizeof (i) akan menjadi 4. 658 00:50:37,000 --> 00:50:43,000 Saiz nod struct seterusnya akan menjadi saiz i saiz + nod struct depan 659 00:50:43,000 --> 00:50:46,000 Saiz + i + saiz nod struct depan. 660 00:50:46,000 --> 00:50:55,000 Ia akan menjadi satu rekursi terhingga nod. 661 00:50:55,000 --> 00:51:00,000 Ini adalah mengapa ini adalah bagaimana perkara perlu. 662 00:51:00,000 --> 00:51:03,000 >> Sekali lagi, pasti menghafal itu, 663 00:51:03,000 --> 00:51:06,000 atau sekurang-kurangnya memahami ia cukup bahawa anda boleh dapat 664 00:51:06,000 --> 00:51:12,000 sebab melalui apa yang ia harus kelihatan seperti. 665 00:51:12,000 --> 00:51:14,000 Perkara-perkara yang kita akan mahu untuk melaksanakan. 666 00:51:14,000 --> 00:51:18,000 Jika panjang senarai- 667 00:51:18,000 --> 00:51:21,000 anda boleh menipu dan menyimpan sekitar 668 00:51:21,000 --> 00:51:24,000 panjang global atau sesuatu, tetapi kita tidak akan berbuat demikian. 669 00:51:24,000 --> 00:51:28,000 Kami akan mengira panjang senarai. 670 00:51:28,000 --> 00:51:34,000 Kami telah mengandungi, jadi yang pada asasnya seperti carian, 671 00:51:34,000 --> 00:51:41,000 jadi kita mempunyai senarai yang dikaitkan integer untuk melihat jika integer ini adalah dalam senarai berkaitan. 672 00:51:41,000 --> 00:51:44,000 Prepend akan untuk memasukkan di awal senarai. 673 00:51:44,000 --> 00:51:46,000 Lampiran akan untuk memasukkan pada akhir. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted akan masukkan ke dalam kedudukan yang diisih dalam senarai. 675 00:51:53,000 --> 00:52:01,000 Jenis Insert_sorted mengandaikan bahawa anda tidak pernah digunakan Prepend atau melampirkan dengan cara yang buruk. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted apabila anda melaksanakan insert_sorted- 677 00:52:09,000 --> 00:52:13,000 mari kita mengatakan bahawa kita mempunyai senarai kami dikaitkan. 678 00:52:13,000 --> 00:52:18,000 Ini adalah apa yang ia kini kelihatan seperti, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Saya mahu untuk memasukkan 3, jadi selagi senarai itu sendiri sudah disusun, 680 00:52:24,000 --> 00:52:27,000 ia adalah mudah untuk mencari di mana 3 kepunyaan. 681 00:52:27,000 --> 00:52:29,000 Saya bermula pada 2. 682 00:52:29,000 --> 00:52:32,000 Okay, 3 adalah lebih daripada 2, jadi saya mahu terus pergi. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 adalah terlalu besar, jadi saya tahu 3 akan pergi di antara 2 dan 4, 684 00:52:35,000 --> 00:52:39,000 dan saya perlu untuk menetapkan petunjuk dan semua barangan itu. 685 00:52:39,000 --> 00:52:43,000 Tetapi jika kita tidak tegas menggunakan insert_sorted, 686 00:52:43,000 --> 00:52:50,000 suka mari kita hanya mengatakan saya Prepend 6, 687 00:52:50,000 --> 00:52:55,000 maka senarai berpaut saya akan menjadi ini. 688 00:52:55,000 --> 00:53:01,000 Ia kini tidak masuk akal, jadi untuk insert_sorted, anda hanya boleh menganggap 689 00:53:01,000 --> 00:53:04,000 bahawa senarai diisih, walaupun operasi wujud 690 00:53:04,000 --> 00:53:09,000 yang boleh menyebabkan ia tidak diselesaikan, dan itulah ia. 691 00:53:09,000 --> 00:53:20,000 Cari membantu memasukkan begitu mereka adalah perkara-perkara utama yang anda akan perlu untuk melaksanakan. 692 00:53:20,000 --> 00:53:24,000 >> Untuk sekarang, mengambil beberapa minit untuk melakukan panjang dan mengandungi, 693 00:53:24,000 --> 00:53:30,000 dan mereka harus agak cepat. 694 00:53:41,000 --> 00:53:48,000 Hampir masa tutup, jadi sesiapa yang mempunyai apa-apa untuk panjang atau mengandungi? 695 00:53:48,000 --> 00:53:50,000 Mereka akan menjadi hampir sama. 696 00:53:50,000 --> 00:53:57,000 [Pelajar] Length. 697 00:53:57,000 --> 00:54:01,000 Mari kita lihat, semakan. 698 00:54:01,000 --> 00:54:04,000 Okay. 699 00:54:12,000 --> 00:54:15,000 Anda ingin menjelaskan? 700 00:54:15,000 --> 00:54:21,000 [Pelajar] Saya hanya mewujudkan nod penunjuk dan memulakan pertama, yang merupakan pembolehubah global kami, 701 00:54:21,000 --> 00:54:27,000 dan kemudian saya memeriksa untuk melihat jika ia adalah batal jadi saya tidak mendapat suatu kesalahan seg dan kembali 0 jika itu berlaku. 702 00:54:27,000 --> 00:54:34,000 Jika tidak, saya gelung melalui, menjaga trek dalam integer 703 00:54:34,000 --> 00:54:38,000 berapa kali saya telah diakses Elemen seterusnya senarai 704 00:54:38,000 --> 00:54:43,000 dan dalam operasi kenaikan sama juga mengakses bahawa elemen sebenar, 705 00:54:43,000 --> 00:54:47,000 dan kemudian saya terus membuat cek untuk melihat jika ia adalah batal, 706 00:54:47,000 --> 00:54:56,000 dan jika ia batal, maka ia akan gagal dan hanya mengembalikan bilangan elemen yang saya telah diakses. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Adakah sesiapa yang mempunyai apa-apa komen mengenai apa-apa? 708 00:55:01,000 --> 00:55:06,000 Ini kelihatan ketepatan denda bijak. 709 00:55:06,000 --> 00:55:10,000 [Pelajar] Saya tidak fikir anda perlu nod == null. 710 00:55:10,000 --> 00:55:13,000 Ya, jadi jika nod == pulangan 0 batal. 711 00:55:13,000 --> 00:55:18,000 Tetapi jika nod == null maka ini-oh, terdapat adalah isu ketepatan. 712 00:55:18,000 --> 00:55:23,000 Ia hanya anda kembali i, tetapi ia bukan dalam skop sekarang. 713 00:55:23,000 --> 00:55:30,000 Anda hanya perlu int i, jadi i = 0. 714 00:55:30,000 --> 00:55:34,000 Tetapi jika nod adalah batal, maka saya masih akan menjadi 0, 715 00:55:34,000 --> 00:55:39,000 dan kita akan kembali 0, jadi kes ini adalah sama. 716 00:55:39,000 --> 00:55:48,000 Satu lagi perkara yang biasa adalah untuk memastikan perisytiharan itu 717 00:55:48,000 --> 00:55:51,000 dalam nod bagi gelung. 718 00:55:51,000 --> 00:55:54,000 Anda boleh mengatakan-oh, tidak. 719 00:55:54,000 --> 00:55:56,000 Mari menyimpan ia seperti ini. 720 00:55:56,000 --> 00:55:59,000 Saya mungkin akan meletakkan int i = 0 di sini, 721 00:55:59,000 --> 00:56:05,000 maka nod * nod = pertama di sini. 722 00:56:05,000 --> 00:56:11,000 Dan ini mungkin bagaimana menyingkirkan ini sekarang. 723 00:56:11,000 --> 00:56:14,000 Ini mungkin bagaimana saya akan telah menulis. 724 00:56:14,000 --> 00:56:21,000 Anda boleh juga melihat ia seperti ini. 725 00:56:21,000 --> 00:56:25,000 Ini bagi struktur gelung di sini 726 00:56:25,000 --> 00:56:30,000 harus hampir sebagai semula jadi kepada anda sebagai int i = 0 727 00:56:30,000 --> 00:56:33,000 i adalah kurang daripada panjang array i + +. 728 00:56:33,000 --> 00:56:38,000 Jika itulah bagaimana anda melelar melalui array, ini adalah bagaimana anda melelar atas senarai berkaitan. 729 00:56:38,000 --> 00:56:45,000 >> Ini harus menjadi sifat kedua pada satu ketika. 730 00:56:45,000 --> 00:56:50,000 Dengan itu dalam fikiran, ini akan menjadi hampir perkara yang sama. 731 00:56:50,000 --> 00:56:57,000 Anda akan mahu untuk melelar senarai berkaitan. 732 00:56:57,000 --> 00:57:02,000 Jika nod saya tidak mempunyai idea apa nilai dipanggil. 733 00:57:02,000 --> 00:57:04,000 Nod i. 734 00:57:04,000 --> 00:57:15,000 Jika nilai pada nod tersebut = i kembali benar, dan itu sahaja. 735 00:57:15,000 --> 00:57:18,000 Perhatikan bahawa satu-satunya cara kita pernah kembali palsu 736 00:57:18,000 --> 00:57:23,000 adalah jika kita melelar atas senarai keseluruhan dikaitkan dan tidak pernah kembali benar, 737 00:57:23,000 --> 00:57:29,000 supaya apa yang ini tidak. 738 00:57:29,000 --> 00:57:36,000 Sebagai nota sampingan kita mungkin tidak akan mendapatkan untuk menambah atau Prepend. 739 00:57:36,000 --> 00:57:39,000 >> Pantas nota terakhir. 740 00:57:39,000 --> 00:57:52,000 Jika anda melihat kata kunci statik, jadi mari kita mengatakan statik kiraan int = 0, 741 00:57:52,000 --> 00:57:56,000 maka kita lakukan kiraan + +, anda pada asasnya boleh berfikir ia sebagai pembolehubah global, 742 00:57:56,000 --> 00:58:00,000 walaupun saya hanya berkata ini bukanlah bagaimana kita akan melaksanakan panjang. 743 00:58:00,000 --> 00:58:06,000 Saya melakukan ini di sini, dan kemudian mengira + +. 744 00:58:06,000 --> 00:58:11,000 Mana-mana cara kita boleh memasuki nod ke dalam senarai berpaut kami kita incrementing kiraan kita. 745 00:58:11,000 --> 00:58:15,000 Titik ini adalah apa kata kunci statik bermakna. 746 00:58:15,000 --> 00:58:20,000 Jika saya hanya mempunyai kiraan int = 0 yang akan menjadi pembolehubah tetap global lama. 747 00:58:20,000 --> 00:58:25,000 Apa cara kiraan int statik adalah bahawa ia adalah satu pembolehubah global bagi fail ini. 748 00:58:25,000 --> 00:58:28,000 Ia adalah mustahil untuk fail lain, 749 00:58:28,000 --> 00:58:34,000 suka berfikir daripada pset 5, jika anda telah mula. 750 00:58:34,000 --> 00:58:39,000 Anda mempunyai speller.c kedua-dua, dan anda mempunyai dictionary.c, 751 00:58:39,000 --> 00:58:42,000 dan jika anda hanya mengisytiharkan perkara global, maka apa-apa dalam speller.c 752 00:58:42,000 --> 00:58:45,000 boleh diakses dalam dictionary.c dan sebaliknya. 753 00:58:45,000 --> 00:58:48,000 Pembolehubah global boleh diakses oleh mana-mana fail c, 754 00:58:48,000 --> 00:58:54,000 tetapi pembolehubah statik yang hanya boleh diakses dari dalam fail sendiri, 755 00:58:54,000 --> 00:59:01,000 jadi di dalam ejaan pemeriksa atau dalam dictionary.c, 756 00:59:01,000 --> 00:59:06,000 ini adalah jenis bagaimana saya akan mengisytiharkan pembolehubah saya untuk saiz array saya 757 00:59:06,000 --> 00:59:10,000 atau saiz bilangan perkataan dalam kamus saya. 758 00:59:10,000 --> 00:59:15,000 Kerana saya tidak mahu mengisytiharkan pembolehubah global bahawa sesiapa yang telah akses kepada, 759 00:59:15,000 --> 00:59:18,000 Saya benar-benar hanya mengambil berat tentang ia untuk tujuan saya sendiri. 760 00:59:18,000 --> 00:59:21,000 >> Perkara yang baik tentang ini juga barangan perlanggaran nama keseluruhan. 761 00:59:21,000 --> 00:59:27,000 Jika beberapa fail lain cuba untuk menggunakan pembolehubah global dipanggil kiraan, perkara pergi sangat, sangat salah, 762 00:59:27,000 --> 00:59:33,000 jadi ini baik menyimpan barang yang selamat, dan hanya anda boleh mengakses, 763 00:59:33,000 --> 00:59:38,000 dan tidak ada orang lain boleh, dan jika orang lain mengisytiharkan pembolehubah global dipanggil kiraan, 764 00:59:38,000 --> 00:59:43,000 maka ia tidak akan mengganggu dengan pembolehubah statik anda dipanggil kiraan. 765 00:59:43,000 --> 00:59:47,000 Itulah apa yang statik adalah. Ia adalah pembolehubah fail global. 766 00:59:47,000 --> 00:59:52,000 >> Soalan pada apa-apa? 767 00:59:52,000 --> 00:59:59,000 Menetapkan semua. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]