1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [음악 연주] 3 00:00:11,137 --> 00:00:12,220 데이비드 J. 마란 : 좋습니다. 4 00:00:12,220 --> 00:00:13,950 이 CS50이다. 5 00:00:13,950 --> 00:00:18,560 이 주 오 계속, 그리고 우리 좋은 소식과 나쁜 소식이있다. 6 00:00:18,560 --> 00:00:21,140 그래서 좋은 소식은 CS50입니다 이 금요일 시작합니다. 7 00:00:21,140 --> 00:00:24,430 당신이 우리와 함께하고 싶은 경우, 여기에 일반적인 URL로 향한다. 8 00:00:24,430 --> 00:00:28,670 더 나은 뉴스, 어떤 강의가 없습니다 이는 13 일 월요일오고. 9 00:00:28,670 --> 00:00:31,970 약간 덜 더 나은 뉴스, 퀴즈 제로는 다음주 수요일입니다. 10 00:00:31,970 --> 00:00:33,840 추가 사항이 될 수 있습니다 여기에이 URL에서 발견했다. 11 00:00:33,840 --> 00:00:36,340 그리고 다음 몇 일 동안 우리는 빈칸을 채우는거야 12 00:00:36,340 --> 00:00:39,234 객실에 관해서 우리가 예약 한 것이다. 13 00:00:39,234 --> 00:00:41,400 더 좋은 소식이있을 것이 오 물론 전체를 검토 할 수 14 00:00:41,400 --> 00:00:43,570 세션은 오는 저녁에 월요일. 15 00:00:43,570 --> 00:00:46,270 과정의에 계속 지켜봐 주시기 바랍니다 위치 및 자세한 내용은 웹 사이트. 16 00:00:46,270 --> 00:00:49,290 그것은을하더라도 섹션 휴일, 또한뿐만 아니라 만날 것입니다. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 최고의 소식은 다음주 금요일 강의. 19 00:00:52,940 --> 00:00:56,220 그래서이 전통 우리는 강의 계획서에 따라 보유하고 있습니다. 20 00:00:56,220 --> 00:00:58,100 그냥 ... 그것은 훌륭 할 것입니다. 21 00:00:58,100 --> 00:01:02,510 당신은 같은 일을 볼 수 있습니다 일정 시간의 데이터 구조 22 00:01:02,510 --> 00:01:04,730 및 해시 테이블과 나무와 시도. 23 00:01:04,730 --> 00:01:07,150 그리고 우리는 생일 문제에 대해 이야기 할 것입니다. 24 00:01:07,150 --> 00:01:09,440 물건의 전체 무리 다음주 금요일이 기다리고있다. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 확인을 클릭합니다. 27 00:01:12,200 --> 00:01:13,190 어쨌든. 28 00:01:13,190 --> 00:01:17,080 >> 그래서 우리는 봤는데 리콜 무엇이이 그림에 초점을 맞추고 29 00:01:17,080 --> 00:01:18,980 우리의 컴퓨터의 메모리 내부. 30 00:01:18,980 --> 00:01:22,875 그래서 메모리 또는 RAM 어디 프로그램입니다 당신이 그들을 실행하는 동안 존재한다. 31 00:01:22,875 --> 00:01:25,215 당신을 두 번 클릭하면 아이콘은 어떤 프로그램을 실행하려면 32 00:01:25,215 --> 00:01:27,520 또는을 두 번 클릭 일부 파일을 열려면 아이콘, 33 00:01:27,520 --> 00:01:30,430 그것은 하드에서 장전 드라이브 또는 솔리드 스테이트 드라이브 34 00:01:30,430 --> 00:01:34,190 RAM, 랜덤 액세스 메모리로 전원이 꺼질 때까지 그것은 삶 35 00:01:34,190 --> 00:01:36,700 노트북 뚜껑이 닫히고 또는 당신은 프로그램을 종료합니다. 36 00:01:36,700 --> 00:01:38,960 >> 이제 메모리의 하는 당신은 아마이 37 00:01:38,960 --> 00:01:41,950 1기가바이트 요즘,이 기가 바이트, 또는 더 많은, 38 00:01:41,950 --> 00:01:44,420 일반적으로 뻗어있다 주어진 프로그램에 대한 39 00:01:44,420 --> 00:01:47,170 직사각형의 이런 종류의 개념 모델 40 00:01:47,170 --> 00:01:50,860 우리는 맨 아래에있는 스택을 가지고있다 상단에서 다른 물건을 무리. 41 00:01:50,860 --> 00:01:53,140 매우 상단에있는 것은 우리는이 사진을 본 적이 42 00:01:53,140 --> 00:01:55,670 전에 그러나 결코에 대한 이야기 소위 텍스트 세그먼트이다. 43 00:01:55,670 --> 00:01:58,419 텍스트 세그먼트는 단지 멋진 방법입니다 0과 말의 44 00:01:58,419 --> 00:02:01,150 실제 컴파일 된 프로그램을 구성한다. 45 00:02:01,150 --> 00:02:03,910 >> 그래서 때를 두 번 클릭 Mac 또는 PC에 마이크로 소프트 워드, 46 00:02:03,910 --> 00:02:08,030 이 점을 실행할 때 나에 마리오를 슬래시 터미널 창에서 Linux 컴퓨터, 47 00:02:08,030 --> 00:02:12,460 구성하는 0과 1 Word 또는 마리오 일시적으로 저장된다 48 00:02:12,460 --> 00:02:16,610 소위에서 컴퓨터의 RAM에 특정 프로그램에 대한 텍스트 세그먼트. 49 00:02:16,610 --> 00:02:19,080 그가는 아래 초기화 초기화되지 않은 데이터입니다. 50 00:02:19,080 --> 00:02:22,655 이 전역 변수 같은 물건입니다, 우리가 많이 사용되지으니, 51 00:02:22,655 --> 00:02:24,910 하지만 경우에 우리는했습니다 전역 변수를했다 52 00:02:24,910 --> 00:02:28,819 또는 정적 문자열을 정의한 하드 "안녕하세요"와 같은 단어를 부호화 53 00:02:28,819 --> 00:02:31,860 사용자로부터 도입되지 않은 그 프로그램에 하드 코딩되어 있습니다. 54 00:02:31,860 --> 00:02:34,230 >> 이제, 아래로 아래에 우리 소위 스택을 가지고있다. 55 00:02:34,230 --> 00:02:37,665 그리고 스택은, 지금까지, 우리는 봤는데 목적의 종류에 사용? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 스택은 무엇을 사용하고있어? 58 00:02:40,997 --> 00:02:41,160 그래? 59 00:02:41,160 --> 00:02:42,070 >> 청중 : 기능. 60 00:02:42,070 --> 00:02:43,320 >> 데이비드 J. 마란 : 함수의? 61 00:02:43,320 --> 00:02:44,980 기능에 대한 어떤 의미에서? 62 00:02:44,980 --> 00:02:48,660 >> 청중 : 당신이 함수를 호출 할 때, 인수는 스택에 복사됩니다. 63 00:02:48,660 --> 00:02:49,660 >> 데이비드 J. 마란 : 그렇지. 64 00:02:49,660 --> 00:02:52,650 당신은 함수를 호출 할 때, 그것을 인수는 스택에 복사됩니다. 65 00:02:52,650 --> 00:02:56,330 그래서 어떤 X의 나 Y 나 나 B의 당신은 함수로 전달하고 있는지 66 00:02:56,330 --> 00:02:58,680 일시적으로 배치됩니다 소위 스택, 67 00:02:58,680 --> 00:03:02,000 단지 아넨 버그의 같은 식당 트레이, 또한 일 68 00:03:02,000 --> 00:03:03,190 지역 변수 등을들 수있다. 69 00:03:03,190 --> 00:03:06,290 만약 당신의 foo는 함수 또는 스왑 함수는 지역 변수를 가지고, 70 00:03:06,290 --> 00:03:08,602 온도와 같은, 두 스택에 끝낸다. 71 00:03:08,602 --> 00:03:11,560 이제, 우리는에 대해 말을 너무 많이하지 않습니다 그들,하지만 이러한 환경 변수 72 00:03:11,560 --> 00:03:15,690 하단에 우리는 얼마 전에 때 보았다 나는 키보드 일일에서 작업을했으며 73 00:03:15,690 --> 00:03:20,050 나는 일을 액세스 시작 변수는 argv 100 argv에 1000 등, 74 00:03:20,050 --> 00:03:22,320 단지 elements-- 잊지 숫자들하지만 75 00:03:22,320 --> 00:03:24,330 나에 액세스 할 예정되지 않았다. 76 00:03:24,330 --> 00:03:26,581 우리는 몇 가지를보기 시작 화면에 펑키 기호입니다. 77 00:03:26,581 --> 00:03:28,330 사람들은 소위이었다 환경 변수 78 00:03:28,330 --> 00:03:32,390 글로벌 설정과 같은 내 프로그램이나 컴퓨터,하지 않는 79 00:03:32,390 --> 00:03:37,090 최근 관련이없는 우리가 논의 버그, 80 00:03:37,090 --> 00:03:39,670 Shellshock, 그되었습니다 대부분의 컴퓨터를 괴롭 히고. 81 00:03:39,670 --> 00:03:42,960 >> 이제 마지막으로 오늘의 초점 우리는 궁극적으로 힙에있을 것이다. 82 00:03:42,960 --> 00:03:44,864 이 메모리의 또 다른 덩어리이다. 83 00:03:44,864 --> 00:03:47,030 그리고 기본적으로 모든 메모리는 동일한 재료이다. 84 00:03:47,030 --> 00:03:48,040 그것은 동일한 하드웨어이다. 85 00:03:48,040 --> 00:03:49,956 우리는 일종의 그저 다른 클러스터 치료 86 00:03:49,956 --> 00:03:51,460 의 다른 목적 바이트. 87 00:03:51,460 --> 00:03:56,540 힙은 또한 위치가 될 것입니다 당신이 요청 변수와 메모리 88 00:03:56,540 --> 00:03:58,810 운영 체제에서 일시적으로 저장됩니다. 89 00:03:58,810 --> 00:04:01,890 >> 그러나 문제 가지있다 여기, 그림에서 알 수 있듯이. 90 00:04:01,890 --> 00:04:05,261 우리는 종류의 두가 에 대한 선박 충돌합니다. 91 00:04:05,261 --> 00:04:08,010 당신은 점점 더 사용으로 인해 오늘날 우리가 볼 수있는 스택과 같이 92 00:04:08,010 --> 00:04:11,800 이후, 당신은 점점 더 많은을 사용할 때 힙, 반드시 나쁜 일이 일어날 수 있습니다. 93 00:04:11,800 --> 00:04:15,054 그리고 실제로, 우리는 그것을 유도 할 수있다 고의 또는 실수로. 94 00:04:15,054 --> 00:04:16,970 마지막 클리프 행어 그래서 시간은이 프로그램이었다, 95 00:04:16,970 --> 00:04:20,570 모든 기능을 제공하지 않았다 증명하는 것 이외의 목적을 96 00:04:20,570 --> 00:04:24,750 방법을 나쁜 사람이 실제로 취할 수있는 다른 사람의 프로그램 버그의 장점 97 00:04:24,750 --> 00:04:28,460 심지어 프로그램 또는 인수 전체 컴퓨터 시스템 또는 서버. 98 00:04:28,460 --> 00:04:31,660 그러니 그냥 눈에 잠시 당신을 맨 아래에있는 그 주를 주목 99 00:04:31,660 --> 00:04:34,510 명령 줄에서 소요 argv에 따라 인수. 100 00:04:34,510 --> 00:04:38,480 그리고 그것은 함수 f에 대한 호출을 가지고 기본적으로 이름없는 함수가 호출 101 00:04:38,480 --> 00:04:40,250 f를하고 argv를 전달 정보 [1]. 102 00:04:40,250 --> 00:04:43,960 >> 그래서에서의 어떤 단어를 사용자 유형 이 프로그램의 이름 뒤에 프롬프트 103 00:04:43,960 --> 00:04:49,310 그리고 다음이 임의 함수 닫 위, f는 문자열에 소요 AKA 숯불 * 104 00:04:49,310 --> 00:04:51,720 우리가 논의하기 시작했습니다로서, 그리고 그것은 단지 "바 '이래. 105 00:04:51,720 --> 00:04:53,310 그러나 우리는 무엇을 호출 할 수 있습니다. 106 00:04:53,310 --> 00:04:57,470 그리고, 그것은 내부에 선언 F, 문자의 배열 107 00:04:57,470 --> 00:04:59,930 12 같은 문자 c--했다. 108 00:04:59,930 --> 00:05:03,580 >> 자, 이야기가 나는 말하고 있었다 조금 전에 여기서 메모리에 109 00:05:03,580 --> 00:05:06,720 C, 또는 그 12 아르 끝날 것 문자? 110 00:05:06,720 --> 00:05:07,570 그냥 명확합니다. 111 00:05:07,570 --> 00:05:08,070 그래? 112 00:05:08,070 --> 00:05:08,590 >> 청중 : 스택에. 113 00:05:08,590 --> 00:05:09,420 >> 데이비드 J. 마란 : 스택에. 114 00:05:09,420 --> 00:05:10,720 그래서 C는 지역 변수입니다. 115 00:05:10,720 --> 00:05:14,079 우리는 12 문자 또는 12 바이트를 요구하고 있습니다. 116 00:05:14,079 --> 00:05:16,120 사람들은 결국 예정 소위 스택에. 117 00:05:16,120 --> 00:05:18,530 이제 마지막이 다른 기능입니다 즉, 실제로 꽤 유용 118 00:05:18,530 --> 00:05:20,571 그러나 우리는 정말 사용하지 않는 것 그것은 우리 자신, strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 그것은, 문자열 복사를 의미하지만, 문자, n 개의 문자를 명. 121 00:05:25,200 --> 00:05:31,990 따라서 n 개의 문자가 될 것입니다 C로 표시 줄에서 복사. 122 00:05:31,990 --> 00:05:32,980 그리고 얼마나 많은? 123 00:05:32,980 --> 00:05:34,110 바의 길이입니다. 124 00:05:34,110 --> 00:05:36,330 따라서 환언하면, 그 한 줄, strncopy, 125 00:05:36,330 --> 00:05:39,500 복사 할 것입니다 효과적으로 C에 바. 126 00:05:39,500 --> 00:05:42,340 >> 자, 그냥 가지 예상 이 이야기의 도덕적, 127 00:05:42,340 --> 00:05:44,750 무슨 일이 잠재적으로 문제가있다? 128 00:05:44,750 --> 00:05:49,710 우리는 길이를 확인하고 있지만 바의와 strncopy로 전달 129 00:05:49,710 --> 00:05:53,145 무엇이 당신 직감은 말하고있다 아직이 프로그램에 대해 깨진? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 그래? 132 00:05:55,220 --> 00:05:57,491 >> 청중 : 포함되지 않습니다 널 문자를위한 공간. 133 00:05:57,491 --> 00:05:59,990 데이비드 J. 마란 : 포함되지 않습니다 널 문자를위한 공간. 134 00:05:59,990 --> 00:06:02,073 에서 잠재적으로 달리 과거의 관행에도 못 할 135 00:06:02,073 --> 00:06:04,810 이 플러스 일에 관해서는 너무 많은 그 널 문자를 수용. 136 00:06:04,810 --> 00:06:06,649 그러나 그것보다 더 악화. 137 00:06:06,649 --> 00:06:07,940 또 우리는 무엇을 실패하고? 138 00:06:07,940 --> 00:06:08,432 그래? 139 00:06:08,432 --> 00:06:09,307 >> 청중 : [들리지] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 데이비드 J. 마란 : 완벽 한. 142 00:06:16,440 --> 00:06:18,490 우리는 하드 꽤 임의로 12 코딩했습니다. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 즉, 너무 많이하지 않습니다 문제가 있지만, 실제로 145 00:06:21,330 --> 00:06:25,630 우리는 경우에도 검사를하지 않을 것을 막대의 길이는, 12 이하 146 00:06:25,630 --> 00:06:28,530 이 경우이 될 것 메모리에 넣어 안전 147 00:06:28,530 --> 00:06:30,260 우리가 할당 한 전화 다. 148 00:06:30,260 --> 00:06:32,960 실제로, 바 같은 경우 길이 20 자, 149 00:06:32,960 --> 00:06:39,010 이 기능은 복사하는 것으로 나타납니다 따라서 C로 표시 줄에서 20 자 150 00:06:39,010 --> 00:06:41,310 적어도 8 바이트를 사용 그것은하지 않을 것을. 151 00:06:41,310 --> 00:06:42,690 즉, 여기에 의미합니다. 152 00:06:42,690 --> 00:06:44,347 >> 짧은 깨진 프로그램 그래서. 153 00:06:44,347 --> 00:06:45,180 큰 문제 같은 것은 아닙니다. 154 00:06:45,180 --> 00:06:46,360 어쩌면 당신은 세그먼트 오류를​​ 얻을. 155 00:06:46,360 --> 00:06:47,651 우리는 모든 프로그램에서 버그를 했어. 156 00:06:47,651 --> 00:06:50,196 우리 모두는 버그가있을 수 있습니다 지금 프로그램. 157 00:06:50,196 --> 00:06:51,320 그러나 의미는 무엇입니까? 158 00:06:51,320 --> 00:06:54,390 음, 여기의 확대 버전을하다 내 컴퓨터의 메모리의 사진입니다. 159 00:06:54,390 --> 00:06:56,230 이것은 내 스택의 바닥이다. 160 00:06:56,230 --> 00:06:59,644 그리고 실제로, 맨 아래에 무엇입니다 라는 부모 루틴 스택, 멋진 방법 161 00:06:59,644 --> 00:07:00,560 의 메인 말하는 것. 162 00:07:00,560 --> 00:07:03,772 기능이라고 누구든지 그 그래서 우리가 이야기하고있는 바. 163 00:07:03,772 --> 00:07:05,230 그래서이 스택의 바닥이다. 164 00:07:05,230 --> 00:07:06,640 반환 주소는 새로운 무언가이다. 165 00:07:06,640 --> 00:07:08,810 그것은 항상 거기에 있었어요 항상 그 사진에 있었다. 166 00:07:08,810 --> 00:07:10,440 우리는 관심을 호출되지 단지 않았다. 167 00:07:10,440 --> 00:07:15,290 알고 보니 때문에 C의 작동 방식은 일 함수가 서로 호출 할 때, 168 00:07:15,290 --> 00:07:18,780 뿐만 아니라에 대한 인수 작업을 수행 함수가 스택으로 푸시 얻을, 169 00:07:18,780 --> 00:07:22,470 뿐만 아니라 함수의 지역 할 변수는 스택으로 푸시 얻을, 170 00:07:22,470 --> 00:07:26,820 뭔가 반환 주소라고 또한 스택에 배치됩니다. 171 00:07:26,820 --> 00:07:33,330 특히, 주요 통화 foo는 경우, 기본의 메모리에 자신의 주소, 황소 뭔가, 172 00:07:33,330 --> 00:07:38,240 효과적으로 스택에 넣어 도착 그래서 F는 그것을 실행 완료되면 173 00:07:38,240 --> 00:07:43,630 텍스트로 다시 이동 위치를 알고 실행을 계속하기 위해 세그먼트. 174 00:07:43,630 --> 00:07:47,760 >> 우리가 개념적으로 여기 경우에 따라서, 메인에서, 다음 f를 호출된다. 175 00:07:47,760 --> 00:07:50,200 f를 알고 있지 어떻게 사람 다시 손을 제어? 176 00:07:50,200 --> 00:07:52,020 음,이 작은 여기에 빨간색의 이동 경로, 177 00:07:52,020 --> 00:07:54,978 반환 주소라고, 그것은 단지 수표, 그 반환 주소는 무엇인가? 178 00:07:54,978 --> 00:07:57,039 아, 내가 다시 여기 메인에 점프 할 수 있습니다. 179 00:07:57,039 --> 00:07:59,080 그리고 조금이다 지나친 단순화의, 180 00:07:59,080 --> 00:08:00,750 0과 1 때문에 주요 기술적으로 아르 181 00:08:00,750 --> 00:08:01,967 여기에 기술 부문에서 최대. 182 00:08:01,967 --> 00:08:03,800 하지만 그 생각이다. F 단지 무엇을 알고있다 183 00:08:03,800 --> 00:08:06,680 위치로 제어가 궁극적으로 거슬러 올라갑니다. 184 00:08:06,680 --> 00:08:09,790 >> 그러나 방법은 컴퓨터 긴 물건을 배치했다 185 00:08:09,790 --> 00:08:12,320 지역 변수와 같은과 인수는 다음과 같이합니다. 186 00:08:12,320 --> 00:08:17,180 이 그림의 상단에 따라서 파란색 그래서 모든 F에 대한 스택 프레임입니다 187 00:08:17,180 --> 00:08:19,630 메모리의 F 구체적으로 사용하고 있습니다. 188 00:08:19,630 --> 00:08:22,990 그래서 그에 따라, 알 바는이 사진에 있습니다. 189 00:08:22,990 --> 00:08:23,980 바 인수했다. 190 00:08:23,980 --> 00:08:27,240 그리고 우리는 주장 인수에 그 기능은 스택으로 푸시 얻는다. 191 00:08:27,240 --> 00:08:29,910 C는 물론, 이 그림에서. 192 00:08:29,910 --> 00:08:33,520 >> 그리고 그냥 표기를 위해, 왼쪽 상단 모서리에 알 193 00:08:33,520 --> 00:08:37,020 브래킷 0 ℃ 무엇을 것하고 다음 약간 오른쪽 아래 194 00:08:37,020 --> 00:08:38,220 C 브래킷 (11)이다. 195 00:08:38,220 --> 00:08:41,240 그래서 다른 말로하면, 당신은 상상할 수 바이트의 격자가 있음 196 00:08:41,240 --> 00:08:44,380 가있다 첫째있는 왼쪽 상단, 하단에있는의 197 00:08:44,380 --> 00:08:48,360 이들 12 바이트의 마지막이다. 198 00:08:48,360 --> 00:08:49,930 >> 하지만 지금은 빨리하려고합니다. 199 00:08:49,930 --> 00:08:55,580 어떻게 우리가 전달하는 경우 발생하는 약입니다 C보다 더 긴 문자열 표시 줄에? 200 00:08:55,580 --> 00:08:59,130 그리고 우리는 경우 확인하지 않을 그것은 참 이상 12 이상입니다. 201 00:08:59,130 --> 00:09:03,146 이 그림의 어떤 부분에 것입니다 바이트 0, 1, 2, 3으로 겹쳐 얻을 202 00:09:03,146 --> 00:09:07,890 도트 도트 도트, 11 다음 나쁜, 12, 19을 통해 13? 203 00:09:07,890 --> 00:09:11,820 어떻게 여기에 일어날 당신은 주문에서 추론하는 경우 204 00:09:11,820 --> 00:09:14,790 그 C 브래킷 공은 상단에 및 C 브래킷 (11)은 아래의 일종 205 00:09:14,790 --> 00:09:15,812 오른쪽? 206 00:09:15,812 --> 00:09:16,796 그래? 207 00:09:16,796 --> 00:09:19,260 >> 청중 : 글쎄, 무슨 char *로 줄을 덮어 씁니다. 208 00:09:19,260 --> 00:09:22,260 >> 데이비드 J. 마란 : 네, 그것은처럼 보이는 당신은 문자 * 줄을 덮어 쓸 것입니다. 209 00:09:22,260 --> 00:09:26,245 그리고 더 나쁜, 당신은 정말로 긴에 보내는 경우 문자열, 당신도 무엇을 덮어 쓸 수 있습니다? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 반환 주소. 212 00:09:28,570 --> 00:09:31,380 어느 다시, 단지처럼 프로그램 위치를 알려줄 이동 경로 213 00:09:31,380 --> 00:09:34,060 때 F로 돌아갑니다 호출되고 수행된다. 214 00:09:34,060 --> 00:09:37,140 >> 그래서 나쁜 사람은 일반적으로 무엇을 그들이 프로그램에 걸쳐 올 경우입니다 215 00:09:37,140 --> 00:09:41,290 그들은인지 궁금 것을 이러한 방법으로 악용, 버그 216 00:09:41,290 --> 00:09:43,550 그 또는 그녀는 걸릴 수 있습니다 그 버그의 장점, 217 00:09:43,550 --> 00:09:45,720 일반적으로 그들은 얻을하지 않습니다 이 권한 처음. 218 00:09:45,720 --> 00:09:48,590 그들은 단지 예를 들어, 전송 시작 프로그램에 임의의 문자열, 219 00:09:48,590 --> 00:09:50,260 키보드의 여부, 나 솔직히 그들은 아마 220 00:09:50,260 --> 00:09:52,740 작은 프로그램을 작성 단지 자동으로 문자열 생성 221 00:09:52,740 --> 00:09:55,430 에 의해 프로그램을 두드리는 시작 다른 입력의 제비에 전송 222 00:09:55,430 --> 00:09:56,340 다른 길이에서. 223 00:09:56,340 --> 00:09:58,990 >> 즉시 당신의 프로그램이 충돌로, 그 놀라운 일입니다. 224 00:09:58,990 --> 00:10:01,020 그가 의미하기 때문에 또는 그녀는 발견했다 225 00:10:01,020 --> 00:10:02,660 무슨 일이 참으로 아마 버그입니다. 226 00:10:02,660 --> 00:10:05,830 그리고 그들은 더 영리 얻을 수 있습니다 그리고 시작은 더 좁게 초점 227 00:10:05,830 --> 00:10:07,420 이 버그를 악용하는 방법에 대한. 228 00:10:07,420 --> 00:10:11,480 특히, 그가 또는 그녀는 수도 할 안녕하세요, 최상의 경우에 보낼 것이다. 229 00:10:11,480 --> 00:10:12,210 특별한 건 없구요. 230 00:10:12,210 --> 00:10:14,750 그것은 충분히 짧다 문자열입니다. 231 00:10:14,750 --> 00:10:18,100 그러나 그 또는 그녀가 보내는 경우, 우리는 그것을로 일반화 것 232 00:10:18,100 --> 00:10:20,890 공격은 제로 있도록 code-- 그 사람은 일을 233 00:10:20,890 --> 00:10:25,150 RM-RF처럼 모든 것을 제거하는 하드 드라이브 나 스팸 메일을 보낼 234 00:10:25,150 --> 00:10:27,000 어떻게 든 컴퓨터를 공격? 235 00:10:27,000 --> 00:10:29,570 >> 이들 각각의 경우에 따라서 문자는 나타냅니다 236 00:10:29,570 --> 00:10:32,380 개념적으로, 공격, 공격, 공격, 공격, 나쁜 코드 237 00:10:32,380 --> 00:10:36,410 다른 사람이 쓴, 그러나 그 사람이 똑똑 경우 238 00:10:36,410 --> 00:10:40,790 뿐만 아니라 모든 포함 그러한 RM-RFS의 아니라 239 00:10:40,790 --> 00:10:46,100 자신의 지난 몇 바이트가 상당 수있을 240 00:10:46,100 --> 00:10:50,540 주소 그의 혹은 그녀의 자신의 공격 코드 241 00:10:50,540 --> 00:10:53,820 그 또는 그녀는 그냥 통과하는 것이 프롬프트를 제공함으로써, 242 00:10:53,820 --> 00:10:58,760 효과적으로 컴퓨터를 속일 수 있습니다 F의 실행이 완료되면 몰래에, 243 00:10:58,760 --> 00:11:02,400 오, 나 점프하기위한 시간이다 다시 빨간색 반환 주소. 244 00:11:02,400 --> 00:11:06,070 그러나 그 또는 그녀가 어떻게 든이 있기 때문에 그 리턴 어드레스를 중복 245 00:11:06,070 --> 00:11:09,602 자신의 번호, 그들은 충분히 똑똑 246 00:11:09,602 --> 00:11:11,560 있음을 구성한하기 번호는 같이 참조합니다 247 00:11:11,560 --> 00:11:13,740 슈퍼 상단에 표시 이 왼쪽 코너, 248 00:11:13,740 --> 00:11:18,020 컴퓨터의의 실제 주소 자신의 공격 코드의 일부 메모리, 249 00:11:18,020 --> 00:11:21,740 나쁜 사람은 컴퓨터를 속일 수 있습니다 자신의 코드를 실행에. 250 00:11:21,740 --> 00:11:23,700 >> 그리고 그 코드는 다시, 무엇이든 될 수있다. 251 00:11:23,700 --> 00:11:26,120 그것은 일반적이라고 단지입니다 쉘 코드, 252 00:11:26,120 --> 00:11:29,030 그렇지 않은 것을 말하는 방법 RM-RF만큼 간단 일반적으로 뭔가. 253 00:11:29,030 --> 00:11:32,340 그것은 실제로 배쉬 같은 뭔가 또는 실제 프로그램 그를 준다 254 00:11:32,340 --> 00:11:37,230 혹은 그녀의 프로그램 제어 실행하기 그들이 원하는 것을 아무것도. 255 00:11:37,230 --> 00:11:40,210 그래서 짧은,이 모든 단순한 사실에서 유래 256 00:11:40,210 --> 00:11:44,490 관련이 버그는 확인하지 않는 것이 배열의 경계. 257 00:11:44,490 --> 00:11:47,250 그리고 그 길 때문에 컴퓨터 작업은 그들이 258 00:11:47,250 --> 00:11:49,430 에서 스택을 사용 효과적으로, 개념적 259 00:11:49,430 --> 00:11:54,830 최대에 바닥하지만 요소 당신은 상단을 아래로 성장 스택에 푸시 260 00:11:54,830 --> 00:11:56,624 이 믿을 수 없을만큼 문제가있다. 261 00:11:56,624 --> 00:11:58,290 자,이 문제를 해결하는 방법이 있습니다. 262 00:11:58,290 --> 00:12:00,800 그리고 솔직히, 언어가있다 있는이 문제를 해결합니다. 263 00:12:00,800 --> 00:12:03,100 자바는, 예를 들어, 면역 이 특정 문제에. 264 00:12:03,100 --> 00:12:04,110 그들이 당신에게 포인터를 제공하지 않습니다 때문입니다. 265 00:12:04,110 --> 00:12:05,943 그들은 당신에게 제공하지 않습니다 직접 메모리 주소. 266 00:12:05,943 --> 00:12:08,560 우리가이 전원 그래서 메모리에 아무것도 만지지 267 00:12:08,560 --> 00:12:11,580 우리는 인정 하듯이, 큰 위험, 제공 할 수 있습니다. 268 00:12:11,580 --> 00:12:12,430 >> 그래서 눈을 밖으로 유지. 269 00:12:12,430 --> 00:12:14,596 솔직히 경우 개월 또는 년은 언제 올 270 00:12:14,596 --> 00:12:17,740 당신은 어떤 착취에 대해 읽어 프로그램 또는 서버, 271 00:12:17,740 --> 00:12:22,370 당신은 무언가의 힌트를 참조하는 경우 버퍼 오버 플로우 공격과 같은, 272 00:12:22,370 --> 00:12:25,390 또는 스택 오버 플로우는 또 다른 유형입니다 공격, 정신에는 변함이, 273 00:12:25,390 --> 00:12:28,770 웹 사이트의 영감으로 많은 당신이 그것을 알고 있다면, 이름, 274 00:12:28,770 --> 00:12:33,170 모든 단지에 대해서 이야기 일부 문자의 크기를 넘쳐 275 00:12:33,170 --> 00:12:36,200 배열 또는 더 일반적으로 어떤 배열입니다. 276 00:12:36,200 --> 00:12:38,822 여기에 다음 질문,,? 277 00:12:38,822 --> 00:12:39,780 집에서 시도하지 마십시오. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> 좋아. 280 00:12:42,300 --> 00:12:47,270 그래서 malloc에​​ 지금까지 우리의 새로운을하고있다 우리가 메모리를 할당 할 수 있다는 점에서 친구 281 00:12:47,270 --> 00:12:50,540 우리는 필요에 모르는 우리는 우리가하지 않아도 원하는 사전 282 00:12:50,540 --> 00:12:52,920 에 하드 코드에 대한 우리의 12 같은 프로그램 번호. 283 00:12:52,920 --> 00:12:55,550 사용자는 우리에게 얼마나 알려줍니다되면 그 또는 그녀가 원하는 입력 데이터, 284 00:12:55,550 --> 00:12:58,000 우리는 그 많은 메모리를 malloc을 할 수 있습니다. 285 00:12:58,000 --> 00:13:01,484 >> 그래서 malloc에​​ 그것은에 밝혀 우리가 사용하고 정도, 286 00:13:01,484 --> 00:13:03,900 명시 전회 다음 너희들은 그것을 사용하고있다 287 00:13:03,900 --> 00:13:08,160 에 대한 무의식적 getString에 대한 몇 주, malloc에​​의 모든 메모리 288 00:13:08,160 --> 00:13:09,820 소위 힙에서 비롯됩니다. 289 00:13:09,820 --> 00:13:13,852 그리고 이것은 예를 들어, 왜있는 getString입니다 동적으로 메모리를 할당 할 수 있습니다 290 00:13:13,852 --> 00:13:16,060 넌 모르고 사전에 입력 한 것, 291 00:13:16,060 --> 00:13:21,520 이 메모리에 다시 포인터를 손으로, 그 기억은 당신이 계속 여전히, 292 00:13:21,520 --> 00:13:24,080 도 수익을 getString에 후. 293 00:13:24,080 --> 00:13:27,450 때문에 리콜 후 모든 스택은 끊임없이 위로 추락 294 00:13:27,450 --> 00:13:27,950 상하. 295 00:13:27,950 --> 00:13:30,230 그리고 즉시이 간다 아래로, 즉 메모리를 의미한다 296 00:13:30,230 --> 00:13:33,030 사용이 기능해야 다른 사람이 사용할 수 없습니다. 297 00:13:33,030 --> 00:13:34,570 지금은 쓰레기 값을합니다. 298 00:13:34,570 --> 00:13:36,120 >> 그러나 힙이 여기에있다. 299 00:13:36,120 --> 00:13:39,360 그리고 malloc에​​가 있다는 것입니다에 대한 좋은거야 malloc에​​ 여기에 메모리를 할당 할 때, 300 00:13:39,360 --> 00:13:42,070 이를 위해, 영향을받지 것 스택에 의해 대부분. 301 00:13:42,070 --> 00:13:46,000 그래서 어떤 기능에 액세스 할 수 있습니다 다음 malloc 된 메모리, 302 00:13:46,000 --> 00:13:49,120 심지어 getstring를 같은 기능에 의해, 후에도이 반환됩니다. 303 00:13:49,120 --> 00:13:51,700 >> 이제, malloc에​​의 반대는 무료입니다. 304 00:13:51,700 --> 00:13:53,900 그리고 실제로, 규칙 당신에게 채택 시작해야 305 00:13:53,900 --> 00:13:58,950 모든, 모든, 당신이 malloc을을 사용하는 시간이다 당신은 자신이 결국, 무​​료 사용해야합니다 306 00:13:58,950 --> 00:14:00,280 같은 포인터. 307 00:14:00,280 --> 00:14:03,289 우리는 기록 된 모든이 시간 버그, 여러 가지 이유로 버그 코드. 308 00:14:03,289 --> 00:14:05,580 그러나 중 하나가되었습니다 CS50 라이브러리를 사용하는 309 00:14:05,580 --> 00:14:09,010 자체는 의도적입니다 버그, 그것은 메모리 누수. 310 00:14:09,010 --> 00:14:11,410 당신이 getstring를 호출 한 모든 시간 지난 몇 주 동안 311 00:14:11,410 --> 00:14:13,870 우리가 운영을 요구하고 시스템, 리눅스, 메모리. 312 00:14:13,870 --> 00:14:15,780 그리고 당신은 한 번 다시 준 적이있다. 313 00:14:15,780 --> 00:14:17,730 그리고이에없는 좋은 일을 연습 할 수 있습니다. 314 00:14:17,730 --> 00:14:20,330 >> 그리고 Valgrind의, 하나의 Pset에 4에 도입 된 도구, 315 00:14:20,330 --> 00:14:22,900 당신을 돕는에 대한 모든입니다 지금과 같은 버그를 찾을 수 있습니다. 316 00:14:22,900 --> 00:14:27,060 그러나 다행히도 Pset에 4 당신은 필요가 없습니다 CS50 라이브러리 나있는 getString를 사용합니다. 317 00:14:27,060 --> 00:14:31,220 그래서 메모리와 관련된 버그가 있습니다 궁극적으로 자신이 될 것. 318 00:14:31,220 --> 00:14:34,060 >> 그래서 malloc에​​는 이상입니다 이 목적을 위해 편리합니다. 319 00:14:34,060 --> 00:14:37,420 우리는 실제로 지금 해결할 수 근본적으로 다른 문제 320 00:14:37,420 --> 00:14:41,640 근본적으로 많은 문제를 해결 효율적 주 제로의 약속에 따라. 321 00:14:41,640 --> 00:14:44,720 지금까지이 섹시한입니다 데이터 구조는 우리가 했어. 322 00:14:44,720 --> 00:14:47,804 그리고 자료 구조로 그냥 의미 개념화 메모리 방법 323 00:14:47,804 --> 00:14:50,720 단지 말을 뛰어 넘는 방법으로, 이것은이 문자이며, int이며. 324 00:14:50,720 --> 00:14:52,930 우리는 함께 클러스터 것들을 시작할 수 있습니다. 325 00:14:52,930 --> 00:14:54,460 >> 그래서 배열이처럼 보였다. 326 00:14:54,460 --> 00:14:57,270 그리고 약의 주요 것이었다 배열은 당신을 준다이다 327 00:14:57,270 --> 00:14:59,724 백투백의 덩어리 메모리에, 각각의 328 00:14:59,724 --> 00:15:02,765 같은 유형이 될 것입니다, 중간, 중간, 중간, 중간, 또는 문자, 문자, 문자, 329 00:15:02,765 --> 00:15:03,330 문자. 330 00:15:03,330 --> 00:15:04,496 그러나 몇 가지 단점이있다. 331 00:15:04,496 --> 00:15:06,570 이것은 예를 들면, 크기 육의 배열. 332 00:15:06,570 --> 00:15:10,650 당신이 육으로이 배열을 채우기 가정 숫자와 다음, 어떤 이유로, 333 00:15:10,650 --> 00:15:13,187 사용자가주고 싶어 당신 칠분의 일 수입니다. 334 00:15:13,187 --> 00:15:14,020 어디를 배치해야합니까? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 >> 당신이 가지고있는 경우 솔루션 기능 스택에 배열을 만들어, 337 00:15:18,990 --> 00:15:22,030 예를 들면, 단지 주 함께 우리가 도입이 표기법 338 00:15:22,030 --> 00:15:23,730 내 번호와 대괄호? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 글쎄, 당신은 여섯있어 이 상자의 숫자. 341 00:15:27,260 --> 00:15:28,530 당신의 본능은 어떤 것입니까? 342 00:15:28,530 --> 00:15:29,973 어디 넣어할까요? 343 00:15:29,973 --> 00:15:30,860 >> 청중 : [들리지] 344 00:15:30,860 --> 00:15:31,315 >> 데이비드 J. 마란 : 죄송합니다? 345 00:15:31,315 --> 00:15:32,380 >> 관객 : 마지막에 넣습니다. 346 00:15:32,380 --> 00:15:33,796 >> 데이비드 J. 마란 : 결국에 넣습니다. 347 00:15:33,796 --> 00:15:35,880 그러니 그냥 오른쪽에있는 이상, 이 상자의 외부. 348 00:15:35,880 --> 00:15:38,710 어느 쪽이 좋은,하지만 것 당신이 할 수 없어 밝혀졌습니다. 349 00:15:38,710 --> 00:15:41,350 당신이 물어 보지 한 경우 때문에 이 메모리 청크, 350 00:15:41,350 --> 00:15:44,490 그것은이 그 우연의 일치가 될 수있다 다른 변수에 의해 사용되는 351 00:15:44,490 --> 00:15:45,030 모두. 352 00:15:45,030 --> 00:15:49,210 우리가 마련 할 때 그래서 주 다시 생각 나 Zamyla 및 다빈와 게이브의 이름 아웃 353 00:15:49,210 --> 00:15:49,930 메모리. 354 00:15:49,930 --> 00:15:51,638 그들은 문자 그대로 있었다 다시 다시 다시합니다. 355 00:15:51,638 --> 00:15:53,550 그래서 우리는 반드시 할 수 없습니다 그 무엇의 신뢰 356 00:15:53,550 --> 00:15:55,800 여기 내가 사용하는 것이 가능합니다. 357 00:15:55,800 --> 00:15:56,990 >> 그래서 당신은 다른 무엇을 할 수 있는가? 358 00:15:56,990 --> 00:16:00,282 글쎄, 당신을 한 번 실현 크기 일곱의 배열이 필요 359 00:16:00,282 --> 00:16:02,490 당신은 단지를 만들 수 있습니다 크기 일곱의 배열은 사용 360 00:16:02,490 --> 00:16:05,950 루프 또는 while 루프에 대한, 새로운 배열에 복사, 361 00:16:05,950 --> 00:16:09,680 다음 어떻게 든 그냥 없애 이 배열하거나 사용을 중지. 362 00:16:09,680 --> 00:16:12,130 그러나 특히 효율적인 아니다. 363 00:16:12,130 --> 00:16:15,340 즉, 배열은 두지 마세요 동적으로 크기를 조정합니다. 364 00:16:15,340 --> 00:16:17,900 >> 그래서 한편으로는 얻을 놀라운 랜덤 액세스. 365 00:16:17,900 --> 00:16:20,108 그것을 할 수 있기 때문에 우리는 일을 분열과 정복 등 366 00:16:20,108 --> 00:16:23,100 우리가했습니다 모두 이진 검색, 여기에 화면에 대한 이야기​​. 367 00:16:23,100 --> 00:16:24,950 하지만 당신은 구석에 자신을 칠합니다. 368 00:16:24,950 --> 00:16:27,810 즉시 히트로 배열의 끝, 369 00:16:27,810 --> 00:16:29,980 당신은 아주 할 필요가 비용이 많이 드는 작업 370 00:16:29,980 --> 00:16:33,910 또는 코드의 전체 무리 쓰기 지금 문제를 해결한다. 371 00:16:33,910 --> 00:16:36,680 >> 그래서 그 대신 경우 우리는 한 무슨 뭔가 목록을 호출, 372 00:16:36,680 --> 00:16:38,820 또는 특히 목록을 연결? 373 00:16:38,820 --> 00:16:41,930 어떤 경우 대신 갖는 사각형, 다시 다시 다시 374 00:16:41,930 --> 00:16:45,730 우리는 조금두고 사각형을 그들 사이 재량권의 비트? 375 00:16:45,730 --> 00:16:49,670 비록 내가이 그려진 것 사진이나이 사진을 적응 376 00:16:49,670 --> 00:16:54,696 텍스트 중 하나에서 다시 여기에있을 수 있습니다 다시 현실에서 매우 질서 백업하려면 377 00:16:54,696 --> 00:16:56,820 그 사각형의 한 여기까지 메모리에있을 수 있습니다. 378 00:16:56,820 --> 00:16:58,028 그 중 하나는 여기에있을 수 있습니다. 379 00:16:58,028 --> 00:17:00,420 그 중 하나는 여기에있을 수 여기서, 등 위에. 380 00:17:00,420 --> 00:17:02,910 >> 그러나 우리가 그린 그림을 경우 이 경우, 화살표 381 00:17:02,910 --> 00:17:05,650 어떻게 든 이들을 연결하는 것이 함께 사각형? 382 00:17:05,650 --> 00:17:08,170 사실, 우리는 기술을 봤어요 화살표의 화신. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 우리가 최근에 사용한 일이 후드 아래, 385 00:17:13,710 --> 00:17:15,210 화살표의 대표? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 포인터, 오른쪽? 388 00:17:17,349 --> 00:17:19,780 >> 그래, 내가 대신 단지 숫자를 저장 389 00:17:19,780 --> 00:17:23,130 같은 9, 17, 22, 26, 34, 우리는 무엇을하지 저장 경우 390 00:17:23,130 --> 00:17:27,079 숫자 만 아니라 포인터 이러한 각 번호 옆에? 391 00:17:27,079 --> 00:17:30,690 그래서 많은 당신이 스레드 것처럼 직물의 전체 무리를 통해 바늘, 392 00:17:30,690 --> 00:17:32,950 어떻게 든 동점 일 함께 유사 할 수 393 00:17:32,950 --> 00:17:35,550 포인터 등으로 우리 여기에 화살표로 성육신, 394 00:17:35,550 --> 00:17:38,550 가지 짜 이러한 개별 사각형 395 00:17:38,550 --> 00:17:41,780 효과적으로 포인터를 이용하여 각 번호 옆에 그 396 00:17:41,780 --> 00:17:46,065 것으로, 일부 다음 수를 포인트 차례로, 약간의 다음 수를 포인트? 397 00:17:46,065 --> 00:17:47,940 따라서 환언하면, 무엇이 우리가 실제로 원하는 경우 398 00:17:47,940 --> 00:17:49,820 이런 식으로 뭔가를 구현하는 방법? 399 00:17:49,820 --> 00:17:53,610 그런데 불행하게도,이 사각형, 9 적어도 하나, 17, 22에서, 400 00:17:53,610 --> 00:17:57,040 등이 더 이상 없다 하나의 숫자와 함께 좋은 사각형입니다. 401 00:17:57,040 --> 00:17:59,960 바닥, 사각형 9 이하, 예를 들면, 402 00:17:59,960 --> 00:18:04,330 무엇을 나타내는 지는해야 포인터, 32 비트 수. 403 00:18:04,330 --> 00:18:09,460 지금, 나는 아직 모든 데이터 유형을 인식하지 않아요 C에서 그에게뿐만 아니라 int를 제공합니다 404 00:18:09,460 --> 00:18:11,630 하지만 포인터 모두. 405 00:18:11,630 --> 00:18:15,020 >> 우리가 원하는 경우에 따라서 솔루션 무엇 이에 우리 자신의 대답을 발명? 406 00:18:15,020 --> 00:18:15,760 그래? 407 00:18:15,760 --> 00:18:16,640 >> 청중 : [들리지] 408 00:18:16,640 --> 00:18:17,360 >> 데이비드 J. 마란 : 무엇입니까? 409 00:18:17,360 --> 00:18:17,880 >> 청중 : 새로운 구조입니다. 410 00:18:17,880 --> 00:18:19,590 >> 데이비드 J. 마란 : 그래, 왜 그렇게 우리는 새로운 구조를 생성하지 않습니다, 411 00:18:19,590 --> 00:18:20,920 또는 C, 구조체? 412 00:18:20,920 --> 00:18:25,990 우리는 경우 잠시 전에 구조체를 본 적이 우리는 학생 구조 처리 곳 413 00:18:25,990 --> 00:18:27,780 과 같이 이름과 집을 가지고있는 사람. 414 00:18:27,780 --> 00:18:31,980 Pset에에서 3 브레이크 아웃 당신은 전체를 사용 structs-- GRect 및 GOvals의 무리 415 00:18:31,980 --> 00:18:34,810 스탠포드에 만든 함께 클러스터 정보를 제공합니다. 416 00:18:34,810 --> 00:18:38,580 그래서 우리는이 같은 생각을하는 경우 키워드 "형식 정의"와 "구조체" 417 00:18:38,580 --> 00:18:42,890 다음 일부 학생 별 물건, 그리고 다음에이 진화 : 418 00:18:42,890 --> 00:18:46,210 형식 정의 구조체 node-- 노드는 그냥 아주 일반적인 컴퓨터 과학 419 00:18:46,210 --> 00:18:49,980 데이터 구조에 뭔가에 대한 용어 데이터 구조에서의 컨테이너. 420 00:18:49,980 --> 00:18:53,900 내가 주장하는 노드는해야 할 것입니다 완전히 간단한 정수 n을, 421 00:18:53,900 --> 00:18:58,810 다음 더 비밀스럽게 조금, 이 두 번째 줄, 구조체 노드 * 다음. 422 00:18:58,810 --> 00:19:01,300 그러나 덜 기술적 인 측면에서, 그 두 번째 라인은 무엇인가 423 00:19:01,300 --> 00:19:02,980 중괄호 안의 코드? 424 00:19:02,980 --> 00:19:03,737 그래? 425 00:19:03,737 --> 00:19:04,851 >> 청중 : [들리지] 426 00:19:04,851 --> 00:19:06,600 데이비드 J. 마란 : 다른 노드의 포인터. 427 00:19:06,600 --> 00:19:09,910 그래서 일반적으로 인정 하듯이, 조금 애매한 구문. 428 00:19:09,910 --> 00:19:13,250 하지만 당신은 문자 그대로 읽으면, 다음의 변수의 이름이다. 429 00:19:13,250 --> 00:19:14,410 데이터 유형은 무엇입니까? 430 00:19:14,410 --> 00:19:18,206 그것은,이 때 약간의 자세한이다 하지만 * 형 구조체 노드의입니다. 431 00:19:18,206 --> 00:19:22,960 우리가 뭔가의 별을 본 적이 때마다, 그 는 해당 데이터 유형에 대한 포인터입니다 의미합니다. 432 00:19:22,960 --> 00:19:26,810 그래서 다음에 분명히있다 구조체 노드의 포인터. 433 00:19:26,810 --> 00:19:28,310 >> 이제 구조체 노드는 무엇인가? 434 00:19:28,310 --> 00:19:31,044 글쎄, 당신은 사람들을 볼주의 오른쪽 상단의 같은 단어입니다. 435 00:19:31,044 --> 00:19:33,960 그리고 실제로, 당신은 또한 단어를 참조 여기 아래 왼쪽 하단에 "노드". 436 00:19:33,960 --> 00:19:35,640 그리고이 사실은 단지 편리합니다. 437 00:19:35,640 --> 00:19:39,930 우리가 학생의 정의에있는 것을 알 수 있습니다 한 번만 단어 "학생"이있다. 438 00:19:39,930 --> 00:19:42,510 그리고 그 학생이 있기 때문이다 목적은 자기 참조하지 않았다. 439 00:19:42,510 --> 00:19:45,340 학생의 내부에 아무것도 없어 즉 다른 학생을 가리 키도록해야합니다, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 그 종류의 것 현실 세계에서 이상. 442 00:19:47,630 --> 00:19:50,880 >> 그러나의 노드와 링크 목록, 우리는 노드를 원하는가 443 00:19:50,880 --> 00:19:53,970 비슷한 개체에 참조 할 수 있습니다. 444 00:19:53,970 --> 00:19:57,900 그리고 여기에 변화가없는 알 그냥 뭐 중괄호 내부입니다. 445 00:19:57,900 --> 00:20:00,800 그러나 우리는 "노드"라는 단어를 추가 상단뿐만 아니라 446 00:20:00,800 --> 00:20:02,930 아래에 추가 대신에 "학생." 447 00:20:02,930 --> 00:20:06,000 그리고 이것은 단지 기술적 인 세부 사항입니다 그래서 다시, 데이터 구조 448 00:20:06,000 --> 00:20:11,380 , 자기 참조가 될 수 있도록 노드는 같은 또 다른 노드를 가리킬 수 있습니다. 449 00:20:11,380 --> 00:20:13,840 >> 따라서이 궁극적으로 무엇인가 우리에게 의미하는 것? 450 00:20:13,840 --> 00:20:17,560 음, 한,이 물건의 내부 우리 노드의 내용이다. 451 00:20:17,560 --> 00:20:19,360 여기까지이 일이, 오른쪽 상단은 너무하다 452 00:20:19,360 --> 00:20:20,860 즉, 다시, 우리는 우리 자신을 참조 할 수 있습니다. 453 00:20:20,860 --> 00:20:23,401 그리고 가장 바깥쪽에있는 물건, 노드는 새로운 용어가 있더라도 454 00:20:23,401 --> 00:20:25,500 아마도 여전히있어 학생 및 내용과 동일 455 00:20:25,500 --> 00:20:27,520 SPL에서 후드 아래에 있었다. 456 00:20:27,520 --> 00:20:31,095 >> 그래서 우리가 지금 시작하기를 원한다면 이 연결리스트를 구현, 457 00:20:31,095 --> 00:20:33,220 우리가 어떻게 번역 할 수 있습니다 이 같은 코드가? 458 00:20:33,220 --> 00:20:35,350 음, 그냥 보자 그 프로그램의 예 459 00:20:35,350 --> 00:20:36,840 실제로 링크 된 목록을 사용합니다. 460 00:20:36,840 --> 00:20:40,870 오늘의 유통 코드 중 목록 제로라는 프로그램입니다. 461 00:20:40,870 --> 00:20:44,980 나는 이것을 실행하는 경우 그리고 난 슈퍼를 생성 간단한 GUI, 그래픽 사용자 인터페이스 462 00:20:44,980 --> 00:20:46,460 그러나 그것은 정말로 단지는 printf입니다. 463 00:20:46,460 --> 00:20:50,930 그리고 지금은 자신에게 몇 가지 메뉴를 준 options-- 삭제, 삽입, 검색, 464 00:20:50,930 --> 00:20:51,750 트래버스. 465 00:20:51,750 --> 00:20:52,630 그리고 종료합니다. 466 00:20:52,630 --> 00:20:55,970 이들은 그냥 일반적인 작업 아르 링크리스트로 알려진 데이터 구조. 467 00:20:55,970 --> 00:20:58,409 >> 지금에가는 삭제 목록에서 번호를 삭제합니다. 468 00:20:58,409 --> 00:21:00,200 삽입 추가 할 것 목록에 번호입니다. 469 00:21:00,200 --> 00:21:02,181 검색 보일 것입니다 목록 번호. 470 00:21:02,181 --> 00:21:04,930 그리고 옆으로는 멋진 방법입니다 말하는, 목록을 도보 471 00:21:04,930 --> 00:21:06,245 그것을 밖으로 인쇄하지만, 그게 다예요. 472 00:21:06,245 --> 00:21:07,720 어떤 방법으로 그것을 변경하지 마십시오. 473 00:21:07,720 --> 00:21:08,570 >> 그럼이 시도 할 수 있습니다. 474 00:21:08,570 --> 00:21:10,160 이제 가서 2를 입력 할 수 있습니다. 475 00:21:10,160 --> 00:21:12,710 그리고 나는 갈거야 수를 삽입 구를 말한다. 476 00:21:12,710 --> 00:21:13,620 입력합니다. 477 00:21:13,620 --> 00:21:17,480 그리고 지금 내 프로그램은입니다 말을 프로그램 목록은 이제 구이다. 478 00:21:17,480 --> 00:21:20,190 자, 가서 경우 다시 삽입 않습니다 보자 479 00:21:20,190 --> 00:21:23,680 나 가서 축소와 17을 입력하세요. 480 00:21:23,680 --> 00:21:25,770 지금 내 목록은, 17 구이다. 481 00:21:25,770 --> 00:21:27,750 내가 다시 삽입 할 경우의 하나를 건너 뛸 수 있습니다. 482 00:21:27,750 --> 00:21:32,400 대신 22, 그림에 따라 우리는했습니다 여기에서 찾고, 내가 앞으로 이동하자 483 00:21:32,400 --> 00:21:34,630 그리고 다음 26를 삽입합니다. 484 00:21:34,630 --> 00:21:36,230 그래서 26를 입력 할거야. 485 00:21:36,230 --> 00:21:37,755 내가 예상대로 목록입니다. 486 00:21:37,755 --> 00:21:40,630 하지만 지금은 그냥이 코드 있는지 확인합니다 유연한 될 것입니다, 지금 나를 보자 487 00:21:40,630 --> 00:21:43,520 유형 22,하는 이상 개념적으로, 우리는이 있다면 488 00:21:43,520 --> 00:21:46,520 이 사실 인 정렬되어 유지 지금 골은 될 것, 489 00:21:46,520 --> 00:21:48,690 17과 26의 사이에 가야한다. 490 00:21:48,690 --> 00:21:50,270 그래서 입력하고 Enter 키를 누르십시오. 491 00:21:50,270 --> 00:21:51,380 사실, 그 작동합니다. 492 00:21:51,380 --> 00:21:54,950 그래서 지금 내가 삽입하자 마지막으로, 그림, 34 당. 493 00:21:54,950 --> 00:21:55,450 >> 좋아. 494 00:21:55,450 --> 00:21:58,980 그래서 지금 나를 그렇게 규정 할 수 삭제하고 이송 및 검색 수행 495 00:21:58,980 --> 00:21:59,760 사실, 작동합니다. 496 00:21:59,760 --> 00:22:04,180 내가 검색을 실행할 경우 사실,하자 입력 한 숫자 (22)를 검색합니다. 497 00:22:04,180 --> 00:22:05,010 그것은 22을 발견했다. 498 00:22:05,010 --> 00:22:07,580 그래서 어떤이는 프로그램 목록 제로는 않습니다. 499 00:22:07,580 --> 00:22:10,230 >> 그러나 실제로 무엇을 것입니다 에 그이 구현? 500 00:22:10,230 --> 00:22:14,530 음, 첫째 나는, 그리고 참으로 수 나는 파일이 list0.h라고해야합니까. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 그리고이이 곳에서 라인 타입 정의, 구조체 노드, 503 00:22:20,690 --> 00:22:24,850 나는 내 중괄호가 N 중간, 및 다음 정의 무엇 struct--? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 구조체 노드 옆에. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 그래서 우리는 스타가 필요합니다. 508 00:22:31,045 --> 00:22:33,420 이제 기술적으로 우리는 들어가 여기를 그리는 습관. 509 00:22:33,420 --> 00:22:35,670 당신은 교과서를 볼 수 있으며 온라인 참조가 그것을 할. 510 00:22:35,670 --> 00:22:36,660 그것은 기능적으로 동일합니다. 511 00:22:36,660 --> 00:22:37,980 사실, 이것은 좀 더 전형적이다. 512 00:22:37,980 --> 00:22:40,563 그러나 나는 것과 일치 할 것이다 우리는 지난 시간을했고,이 작업을 수행. 513 00:22:40,563 --> 00:22:42,350 그리고 마지막으로, 난 할거야. 514 00:22:42,350 --> 00:22:45,550 >> 헤더 파일 그래서 어딘가 list0.h에서 515 00:22:45,550 --> 00:22:49,200 오늘이 구조체 정의입니다, 아마 다른 물건. 516 00:22:49,200 --> 00:22:52,580 한편 list0c에있다 몇 가지가 될 것. 517 00:22:52,580 --> 00:22:54,740 그러나 우리는거야 그냥 시작이 완료되지. 518 00:22:54,740 --> 00:22:59,690 List0.h 내가 원하는 파일입니다 내 C 파일에 포함합니다. 519 00:22:59,690 --> 00:23:03,910 그리고 어떤 점에서 난 주, 지능 무효화 것. 520 00:23:03,910 --> 00:23:06,530 그리고 나는 갈거야 해야 할 몇 가지가 여기에 있습니다. 521 00:23:06,530 --> 00:23:10,620 나는 또한이거야 프로토 타입, 무효, 검색, 정수 등 522 00:23:10,620 --> 00:23:13,610 N, 인생에서 누구의 목적은 요소를 검색합니다. 523 00:23:13,610 --> 00:23:18,310 그리고 여기있는 난의 주장 오늘날의 코드, 무효, 검색, 중간, N, 524 00:23:18,310 --> 00:23:21,020 세미콜론 없지만 열린 중괄호. 525 00:23:21,020 --> 00:23:25,049 지금은 어떻게 든 검색 할 이 목록에있는 요소. 526 00:23:25,049 --> 00:23:27,340 그러나 우리는 충분하지 않습니다 아직 화면에 정보를 표시합니다. 527 00:23:27,340 --> 00:23:29,800 나는 실제로이 목록 자체를 표현. 528 00:23:29,800 --> 00:23:33,070 그래서 하나의 방법 우리는 구현할 수 프로그램에서 연결리스트 529 00:23:33,070 --> 00:23:37,520 내가 가지 일을 할됩니다 등이 여기에 목록을 연결 선언합니다. 530 00:23:37,520 --> 00:23:40,520 단순하게하기 위해, 내가 만들거야 이 경우에도 일반적으로 우리의 생각, 글로벌 531 00:23:40,520 --> 00:23:41,645 이 너무 많이하지 않아야합니다. 532 00:23:41,645 --> 00:23:43,260 그러나이 예제를 단순화됩니다. 533 00:23:43,260 --> 00:23:45,890 그래서 선언 할 여기 링크 된 목록입니다. 534 00:23:45,890 --> 00:23:47,010 이제, 내가 어떻게 할 수 있는가? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> 여기에 링크 된 목록의 그림입니다. 537 00:23:50,750 --> 00:23:53,030 그리고 정말 안돼 방법 순간 알 538 00:23:53,030 --> 00:23:56,710 나는 표현에 대해 갈거야 하나 너무 많은 것들 539 00:23:56,710 --> 00:23:58,040 메모리 변수입니다. 540 00:23:58,040 --> 00:23:59,160 그러나 다시 순간을 생각합니다. 541 00:23:59,160 --> 00:24:00,830 우리가 가진 것 모두이 시간 문자열, 다음, 그것은 우리를 542 00:24:00,830 --> 00:24:02,913 의 배열로 밝혀 자, 다음 그것은 우리를 543 00:24:02,913 --> 00:24:05,740 단지 포인터로 밝혀 첫 번째 문자로 544 00:24:05,740 --> 00:24:08,890 문자의 배열에 즉, 널 (null) 종료합니다. 545 00:24:08,890 --> 00:24:13,530 그 로직에 의해,이 너무 의견을 시드의 사진 종류, 546 00:24:13,530 --> 00:24:17,964 우리가 실제로 무엇을 쓸 필요가 우리의 코드가 링크 된 목록을 나타내는? 547 00:24:17,964 --> 00:24:21,130 얼마나이 정보를 우리가 필요로 할 C 코드에서 캡처, 당신은 말할 것? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 그래? 550 00:24:23,154 --> 00:24:24,738 >> 청중 : 우리는 노드에 대한 포인터가 필요합니다. 551 00:24:24,738 --> 00:24:26,237 데이비드 J. 마란 : 노드에 대한 포인터. 552 00:24:26,237 --> 00:24:29,320 특히, 어떤 노드는을 것 본능에 대한 포인터를 유지하는? 553 00:24:29,320 --> 00:24:30,026 >> 청중 : 첫 번째 노드입니다. 554 00:24:30,026 --> 00:24:31,942 >> 데이비드 J. 마란 : 네, 아마 첫째. 555 00:24:31,942 --> 00:24:34,030 그리고, 제 알 노드는 다른 형태이다. 556 00:24:34,030 --> 00:24:37,690 이 구조체의 절반 크기이다, 때문에 실제로 포인터 만입니다. 557 00:24:37,690 --> 00:24:44,650 그래서 당신은 실제로 할 수있는 선언이다 연결리스트는 * 유형 노드의 수입니다. 558 00:24:44,650 --> 00:24:47,780 그리고 그냥 먼저 부르 자 하고 null로 초기화합니다. 559 00:24:47,780 --> 00:24:49,910 그래서 널, 다시오고있다 여기 사진에. 560 00:24:49,910 --> 00:24:53,620 뿐만 아니라 널 (null) 특수 등으로 사용된다 getstring를 같은 것들에 대한 반환 값 561 00:24:53,620 --> 00:24:57,770 과의 malloc은 널 (null)는 제로 포인터, 포인터의 부족 562 00:24:57,770 --> 00:24:58,430 만약에 당신. 563 00:24:58,430 --> 00:25:00,309 그냥 아무것도 아직 여기 없음을 의미합니다. 564 00:25:00,309 --> 00:25:02,100 지금 첫번째에, 난 할 수 이 아무것도했다. 565 00:25:02,100 --> 00:25:04,200 나는 "목록"이라고 불렀다 수 있었다 또는 다른 것들의 수. 566 00:25:04,200 --> 00:25:06,960 그러나 나는 그래서 "첫번째"라고 전화를 해요 이 사진과 함께이 라인 업. 567 00:25:06,960 --> 00:25:10,280 그러니 그냥 문자열처럼 표현 될 수있다 그 첫 번째 바이트의 주소, 568 00:25:10,280 --> 00:25:11,280 그래서 연결리스트가 있습니다. 569 00:25:11,280 --> 00:25:13,480 그리고 우리는 다른 데이터를 볼 수 있습니다 구조가 표현 될 570 00:25:13,480 --> 00:25:16,700 하나의 포인터, 32 비트 화살표 가리키는 571 00:25:16,700 --> 00:25:18,740 구조에서 첫 번째 노드. 572 00:25:18,740 --> 00:25:20,340 >> 하지만 지금의 문제를 예상 할 수 있습니다. 573 00:25:20,340 --> 00:25:23,230 나는 단지 기억하고있어 경우 내 프로그램 주소 574 00:25:23,230 --> 00:25:27,220 제 노드, 제 데이터 구조에 직사각형 575 00:25:27,220 --> 00:25:31,760 있었다 더 나은에 대한 경우가 될 것 내 목록의 나머지 부분의 구현? 576 00:25:31,760 --> 00:25:35,820 무슨 중요한 세부 사항은 무엇입니까 이 실제로 작동하는지 확인하는 방법? 577 00:25:35,820 --> 00:25:39,250 그리고에 의해 나는 "실제로 작동" 많은 캐릭터처럼 말은, 578 00:25:39,250 --> 00:25:42,180 우리는 첫 번째 문자에서 가자 두 번째로 다빈의 이름으로, 579 00:25:42,180 --> 00:25:44,755 셋째로,에 넷째, 맨 마지막에, 580 00:25:44,755 --> 00:25:47,880 우리가 마지막에있을 때 우리는 어떻게 알고 이처럼 보이는 링크 목록? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 때 널 (null)입니다. 583 00:25:50,660 --> 00:25:53,640 그리고는 이런 종류의 표현했습니다 전기 기술자의 힘처럼, 584 00:25:53,640 --> 00:25:56,420 작은 접지와 기호 종류의. 585 00:25:56,420 --> 00:25:58,246 그러나 그것은 단지이 경우에는 널 (null)을 의미합니다. 586 00:25:58,246 --> 00:26:00,370 당신은 어떤 수를 그릴 수 있습니다 방법이지만이 저자 587 00:26:00,370 --> 00:26:02,800 여기이 기호를 사용하여 일어났다. 588 00:26:02,800 --> 00:26:06,260 >> 우리가 모인 말라구 함께 이들 노드 모두 589 00:26:06,260 --> 00:26:08,600 경우에만 기억 첫번째는, 너무 길면 590 00:26:08,600 --> 00:26:11,760 우리는에 특수 기호를 넣어 목록의 맨 마지막 노드, 591 00:26:11,760 --> 00:26:15,130 그 때문에 우리는, 널 (null)을 사용합니다 우리가 사용할 수 무엇을 우리가, 592 00:26:15,130 --> 00:26:16,480 이 목록이 완료됩니다. 593 00:26:16,480 --> 00:26:20,190 그리고 심지어 경우에만 당신에게에 대한 포인터를 제공 첫 번째 요소, 당신, 프로그래머, 594 00:26:20,190 --> 00:26:22,486 확실히의 나머지 부분을 액세스 할 수있다. 595 00:26:22,486 --> 00:26:24,360 그러나의 당신의 마음을합시다 조금 방황, 596 00:26:24,360 --> 00:26:26,140 그들은 이미하지 않으면 아주 무엇 wandered-- 597 00:26:26,140 --> 00:26:28,723 의 실행 시간이 될 것 이 목록에서 아무것도 발견? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 그것은 젠장, 그것은 N의 큰 O이야, 이는 공평하게, 나쁘지 않습니다. 600 00:26:33,470 --> 00:26:34,800 그러나 선형이다. 601 00:26:34,800 --> 00:26:37,980 우리는 어떤 기능을 포기 더 이동하여 배열의 602 00:26:37,980 --> 00:26:43,130 동적으로이 사진을 향해 함께 짠 또는 노드를 연결? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 우리는 랜덤 액세스를 포기했습니다. 605 00:26:46,687 --> 00:26:48,770 배열 때문에 좋은 수학적으로 모든 606 00:26:48,770 --> 00:26:50,340 뒷면에 다시 다시 다시입니다. 607 00:26:50,340 --> 00:26:52,370 심지어이 사진하지만 예쁜 외모, 심지어 608 00:26:52,370 --> 00:26:55,830 이들 노드처럼 보이지만 멋지게 실제로, 이격 609 00:26:55,830 --> 00:26:56,830 그들은 어느 곳이 될 수 있습니다. 610 00:26:56,830 --> 00:27:01,590 OX1, Ox50, Ox123, Ox99,이 노드는 곳이 될 수 있습니다. 611 00:27:01,590 --> 00:27:05,960 malloc에​​ 메모리를 할당 않기 때문에 힙하지만, 어느 곳에서나 힙. 612 00:27:05,960 --> 00:27:09,080 당신은 반드시 그건 모르겠어요 돌아가는 것은 다시 다시합니다. 613 00:27:09,080 --> 00:27:12,460 그리고 현실의 너무이 사진 확실히이 꽤 될 수 없습니다. 614 00:27:12,460 --> 00:27:16,140 >> 그래서 조금 걸릴 거예요 이 기능을 구현하기 위해 작동한다. 615 00:27:16,140 --> 00:27:17,880 그래서 지금 검색을 구현​​ 할 수 있습니다. 616 00:27:17,880 --> 00:27:20,250 그리고 우리는의 종류를 볼 수 있습니다 이렇게 영리한 방법. 617 00:27:20,250 --> 00:27:24,660 내가 검색 기능입니다 경우에 따라서 및 나는 변수, 정수 n을 부여하고있어 618 00:27:24,660 --> 00:27:28,490 을 찾기 위해, 나는 알 필요가 내부보고를위한 새로운 구문 619 00:27:28,490 --> 00:27:32,400 야 구조 , n은 찾아 지적했다. 620 00:27:32,400 --> 00:27:33,210 그래서이 작업을 수행 할 수 있습니다. 621 00:27:33,210 --> 00:27:36,030 >> 그래서 첫째 나는 갈거야 앞서와 * 노드를 선언합니다. 622 00:27:36,030 --> 00:27:39,400 그리고 내가 전화하려고 해요 단지 규칙에 따라 포인터. 623 00:27:39,400 --> 00:27:41,710 그리고 첫번째로 초기화하는거야. 624 00:27:41,710 --> 00:27:43,770 그리고 지금은이 작업을 수행 할 수 있습니다 여러 가지 방법. 625 00:27:43,770 --> 00:27:45,436 하지만 일반적인 접근 방식을거야. 626 00:27:45,436 --> 00:27:50,180 포인터와 동일하지는 않지만 null의 경우, 그 유효 구문입니다. 627 00:27:50,180 --> 00:27:54,550 그리고는 그냥 그렇게, 다음을 수행 의​​미 오랫동안 아무것도 가리키는 아니에요있다. 628 00:27:54,550 --> 00:27:55,800 내가 뭘하고 싶어? 629 00:27:55,800 --> 00:28:01,939 >> 포인터 도트 N 경우에, 저 돌아 오게 그에게 equals-- 무엇을 동일? 630 00:28:01,939 --> 00:28:03,105 어떤 값을 내가 찾고 있어요? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 전달 된 실제 명. 633 00:28:06,590 --> 00:28:09,020 그래서 여기에 또 다른 기능입니다 C 많은 언어. 634 00:28:09,020 --> 00:28:13,705 심지어 구조라는 노드하지만 n 값, 완전히 합법적있다 635 00:28:13,705 --> 00:28:17,530 또한 로컬 인수를 가지고 또는 변수는 N했다. 636 00:28:17,530 --> 00:28:20,085 심지어 우리와 함께 있기 때문에 인간의 눈은 구별 할 수있다 637 00:28:20,085 --> 00:28:22,087 이 n은 아마도입니다 이 N 다릅니다. 638 00:28:22,087 --> 00:28:23,420 구문이 다르기 때문입니다. 639 00:28:23,420 --> 00:28:26,211 당신은 도트 및 포인터를 가지고있어, 이 한 반면 같은 것은이 없습니다. 640 00:28:26,211 --> 00:28:27,290 그래서 이것은 정상입니다. 641 00:28:27,290 --> 00:28:29,120 즉, 같은 일을 전화를 확인합니다. 642 00:28:29,120 --> 00:28:32,380 >> 나는 당신이 찾을 경우, 난 뭔가를 할 것 643 00:28:32,380 --> 00:28:35,000 같은 우리가 N을 발견했다고 발표. 644 00:28:35,000 --> 00:28:37,930 그리고 우리는 같은 것을 떠날거야 의견이나 의사 코드입니다. 645 00:28:37,930 --> 00:28:40,190 그렇지, 그리고 여기에 흥미로운 부분은, 어떤 646 00:28:40,190 --> 00:28:47,320 나는 현재 노드 경우 어떻게할까요 내가 걱정하는 N을 포함되지 않는 이유는 무엇입니까? 647 00:28:47,320 --> 00:28:50,700 방법은 다음을 달성합니까? 648 00:28:50,700 --> 00:28:53,710 만약에 내 손가락 순간 PTR이며 야 649 00:28:53,710 --> 00:28:55,920 무엇을 가리키는 첫째는, 가리키고 650 00:28:55,920 --> 00:28:59,290 나는 내 손가락을 이동 어떻게 코드의 다음 노드로? 651 00:28:59,290 --> 00:29:01,915 글쎄, 우리가있어 이동 경로 무슨 이 경우에 따라가는거야? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 청중 : [들리지]. 654 00:29:04,380 --> 00:29:05,630 데이비드 J. 마란 : 네, 다음. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 내가 다시 가면 그래서 내 여기 코드, 참, 난 657 00:29:09,824 --> 00:29:12,990 , 포인터를 가서 말을하려고하는 그것은 그냥 임시 variable--입니다 658 00:29:12,990 --> 00:29:15,320 이상한 이름, PTR하지만, 그냥 temp--처럼 659 00:29:15,320 --> 00:29:19,234 나는 포인터를 설정하는거야 어떤 포인터는 ... 동일 660 00:29:19,234 --> 00:29:22,150 다시이 될 것입니다 다음 순간은 점에 대한 약간의 버그. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 즉, 내가 걸릴거야 내 이 노드를 가리키는 손가락 663 00:29:26,550 --> 00:29:31,247 여기 당신이 알고 말할거야 무엇을, 다음 필드를 살펴 664 00:29:31,247 --> 00:29:33,330 에 손가락을 이동 무엇이든 그것을 가리키는 것. 665 00:29:33,330 --> 00:29:35,163 그리고 이것은을 것입니다 반복, 반복을 반복합니다. 666 00:29:35,163 --> 00:29:37,630 그러나 때 내 손가락을 수행 전혀 아무것도하지? 667 00:29:37,630 --> 00:29:40,095 곧 어떤 코드 차기의 라인으로? 668 00:29:40,095 --> 00:29:40,970 청중 : [들리지] 669 00:29:40,970 --> 00:29:43,060 데이비드 J. 마란 : 만약 포인트 동안 포인터는 null로 동일하지 않습니다. 670 00:29:43,060 --> 00:29:44,900 어느 순간 내 손가락의에서 널 (null)을 가리키는 될 것 671 00:29:44,900 --> 00:29:47,070 나는 실현거야 그리스트의 마지막입니다. 672 00:29:47,070 --> 00:29:48,910 자,이 조금이다 단순 흰색 거짓말입니다. 673 00:29:48,910 --> 00:29:51,580 그것은 밝혀 그 경우에도 우리 바로이 점 표기법을 배웠다 674 00:29:51,580 --> 00:29:55,220 구조에 대한 포인터는 구조체가 아닙니다. 675 00:29:55,220 --> 00:29:56,580 PTR은 무엇입니까? 676 00:29:56,580 --> 00:29:58,350 그냥 더 nitpicky합니다. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 이 노드에 대한 포인터이다. 679 00:30:01,360 --> 00:30:03,120 이 노드 자체 아니다. 680 00:30:03,120 --> 00:30:06,650 여기에는 스타가 없었 경우, 포인터 absolutely--는 노드입니다. 681 00:30:06,650 --> 00:30:08,650 이 주 일처럼 변수의 선언 682 00:30:08,650 --> 00:30:10,120 심지어 단어 "노드가"새로운 생각. 683 00:30:10,120 --> 00:30:13,860 >> 그러나 우리는 소개 마자 스타, 이제 노드에 대한 포인터이다. 684 00:30:13,860 --> 00:30:17,960 그리고 불행하게도 당신은 사용할 수 없습니다 포인터의 점 표기법. 685 00:30:17,960 --> 00:30:21,070 사용자는 화살표를 사용할 필요 표기되는, 눈에 띄게, 686 00:30:21,070 --> 00:30:23,470 처음은 조각이다 구문의 직관적 보인다. 687 00:30:23,470 --> 00:30:25,245 이것은 말 그대로 화살처럼 보인다. 688 00:30:25,245 --> 00:30:26,370 그리고 그건 좋은 일이야. 689 00:30:26,370 --> 00:30:28,995 그리고 여기에 아래로 그대로 화살표 모양. 690 00:30:28,995 --> 00:30:31,870 그래서 그게 그렇게하지 ​​la-- 생각 내가 이곳에 오버 커밋 있다고 생각 I 691 00:30:31,870 --> 00:30:34,120 그 마지막으로 새로운 조각 생각 구문의 우리는 볼 것입니다. 692 00:30:34,120 --> 00:30:36,500 그리고 다행히도, 그것은 참이다 좀 더 직관적. 693 00:30:36,500 --> 00:30:40,090 >> 지금, 당신의 사람들을 위해 사람 옛날 방식을 선호 할 수 있습니다, 694 00:30:40,090 --> 00:30:42,550 당신은 여전히​​ 점 표기법을 사용할 수 있습니다. 695 00:30:42,550 --> 00:30:45,380 그러나 월요일의 당 대화, 우리는 첫번째 696 00:30:45,380 --> 00:30:50,530 그로 이동, 거기에 갈 필요가 해결 한 다음 필드에 액세스 할 수 있습니다. 697 00:30:50,530 --> 00:30:51,897 따라서이 또한 정확합니다. 698 00:30:51,897 --> 00:30:53,730 그리고 솔직히, 이것이 많은 학자 연하는 좀. 699 00:30:53,730 --> 00:30:56,530 당신은 말 그대로 말을하는지, 역 참조 포인터가 이동합니다. 700 00:30:56,530 --> 00:30:59,320 그런 다음 .N 잡아 필드는 N했다. 701 00:30:59,320 --> 00:31:01,370 하지만 솔직히, 아무도 원하지 않는다 입력하거나이를 읽을 수 있습니다. 702 00:31:01,370 --> 00:31:03,620 그리고 세계는 발명 화살표 표기법하는 703 00:31:03,620 --> 00:31:06,980 , 동일, 동일합니다 그냥 문법 설탕입니다. 704 00:31:06,980 --> 00:31:10,570 이런 말 그래서 멋진 방법 좋아 보이는, 또는 간단 보인다. 705 00:31:10,570 --> 00:31:12,296 >> 그래서 지금은 하나의 다른 일을 할거야. 706 00:31:12,296 --> 00:31:15,420 나는 일단 "휴식"을 말하는거야 그렇게 나는 그것을 찾고 보관하지 않습니다 발견. 707 00:31:15,420 --> 00:31:17,620 하지만이 요점이다 검색 기능. 708 00:31:17,620 --> 00:31:21,710 그러나에, 많은 쉽게 끝 코드를 걸을 수 없습니다. 709 00:31:21,710 --> 00:31:25,570 이것은 참으로 공식적인 구현 오늘의 유통 코드 검색. 710 00:31:25,570 --> 00:31:30,530 그 삽입이 아니라고 감히 을 통해 걸을 특히 재미 711 00:31:30,530 --> 00:31:33,180 시각적으로도에도 삭제 하루의 끝에서하지만 712 00:31:33,180 --> 00:31:35,460 그들은 상당히 졸이다 간단한 휴리스틱. 713 00:31:35,460 --> 00:31:36,330 >> 그래서이 작업을 수행 할 수 있습니다. 714 00:31:36,330 --> 00:31:39,250 여기에 유머 날거야, 내가했다 스트레스 공의 무리를 가져온다. 715 00:31:39,250 --> 00:31:40,620 나는 숫자의 무리를 가져왔다. 716 00:31:40,620 --> 00:31:46,562 그리고 우리는 몇 자원 봉사자를 얻을 수 9, 17, 20, 22, 29, 34을 나타내는? 717 00:31:46,562 --> 00:31:48,270 그래서 기본적으로 모든 사람 누가 오늘 여기입니다. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 즉, 하나, 둘, 셋이었다 넷, 다섯, 여섯 사람입니다. 720 00:31:52,760 --> 00:31:55,740 난 안 볼 봐야 ... 해왔 어 다시 한 그들의 손을 발생시킵니다. 721 00:31:55,740 --> 00:32:01,910 OK, 하나, 둘, 셋, 넷, five-- 날 육을 balance--로드 할 수 있습니다. 722 00:32:01,910 --> 00:32:03,051 좋아, 여섯 최대 어서. 723 00:32:03,051 --> 00:32:04,050 우리는 다른 사람이 필요합니다. 724 00:32:04,050 --> 00:32:05,460 우리는 여분의 스트레스 공을 가져왔다. 725 00:32:05,460 --> 00:32:08,200 그리고 당신이 할 수있는 경우에 대한 잠시, 선 726 00:32:08,200 --> 00:32:10,490 자신 최대 단지 여기이 그림처럼. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> 좋아. 729 00:32:15,959 --> 00:32:17,125 당신의 이름은 무엇입니까, 보자? 730 00:32:17,125 --> 00:32:17,550 >> 청중 : 앤드류. 731 00:32:17,550 --> 00:32:18,800 >> 데이비드 J. 마란 : 앤드류, 당신은 9 번입니다. 732 00:32:18,800 --> 00:32:19,540 만나서 반가워요. 733 00:32:19,540 --> 00:32:20,400 여기 당신은 간다. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 청중 : 젠. 736 00:32:22,176 --> 00:32:22,662 데이비드 J. 마란 : 젠. 737 00:32:22,662 --> 00:32:23,162 데이비드. 738 00:32:23,162 --> 00:32:23,765 번호 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 네? 741 00:32:25,450 --> 00:32:26,400 >> 청중 : 나는 줄리아 해요. 742 00:32:26,400 --> 00:32:26,980 >> 데이비드 J. 마란 : 줄리아, 데이비드. 743 00:32:26,980 --> 00:32:27,545 번호 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 청중 : 기독교. 746 00:32:29,340 --> 00:32:30,715 데이비드 J. 마란 : 기독교, 데이비드. 747 00:32:30,715 --> 00:32:31,541 번호 22. 748 00:32:31,541 --> 00:32:32,040 그리고? 749 00:32:32,040 --> 00:32:32,649 >> 청중 : JP. 750 00:32:32,649 --> 00:32:33,440 데이비드 J. 마란 : JP. 751 00:32:33,440 --> 00:32:34,880 번호 29. 752 00:32:34,880 --> 00:32:37,080 그래서 어 오 가서 받 얻을. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 어 오. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 대기. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 사람이 마커를 가지고 있습니까? 760 00:32:43,682 --> 00:32:44,890 청중 : 나는 샤피 있어요. 761 00:32:44,890 --> 00:32:45,660 데이비드 J. 마란 : 당신은 샤피있어? 762 00:32:45,660 --> 00:32:46,159 확인을 클릭합니다. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 그리고 사람이 종이 조각이 있나요? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 강의 내용을 저장합니다. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 어서. 769 00:32:55,362 --> 00:32:56,320 청중 : 우리는 그것을 가지고있다. 770 00:32:56,320 --> 00:32:57,600 데이비드 J. 마란 : 우리는있어? 771 00:32:57,600 --> 00:32:58,577 좋아요, 감사합니다. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 여기에 우리가 간다. 774 00:33:02,520 --> 00:33:03,582 이것은 여러분이 되었습니까? 775 00:33:03,582 --> 00:33:04,540 당신은 일 저장. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 그래서 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 좋아. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 나는 29 철자하지만, 확인을 클릭합니다. 782 00:33:14,890 --> 00:33:15,720 어서. 783 00:33:15,720 --> 00:33:18,114 좋아, 내가 당신에게 줄 것이다 펜 다시 잠시. 784 00:33:18,114 --> 00:33:19,280 그래서 우리는 여기이 사람들이 있습니다. 785 00:33:19,280 --> 00:33:20,330 의 다른 하나를 보자. 786 00:33:20,330 --> 00:33:23,750 게이브, 당신은 연주하고 싶어 여기에 첫 번째 요소? 787 00:33:23,750 --> 00:33:25,705 우리는 지적 할 필요가있을 것이다 이 좋은 사람들에서. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 그래서 9, 17, 20, 22, 정렬 29 일 후 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 우리는 사람을 잃게 했습니까? 792 00:33:33,325 --> 00:33:33,950 나는 34을해야합니까. 793 00:33:33,950 --> 00:33:36,730 여기서 원하는 한일 확인, 34이 될 수 있습니다? 794 00:33:36,730 --> 00:33:37,605 OK, 34, 최대 어서. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 좋아,이 될 것입니다 절정 볼만한 가치가있는 곳입니다. 797 00:33:41,220 --> 00:33:41,550 당신의 이름은 무엇입니까? 798 00:33:41,550 --> 00:33:42,040 >> 청중 : 피터. 799 00:33:42,040 --> 00:33:43,456 >> 데이비드 J. 마란 : 피터, 최대 어서. 800 00:33:43,456 --> 00:33:46,810 좋아, 그래서 여기에 노드의 전체 무리. 801 00:33:46,810 --> 00:33:49,060 너희들은 각각 나타냅니다 이 사각형의 하나. 802 00:33:49,060 --> 00:33:51,930 그리고 게이브, 약간 이상한 아웃 인간, 첫째 나타냅니다. 803 00:33:51,930 --> 00:33:54,850 그래서 그의 포인터는 조금 작다 다른 사람보다 화면. 804 00:33:54,850 --> 00:33:58,120 그리고이 경우, 각 좌측 손을 아래로 가리 키도록 어느 것입니다 805 00:33:58,120 --> 00:34:01,085 이에 따라서, 널 (null) 대표 단지 포인터의 부재 806 00:34:01,085 --> 00:34:03,210 아니면 가리키는 될 것 당신 옆에 노드. 807 00:34:03,210 --> 00:34:05,440 >> 그래서 지금 당신이 장식하는 경우 사진과 같이 자신 808 00:34:05,440 --> 00:34:07,585 여기 가서 지점 게이브와, 서로 809 00:34:07,585 --> 00:34:11,030 에서 특정 가리키는 9 번 목록을 나타냅니다. 810 00:34:11,030 --> 00:34:14,050 확인을 번호 34, 왼손 그냥 바닥을 가리키는해야합니다. 811 00:34:14,050 --> 00:34:15,750 >> OK, 그래서 이것은 링크 된 목록입니다. 812 00:34:15,750 --> 00:34:17,580 따라서이 문제의 시나리오입니다. 813 00:34:17,580 --> 00:34:20,210 그리고 실제로이 대표 문제의 클래스 814 00:34:20,210 --> 00:34:21,929 당신은 코드를 해결하기 위해 시도 할 수있다. 815 00:34:21,929 --> 00:34:25,020 당신은 궁극적으로 삽입 할 목록에 새 요소입니다. 816 00:34:25,020 --> 00:34:27,494 이 경우, 우리는에 갈거야 숫자 55를 삽입하려고합니다. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 그러나이있을거야 다른 경우 고려해야 할. 819 00:34:30,860 --> 00:34:34,409 그리고 실제로,이 일을 될 것입니다 큰 그림은 여기 테이크 아웃,이다 820 00:34:34,409 --> 00:34:35,659 다른 경우는 무엇인가. 821 00:34:35,659 --> 00:34:39,120 조건 경우 또는 다른 무엇인가 프로그램이있을 수 있습니다 가지? 822 00:34:39,120 --> 00:34:42,024 >> 음, 수 당신은에 노력하고 우리는 55로 지금 알고 삽입,, 823 00:34:42,024 --> 00:34:44,650 하지만 당신은 알고하지 않은 경우 사전에, 나는 daresay 824 00:34:44,650 --> 00:34:47,840 적어도 세에 빠진다 가능한 상황. 825 00:34:47,840 --> 00:34:49,717 어디에서 새로운 요소가 될 수 있을까요? 826 00:34:49,717 --> 00:34:51,050 청중 : 그리고 끝이나 중간. 827 00:34:51,050 --> 00:34:54,150 데이비드 J. 마란 : 마지막에,에 중간 또는 시작 부분에. 828 00:34:54,150 --> 00:34:56,650 그래서 나는 적어도 거기에 주장 세 가지 문제는 우리가 해결해야합니다. 829 00:34:56,650 --> 00:34:58,691 의 아마 무엇을 선택하자 틀림없이 간단한 830 00:34:58,691 --> 00:35:01,090 하나, 여기서 새로운 요소를 시작 부분에 속한다. 831 00:35:01,090 --> 00:35:04,040 그래서 나는 꽤 코드를하려고 해요 같은 난 그냥 쓴, 검색 할 수 있습니다. 832 00:35:04,040 --> 00:35:07,670 그리고, PTR을 가지고 갈거야하는 난 내 손가락으로 여기에 표현됩니다 833 00:35:07,670 --> 00:35:08,370 평소와 같이. 834 00:35:08,370 --> 00:35:12,430 >> 그리고, 어떤 값을 기억 우리는에 PTR 초기화 했습니까? 835 00:35:12,430 --> 00:35:15,300 그래서 우리는 처음에 null로 초기화. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 그러나 우리는 일단 무슨 짓을 한거야 우리의 검색 기능 내부에 있었다? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 우리는 첫째로는 동일하게 설정 이 일을 의미하지 않는. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 나는 첫번째에 해당 PTR을 설정하면, 무엇을 내 손은 정말 가리키는해야 하는가? 842 00:35:30,570 --> 00:35:31,070 오른쪽. 843 00:35:31,070 --> 00:35:33,290 게이브 내가려고하는 경우에 따라서 여기에 같은 값이어야합니다, 844 00:35:33,290 --> 00:35:34,760 우리는 9 번에 두 지점이 필요합니다. 845 00:35:34,760 --> 00:35:36,420 >> 그래서 이것은 우리의 이야기의 시작이었다. 846 00:35:36,420 --> 00:35:38,700 그리고 지금은 그냥 간단합니다 비록 구문은 새로운 기능입니다. 847 00:35:38,700 --> 00:35:40,580 개념적으로이 단지 선형 검색합니다. 848 00:35:40,580 --> 00:35:42,750 9와 동일한 55인가? 849 00:35:42,750 --> 00:35:45,559 또는 오히려,의 9 이하 가정 해 봅시다. 850 00:35:45,559 --> 00:35:47,600 나는에 노력하고있어 때문에 55을 넣어 위치를 알아낼. 851 00:35:47,600 --> 00:35:51,270 9 미만, 17 미만, 이하 20 이상, 이하 22 일 이하 29 일 852 00:35:51,270 --> 00:35:52,510 미만 (34), 아니. 853 00:35:52,510 --> 00:35:55,080 그래서 지금 우리는 경우에있어 적어도 셋 중 하나. 854 00:35:55,080 --> 00:35:59,910 >> 나는 여기에 55을 삽입 할 경우, 어떤 코드 필요 라인은 모두 실행하는 방법? 855 00:35:59,910 --> 00:36:01,890 어떻게이 그림을 수행 인간은 변경해야합니까? 856 00:36:01,890 --> 00:36:03,181 나는 내 왼쪽 손으로 무엇을해야합니까? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 이것은, 처음은 null이어야합니다 I가리스트의 끝에라서. 859 00:36:07,360 --> 00:36:09,318 그리고 무슨 일이 일어날해야 여기에 피터와 함께, 그것은했다? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 그는 분명히 나를 가리거야. 862 00:36:12,430 --> 00:36:15,580 그래서 나는 적어도 두 개의 선이있다 주장 오늘부터 샘플 코드의 코드 863 00:36:15,580 --> 00:36:18,570 즉,이를 구현하는 것 꼬리 (55)를 추가의 시나리오. 864 00:36:18,570 --> 00:36:20,950 그리고 나는 누군가 홉을 가질 수 최대 단지 55에 해당합니까? 865 00:36:20,950 --> 00:36:22,200 좋아, 당신은 새로운 55입니다. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> 그래서 지금 무엇을 다음 경우 시나리오는 따라 온다 868 00:36:27,054 --> 00:36:29,720 우리는에 삽입 할 시작 또는리스트의 헤드? 869 00:36:29,720 --> 00:36:31,100 그리고 당신의 이름, 숫자 55은 무엇입니까? 870 00:36:31,100 --> 00:36:31,420 >> 청중 : 잭. 871 00:36:31,420 --> 00:36:32,295 >> 데이비드 J. 마란 : 잭? 872 00:36:32,295 --> 00:36:33,585 OK, 만나서 반갑습니다. 873 00:36:33,585 --> 00:36:34,210 탑승을 환영합니다. 874 00:36:34,210 --> 00:36:36,640 그래서 지금 우리는에 갈거야 말하자면, 숫자 5를 삽입합니다. 875 00:36:36,640 --> 00:36:39,840 다음의 두 번째 경우이다 세 우리는 전에 함께했다. 876 00:36:39,840 --> 00:36:43,050 그래서 5 초에 속하는 경우, 이제 우리가을 알 방법을 볼 수 있습니다. 877 00:36:43,050 --> 00:36:46,310 내 PTR를 초기화 다시 숫자 9에 대한 포인터입니다. 878 00:36:46,310 --> 00:36:49,140 그리고 5 미만 9입니다, 오, 깨달았다. 879 00:36:49,140 --> 00:36:50,880 그래서 우리에게이 사진을 수정합니다. 880 00:36:50,880 --> 00:36:54,820 누구의 손, 게이브 나 다윗의 에 올 수 9의 이름은 무엇입니까? 881 00:36:54,820 --> 00:36:55,740 >> 청중 : 젠. 882 00:36:55,740 --> 00:36:58,406 >> 데이비드 J. 마란 : 젠의 hands-- 우리의 손의 어떤 변경해야합니까? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 좋아, 그럼 게이브는 지금 무엇을 가리키는? 885 00:37:00,970 --> 00:37:01,640 나 한테. 886 00:37:01,640 --> 00:37:02,750 나는 새 노드입니다. 887 00:37:02,750 --> 00:37:04,870 그래서 이동의 단지 종류거야 여기에 시각적으로 볼 수 있습니다. 888 00:37:04,870 --> 00:37:06,435 그리고 그 사이에 무슨 일이 난 그 지점합니까? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 아직도 어디를 가리키는거야. 891 00:37:09,020 --> 00:37:10,000 그래서 그것입니다. 892 00:37:10,000 --> 00:37:13,717 코드 수정 그래서 정말 한 줄 이러한 특정 문제가 보인다. 893 00:37:13,717 --> 00:37:14,800 좋아, 잘 했어. 894 00:37:14,800 --> 00:37:17,580 그리고 누군가가 5에 대한 자리 표시 할 수 있습니까? 895 00:37:17,580 --> 00:37:18,080 올라 와요. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 우리는 당신이 다음 번에 ​​얻을 것이다. 898 00:37:21,320 --> 00:37:24,280 >> 좋아요, 아니예요 및 옆으로, 이름과 899 00:37:24,280 --> 00:37:28,510 난 지금의 명시 적 언급을하지 않을 겁니다 지금 PRED 포인터, 이전 포인터 900 00:37:28,510 --> 00:37:31,260 새로운 포인터, 그건 단지 이름이 부여되고 901 00:37:31,260 --> 00:37:35,280 포인터에 대한 샘플 코드 또는 가지 주위를 가리키는 것 내 손에. 902 00:37:35,280 --> 00:37:36,060 당신의 이름은 무엇입니까? 903 00:37:36,060 --> 00:37:36,700 >> 청중 : 크리스틴. 904 00:37:36,700 --> 00:37:37,100 >> 데이비드 J. 마란 : 크리스틴. 905 00:37:37,100 --> 00:37:38,090 탑승을 환영합니다. 906 00:37:38,090 --> 00:37:42,180 좋아, 그래서 지금 생각해 봅시다 약간 더 성가신 시나리오 907 00:37:42,180 --> 00:37:46,350 나는 삽입 할있다 이 후 26 뭔가. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 무엇? 910 00:37:47,590 --> 00:37:50,510 다음은 우리가 펜을 가지고 좋은 일을 알수가. 911 00:37:50,510 --> 00:37:51,955 좋아, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 누군가의 또 다른 조각을 얻을 수있는 경우 종이 그냥 모든 권리를 case--에서 준비. 914 00:37:57,570 --> 00:37:58,370 아, 흥미 롭군요. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 그럼이은 예입니다 강의 버그. 917 00:38:02,390 --> 00:38:03,894 OK 그래서 자네 이름이 뭐였더라? 918 00:38:03,894 --> 00:38:04,560 청중 : 줄리아. 919 00:38:04,560 --> 00:38:07,559 데이비드 J. 마란 : 줄리아, 당신은 팝업 수 출력 및 척 당신은 결코이 있었다? 920 00:38:07,559 --> 00:38:09,040 OK, 이것은 결코 일어나지 않았다. 921 00:38:09,040 --> 00:38:09,680 감사합니다. 922 00:38:09,680 --> 00:38:12,180 그래서 우리는 삽입한다고 가정 이 연결리스트에 줄리아. 923 00:38:12,180 --> 00:38:13,780 그녀는 20 번이다. 924 00:38:13,780 --> 00:38:15,530 그리고 물론 그녀는이다 에 속하는 것 925 00:38:15,530 --> 00:38:17,521 begin-- 아직 아무것도 가리하지 않습니다. 926 00:38:17,521 --> 00:38:20,020 그래서 당신의 손은 가지가 될 수 아래 null 또는 일부 쓰레기 값입니다. 927 00:38:20,020 --> 00:38:21,210 의 빠른 이야기를 보자. 928 00:38:21,210 --> 00:38:22,980 나는 5 번이 시간을 가리키는거야. 929 00:38:22,980 --> 00:38:23,880 그럼 난 9 확인. 930 00:38:23,880 --> 00:38:25,130 그럼 17은 확인합니다. 931 00:38:25,130 --> 00:38:26,247 그럼 22은 확인합니다. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 그리고, 우, 줄리아 실현 22 전에 갈 필요가있다. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 어떤 일이 일어날 필요가 있겠습니까? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 누구의 손을 변경해야합니까? 938 00:38:36,910 --> 00:38:38,360 줄리아, 광산,에 올 이름이 뭐였더라? 939 00:38:38,360 --> 00:38:39,230 >> 청중 : 기독교. 940 00:38:39,230 --> 00:38:40,060 >> 데이비드 J. 마란 : 기독교 나? 941 00:38:40,060 --> 00:38:40,560 >> 청중 : 앤디. 942 00:38:40,560 --> 00:38:40,905 >> 데이비드 J. 마란 : 앤디. 943 00:38:40,905 --> 00:38:41,654 기독교 나 앤디? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 앤디 가리 필요가 있겠습니까? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 줄리아. 948 00:38:47,341 --> 00:38:47,840 좋아. 949 00:38:47,840 --> 00:38:48,960 그래서 앤디, 당신은 줄리아 가리 하시겠습니까? 950 00:38:48,960 --> 00:38:50,120 그러나 분을 기다립니다. 951 00:38:50,120 --> 00:38:53,260 지금까지의 이야기에서, 나는 일의 종류 해요 952 00:38:53,260 --> 00:38:56,800 의미에서 충전에 그 포인터입니다 것입니다 953 00:38:56,800 --> 00:38:57,850 목록을 이동. 954 00:38:57,850 --> 00:39:00,800 우리는 앤디의 이름을 가지고 있지만, 수 앤디라는 어떤 변수가 없습니다. 955 00:39:00,800 --> 00:39:04,320 우리가 유일한 변수입니다 첫째, 게이브으로 표시 누가. 956 00:39:04,320 --> 00:39:07,690 >> 그래서이 이유 때문에 실제로 지금까지 우리는 이것을 필요하지했습니다. 957 00:39:07,690 --> 00:39:10,846 하지만 지금은 화면에이 PRED 포인터를 다시 언급. 958 00:39:10,846 --> 00:39:11,970 그래서 좀 더 명시 적으로 할 수 있습니다. 959 00:39:11,970 --> 00:39:14,820 이 포인터 인 경우, 내가 더 잘했다 좀 더 지능 얻을 960 00:39:14,820 --> 00:39:15,950 내 반복에 대한 정보가 포함되어 있습니다. 961 00:39:15,950 --> 00:39:19,580 내 여기를 통과 괜찮다면 다시 여기를 가리키는 여기를 가리키는. 962 00:39:19,580 --> 00:39:22,500 그러나 나를 PRED 포인터를하자, 이전 포인터, 그건 963 00:39:22,500 --> 00:39:24,740 가지 가리키는 요소 난 그냥 있었다. 964 00:39:24,740 --> 00:39:27,330 그래서 내가 여기에 갈 때, 지금 내 왼쪽 손으로 업데이트됩니다. 965 00:39:27,330 --> 00:39:29,370 여기에 내 왼손 업데이트를 갈 때. 966 00:39:29,370 --> 00:39:33,090 지금은에 대한 포인터뿐만 아니라이 줄리아 후가는 요소 967 00:39:33,090 --> 00:39:36,300 난 여전히 포인터가 앤디, 전에 요소입니다. 968 00:39:36,300 --> 00:39:39,430 그래서 당신은 본질적으로 접근 할 수 빵 부스러기, 만약에 당신, 969 00:39:39,430 --> 00:39:41,500 필요한 포인터의 모든. 970 00:39:41,500 --> 00:39:43,710 >> 내가 가리키는있어 경우에 따라서 앤디와 나는 또한 가리키는거야 971 00:39:43,710 --> 00:39:47,105 그의 손 기독교에서 지금은 다른 곳에서 지적해야 하는가? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 앤디 그래서 지금 줄리아에 가리킬 수 있습니다. 974 00:39:51,960 --> 00:39:54,460 줄리아는 이제 기독교에서 가리킬 수 있습니다. 975 00:39:54,460 --> 00:39:56,950 그녀는 복사 할 수 있기 때문에 내 오른쪽의 포인터. 976 00:39:56,950 --> 00:40:00,044 그리고 효과적으로 당신을두고 다시 여기이 장소에. 977 00:40:00,044 --> 00:40:02,460 그래서 짧은, 심지어이 비록 영원히 종류의 우리를 복용 978 00:40:02,460 --> 00:40:04,510 실제로 업데이트하려면 목록을 연결 실현 979 00:40:04,510 --> 00:40:06,580 작업이 상대적으로 간단하다. 980 00:40:06,580 --> 00:40:10,030 그것은, 둘, 하나의 세입니다 궁극적으로 코드 라인. 981 00:40:10,030 --> 00:40:12,780 하지만 그 감싸 아마도 코드 라인 982 00:40:12,780 --> 00:40:16,350 논리의 약간은 효율적이다 질문, 우리가 요청? 983 00:40:16,350 --> 00:40:18,970 우리가 처음이고, 중간 또는 최종? 984 00:40:18,970 --> 00:40:21,890 >> 이제 확실히 다른있다 우리가 구현하는 작업. 985 00:40:21,890 --> 00:40:24,880 그리고 여기이 그림은 묘사 우리가 단지 인간과 않았다. 986 00:40:24,880 --> 00:40:26,080 무엇 제거에 대한? 987 00:40:26,080 --> 00:40:30,650 내가하고 싶은 경우에, 예를 들어, 번호를 제거 34 또는 55, 988 00:40:30,650 --> 00:40:34,680 I는, 코드의 종류가 동일 할 수도 하지만 난 하나 또는 두 개의 단계를 필요 해요. 989 00:40:34,680 --> 00:40:36,110 새로운 무엇 때문에? 990 00:40:36,110 --> 00:40:40,460 나는 마지막에 사람을 제거하는 경우, 수와 같은 55 다음 34, 991 00:40:40,460 --> 00:40:42,995 무엇도 나는 할 수로 변경할 수있다? 992 00:40:42,995 --> 00:40:44,870 나는 evict--되지해야 이름이 뭐였더라? 993 00:40:44,870 --> 00:40:45,380 >> 청중 : 잭. 994 00:40:45,380 --> 00:40:46,255 >> 데이비드 J. 마란 : 잭. 995 00:40:46,255 --> 00:40:49,770 나는 evict-- 무료 잭뿐만 아니라에있다 그래서 말 그대로 최소한 무료 잭에게 전화를 걸거나 996 00:40:49,770 --> 00:40:53,530 이 포인터도하지만 지금은 무슨 일이 피터와 함께 변경해야? 997 00:40:53,530 --> 00:40:55,510 그의 손은 더 아래로 가리키는 시작합니다. 998 00:40:55,510 --> 00:40:59,300 최대한 빨리 내 무료 전화로 인해 잭, 베드로는 여전히 잭을 가리키는 경우 999 00:40:59,300 --> 00:41:02,530 나는 때문에 통과 유지 목록 및 액세스이 포인터, 1000 00:41:02,530 --> 00:41:05,650 그 때 우리의 오랜 친구 분할이다 실제로 킥 있습니다 잘못. 1001 00:41:05,650 --> 00:41:07,860 우리가 준 때문에 잭 메모리 백업합니다. 1002 00:41:07,860 --> 00:41:10,760 >> 당신은 거기에 머물 수 가벼운 부상을 입 그냥 잠시. 1003 00:41:10,760 --> 00:41:13,410 우리는 몇 가지를 가지고 있기 때문에 최종 작업은 고려. 1004 00:41:13,410 --> 00:41:15,600 리스트의 헤드를 제거 beginning--이 하나의 나 1005 00:41:15,600 --> 00:41:16,349 조금 짜증나. 1006 00:41:16,349 --> 00:41:19,640 우리가 알고 있기 때문에 게이브 가지 특별한 프로그램입니다. 1007 00:41:19,640 --> 00:41:21,440 때문에 실제로 그는 자신의 포인터를 가지고있다. 1008 00:41:21,440 --> 00:41:24,860 그는 단지에서 지적하지 않을 것 여기에 거의 모든 사람들이 다른 때문이다. 1009 00:41:24,860 --> 00:41:28,112 >> 그래서리스트의 헤드 인 경우 누구의 손을 지금 변경해야 제거? 1010 00:41:28,112 --> 00:41:29,070 당신의 이름이 뭐죠? 1011 00:41:29,070 --> 00:41:29,450 >> 청중 : 크리스틴. 1012 00:41:29,450 --> 00:41:31,408 >> 데이비드 J. 마란 : 나는 끔찍 해요 이름에서, 분명히. 1013 00:41:31,408 --> 00:41:34,011 그래서 크리스틴과 게이브, 누구의 손을 변경해야 1014 00:41:34,011 --> 00:41:36,510 우리는 크리스틴을 제거하려고 할 때, 그림에서 숫자 5,? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 OK, 그래서 게이브을 할 수 있습니다. 1017 00:41:38,820 --> 00:41:40,950 게이브 가리키는 것, 아마도, 9 번에서. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 하지만 다음에 무슨 일이 일어날 것인가? 1020 00:41:44,642 --> 00:41:46,600 청중 : 크리스틴해야 [INAUDIBLE] null이. 1021 00:41:46,600 --> 00:41:50,244 데이비드 J. 마란 : OK, 우리는 아마해야 make-- 어디 선가 "널 (null)"들었다. 1022 00:41:50,244 --> 00:41:51,410 청중 : 널 (null)와 그녀의 자유. 1023 00:41:51,410 --> 00:41:51,855 데이비드 J. 마란 그럼 NULL은 무엇? 1024 00:41:51,855 --> 00:41:53,074 청중 : 널 (null)와 그녀의 자유. 1025 00:41:53,074 --> 00:41:54,490 데이비드 J. 마란 : 널 (null)와 그녀의 자유. 1026 00:41:54,490 --> 00:41:55,422 그래서 이것은 매우 간단합니다. 1027 00:41:55,422 --> 00:41:58,380 그리고 그것은 당신이 지금 일종의 걸 완벽 의 소속, 거기 서. 1028 00:41:58,380 --> 00:42:00,430 당신은 했소 리스트에서 분리. 1029 00:42:00,430 --> 00:42:02,820 당신은 효과적으로 봤는데 목록에서 고아. 1030 00:42:02,820 --> 00:42:07,770 그래서 우리는 더 나은 지금 무료로 전화했다 크리스틴은 그 메모리를 다시 얻었다. 1031 00:42:07,770 --> 00:42:10,240 그렇지 않으면 때마다 우리 리스트에서 노드를 삭제 1032 00:42:10,240 --> 00:42:14,230 우리는 목록을 만들 수 있습니다 짧은, 그러나 실제로 감소하지 1033 00:42:14,230 --> 00:42:15,096 메모리의 크기입니다. 1034 00:42:15,096 --> 00:42:17,720 그래서 우리는 계속 추가 할 경우 추가 목록에 물건을 추가, 1035 00:42:17,720 --> 00:42:19,280 내 컴퓨터가 느려질 수 있습니다 과 느린 속도가 느린, 1036 00:42:19,280 --> 00:42:21,740 내가 부족 해요 때문에 메모리, 사실은 아니에요 경우에도 1037 00:42:21,740 --> 00:42:25,580 크리스틴의 바이트를 사용하여 메모리의 이상. 1038 00:42:25,580 --> 00:42:28,500 >> 그래서 결국 다른있다 course-- 제거 시나리오 1039 00:42:28,500 --> 00:42:30,640 중간 제거에 끝으로 우리는 보았다. 1040 00:42:30,640 --> 00:42:32,348 그러나 더 흥미를 도전은 지금 1041 00:42:32,348 --> 00:42:34,770 가는 정확히 고려 될 실행 시간은 무엇인지. 1042 00:42:34,770 --> 00:42:36,640 그래서뿐만 아니라 유지할 수 있습니다 종이 조각, 게이브, 경우, 1043 00:42:36,640 --> 00:42:38,640 당신이주는 상관 없어 모두 스트레스 공입니다. 1044 00:42:38,640 --> 00:42:42,100 우리의 연결리스트에 정말 감사합니다 여기에 자원 봉사자, 당신이 할 수 있다면. 1045 00:42:42,100 --> 00:42:45,320 >> [박수] 1046 00:42:45,320 --> 00:42:46,700 >> 데이비드 J. 마란 : 좋습니다. 1047 00:42:46,700 --> 00:42:51,110 분석의 그래서 몇 다음 질문, 내가 할 수있는 경우. 1048 00:42:51,110 --> 00:42:59,670 우리는 전에이 표기법을 본 적이 큰 O와 오메가, 상한 1049 00:42:59,670 --> 00:43:02,520 과에 하한 어떤 알고리즘의 실행 시간. 1050 00:43:02,520 --> 00:43:04,950 그래서 그냥 생각 해보자 몇 가지 질문. 1051 00:43:04,950 --> 00:43:07,090 >> 하나, 우리는 그것을했다 전에 실행은 무엇인가 1052 00:43:07,090 --> 00:43:10,647 검색 시간 큰 O의 관점에서 목록? 1053 00:43:10,647 --> 00:43:13,480 어떻게 실행에 상한이다 연결리스트를 검색하는 시간 1054 00:43:13,480 --> 00:43:16,340 여기에 우리의 자원 봉사자들에 의해 구현 된? 1055 00:43:16,340 --> 00:43:17,820 그것은 N의 큰 O, 선형입니다. 1056 00:43:17,820 --> 00:43:20,630 최악의 경우로 인해 요소, 55 등, 1057 00:43:20,630 --> 00:43:23,830 우리는 여기서 할 수 있습니다에보고 될 수 있습니다 잭, 마지막에 모든 방법이었다. 1058 00:43:23,830 --> 00:43:28,250 그리고 불행하게도, 배열과는 달리 우리는이 시간을 멋진 얻을 수 없습니다. 1059 00:43:28,250 --> 00:43:31,820 우리는 모든 인간의 되었더라도 작은 요소, 5 정렬 1060 00:43:31,820 --> 00:43:35,900 더 큰 요소까지 모든 방법, 55, 즉 일반적으로 좋은 일입니다. 1061 00:43:35,900 --> 00:43:38,815 그러나 가정을 무엇을 더 이상 우리가 수행 할 수 없습니다? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 청중 : [들리지] 1064 00:43:40,650 --> 00:43:40,920 데이비드 J. 마란은 : 다시 말해? 1065 00:43:40,920 --> 00:43:41,800 청중 : 임의 액세스 할 수 있습니다. 1066 00:43:41,800 --> 00:43:43,049 데이비드 J. 마란 : 임의 액세스 할 수 있습니다. 1067 00:43:43,049 --> 00:43:46,330 그리고 차례로 그없이 우리가 할 수있는 것을 의미 더 이상 약한 제로, 직관을 사용 1068 00:43:46,330 --> 00:43:49,365 바이너리를 사용하고 명백한 검색 및 분할 및 정복. 1069 00:43:49,365 --> 00:43:51,240 비록 때문에 우리 인간은 분명 수 1070 00:43:51,240 --> 00:43:54,610 앤디 나 기독교라고 볼 수 대략 목록의 중간에, 1071 00:43:54,610 --> 00:43:57,670 우리는 같은 알고 목록을 걷어 컴퓨터 1072 00:43:57,670 --> 00:43:59,029 처음부터. 1073 00:43:59,029 --> 00:44:00,570 그래서 우리는 랜덤 액세스를 포기했습니다. 1074 00:44:00,570 --> 00:44:04,380 >> N의 그래서 큰 O는 이제 상단입니다 우리의 검색 시간에 바인딩됩니다. 1075 00:44:04,380 --> 00:44:07,920 무엇을 우리의 검색 오메가에 대한? 1076 00:44:07,920 --> 00:44:11,535 하한 검색에 무엇입니까 이 목록의 일부 번호? 1077 00:44:11,535 --> 00:44:12,410 청중 : [들리지] 1078 00:44:12,410 --> 00:44:13,040 데이비드 J. 마란은 : 다시 말해? 1079 00:44:13,040 --> 00:44:13,420 관객 : 한. 1080 00:44:13,420 --> 00:44:13,800 데이비드 J. 마란 : 한. 1081 00:44:13,800 --> 00:44:14,760 그래서 일정 시간. 1082 00:44:14,760 --> 00:44:17,020 최상의 경우 크리스틴이다 실제로 목록의 시작 부분에. 1083 00:44:17,020 --> 00:44:19,020 그리고 우리는을 찾고 숫자 5는, 그래서 우리는 그녀를 발견했다. 1084 00:44:19,020 --> 00:44:19,787 그래서 더 큰 문제. 1085 00:44:19,787 --> 00:44:22,370 하지만 그녀는에있을거야 이 경우,리스트의 시작. 1086 00:44:22,370 --> 00:44:23,745 뭔가에 대해 무엇을 삭제 하시겠습니까? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 당신은 요소를 삭제하기 위해 무엇을해야할까요? 1089 00:44:26,300 --> 00:44:29,200 무슨 상한과 하한입니다 링크에서 뭔가 삭제에 1090 00:44:29,200 --> 00:44:29,699 목록? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 청중 : [들리지] 1093 00:44:36,070 --> 00:44:36,420 데이비드 J. 마란은 : 다시 말해? 1094 00:44:36,420 --> 00:44:37,067 대상 : 명. 1095 00:44:37,067 --> 00:44:38,900 데이비드 J. 마란 : n은 바운드 실제로 위. 1096 00:44:38,900 --> 00:44:41,700 최악의 경우에 우리는 시도로 인해 우리가했던 것처럼, 잭을 삭제합니다. 1097 00:44:41,700 --> 00:44:43,050 그는 마지막에있는 모든 방법입니다. 1098 00:44:43,050 --> 00:44:45,419 우리를 영원히 간다, 또는 N 단계는 그를 찾을 수 있습니다. 1099 00:44:45,419 --> 00:44:46,460 그래서 상한을합니다. 1100 00:44:46,460 --> 00:44:47,430 즉, 확인, 선형입니다. 1101 00:44:47,430 --> 00:44:50,970 그리고 최상의 경우는 시간을 실행 또는 최상의 경우에서 하한 1102 00:44:50,970 --> 00:44:51,975 일정 시간이 될 것이다. 1103 00:44:51,975 --> 00:44:54,600 어쩌면 우리가 삭제하려고하기 때문에 크리스틴, 그리고 우리는 단지 운 1104 00:44:54,600 --> 00:44:55,558 그녀는 처음입니다. 1105 00:44:55,558 --> 00:44:56,350 지금 분을 기다립니다. 1106 00:44:56,350 --> 00:44:59,370 게이브, 시작 부분도 있었다 우리는 또한 게이브을 업데이트했다. 1107 00:44:59,370 --> 00:45:01,150 그래서 단 하나의 단계 만이 아니었다. 1108 00:45:01,150 --> 00:45:04,210 그래서 그것은 참 일정 시간, 최상의 경우에, 1109 00:45:04,210 --> 00:45:06,345 가장 작은 요소를 제거하려면? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 그것은이있을지라도 그것은이다 코드 셋, 또는 100 라인 1112 00:45:10,960 --> 00:45:14,000 그것의 동일한 수 있다면 하지 어떤 루프 라인, 1113 00:45:14,000 --> 00:45:16,577 및 크기와 무관 목록의, 절대적으로. 1114 00:45:16,577 --> 00:45:18,660 요소에서 삭제 리스트의 처음 1115 00:45:18,660 --> 00:45:21,940 우리는 처리 할 경우에도 게이브는 아직 일정 시간이다. 1116 00:45:21,940 --> 00:45:24,220 >> 그래서이 보인다 뒤로 거대한 단계를 포함한다. 1117 00:45:24,220 --> 00:45:27,000 그리고 시간의 낭비 다 , 만약 주 하나 주에서 1118 00:45:27,000 --> 00:45:30,250 제로 우리는뿐만 아니라했다 의사 코드 그러나 실제 코드 1119 00:45:30,250 --> 00:45:35,780 로그가 뭔가를 구현하는 베이스 N, 또는 로그, 오히려, N의,베이스 (2), 1120 00:45:35,780 --> 00:45:37,150 그 주행 시간적. 1121 00:45:37,150 --> 00:45:40,710 그래서 도대체 우리가 시작하려는 이유 연결리스트 같은 것을 사용하고 계십니까? 1122 00:45:40,710 --> 00:45:41,517 그래. 1123 00:45:41,517 --> 00:45:44,022 >> 청중 : 그래서 당신은 추가 할 수 있습니다 배열에 요소. 1124 00:45:44,022 --> 00:45:46,230 데이비드 J. 마란 : 그래서 당신이 할 수있는 배열에 요소를 추가 할 수 있습니다. 1125 00:45:46,230 --> 00:45:47,550 그리고이 너무 주제이다. 1126 00:45:47,550 --> 00:45:49,740 그리고 우리는 계속 볼 것 이,이 트레이드 오프, 많은 1127 00:45:49,740 --> 00:45:51,573 같은 우리가 본 적이 병합 정렬과 트레이드 오프. 1128 00:45:51,573 --> 00:45:54,606 우리는 정말로 속도를 높일 수 오히려 검색하거나 정렬 1129 00:45:54,606 --> 00:45:57,480 우리가 조금 더 많은 공간을 할애 경우 메모리의 추가적인 청크를 가지고 1130 00:45:57,480 --> 00:45:58,760 또는 병합 정렬을위한 배열입니다. 1131 00:45:58,760 --> 00:46:01,270 그러나 우리는 더 많은 지출을 공간,하지만 우리는 시간을 절약 할 수 있습니다. 1132 00:46:01,270 --> 00:46:04,820 이 경우, 우리는 야 시간을 포기하지만 우리는있어 1133 00:46:04,820 --> 00:46:08,170 유연성을 얻고, 동성 만약에 당신, 1134 00:46:08,170 --> 00:46:10,280 이는 틀림없이 긍정적 인 기능입니다. 1135 00:46:10,280 --> 00:46:11,520 >> 우리는 또한 공간을 지출하고 있습니다. 1136 00:46:11,520 --> 00:46:13,710 어떤 의미에서 연결되어 있습니다 더 비싼 목록 1137 00:46:13,710 --> 00:46:15,700 배열보다 공간의 측면에서? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 어디 여분의 공간에서오고있다? 1140 00:46:19,920 --> 00:46:20,460 그래? 1141 00:46:20,460 --> 00:46:21,800 >> 청중 : [들리지] 포인터. 1142 00:46:21,800 --> 00:46:23,310 >> 데이비드 J. 마란 : 그래, 우리 또한 포인터를 가지고있다. 1143 00:46:23,310 --> 00:46:25,560 그래서이 minorly 짜증나 그 더 이상 어디로 없습니다 1144 00:46:25,560 --> 00:46:27,780 난 그냥 int를 저장 int를 나타냅니다. 1145 00:46:27,780 --> 00:46:30,990 나는 INT 및 저장 해요 또한 32 비트 포인터. 1146 00:46:30,990 --> 00:46:33,470 그래서 말 그대로 두 배로 해요 공간의 양을 포함했다. 1147 00:46:33,470 --> 00:46:36,040 그래서 트레이드 오프,이지만 그 INT의 경우입니다. 1148 00:46:36,040 --> 00:46:39,580 , 당신은 정수를 저장하지 않을 것을 가정 하지만, 이들 각각의 사각형을 가정 1149 00:46:39,580 --> 00:46:43,290 또는 이들 각각은 인간 나타내는 하였다 단어, 영어 단어 그 1150 00:46:43,290 --> 00:46:46,430 5 자, 열 수 있습니다 자, 어쩌면 더. 1151 00:46:46,430 --> 00:46:49,940 그럼 그냥 32 더 많은 비트를 추가 큰 문제가 덜 될 수 있습니다. 1152 00:46:49,940 --> 00:46:52,160 >> 어떤 학생의 각 경우 데모에서 1153 00:46:52,160 --> 00:46:55,107 했다 문자 그대로 학생 구조체가 아마 이름과 주택과가 1154 00:46:55,107 --> 00:46:57,065 전화 번호와 트위터 처리 등을들 수있다. 1155 00:46:57,065 --> 00:46:59,564 그래서 모든 필드의 우리는 시작 다른 일에 대해 얘기, 1156 00:46:59,564 --> 00:47:02,410 와 같은 큰 문제의 훨씬 더 우리의 노드는 더 흥미로워 1157 00:47:02,410 --> 00:47:05,972 큰, 어, 추가를 지출 포인터는 함께 연결합니다. 1158 00:47:05,972 --> 00:47:07,180 그러나 실제로는 트레이드 오프입니다. 1159 00:47:07,180 --> 00:47:09,560 그리고 실제로, 코드는 더 복잡한,대로거야 1160 00:47:09,560 --> 00:47:11,770 를 통해 감추고에 의해 참조 특정 예. 1161 00:47:11,770 --> 00:47:14,302 그러나이 있다면 여기에 몇 가지 성배. 1162 00:47:14,302 --> 00:47:17,010 우리는 조치를 취할하지 않으면 어떻게 거꾸로하지만 거대한 단계 앞으로 1163 00:47:17,010 --> 00:47:19,180 및 데이터를 구현 구조하는을 통해 우리 1164 00:47:19,180 --> 00:47:22,870 잭 또는 같은 요소를 찾을 수 있습니다 크리스틴 또는 다른 요소 1165 00:47:22,870 --> 00:47:25,870 사실 일정한 시간이 배열? 1166 00:47:25,870 --> 00:47:26,920 검색은 일정하다. 1167 00:47:26,920 --> 00:47:28,320 삭제는 일정하다. 1168 00:47:28,320 --> 00:47:29,570 삽입은 일정하다. 1169 00:47:29,570 --> 00:47:32,260 이러한 모든 작업은 일정하다. 1170 00:47:32,260 --> 00:47:33,750 즉, 우리의 성배 것입니다. 1171 00:47:33,750 --> 00:47:36,690 그리고 어디 우리 다음 시간을 선택할 것입니다. 1172 00:47:36,690 --> 00:47:38,600 다음을 참조하십시오. 1173 00:47:38,600 --> 00:47:39,371