>> 제이슨 허쉬 호른 : 모든 사람을 환영합니다 제 세븐.
우리는 물론 일주일에 일곱에 있습니다.
그리고 다가오는 목요일 할로윈 그래서 나는 어디로이다
호박처럼 옷을 입고.
나는 구부릴에 넣을 수 없습니다 난 왜 내 신발, 그래서 그건
그냥 양말을 신고.
또한 아래 아무것도 입고 있지 않다 그것의 경우이, 그래서 그것을 제외 할 수
당신에게 혼란.
나는 그것에 대해 미리 사과드립니다.
당신은 상상도 할 필요가 없습니다 무슨 일이 일어나고.
나는 팬티를 착용하고 있습니다.
그래서 모든 좋은입니다.
>> 내가 온 이유에 대해 긴 이야기를 가지고 호박으로 옷을 입고,하지만 난에 갈거야
이 섹션의 뒷부분에 그 내용을 저장 내가 시작하려는 때문에.
우리는 흥미로운 일들을 많이 가지고 이번 주에 이동합니다.
그들 대부분이 직접 관련 주의 문제 설정, 맞춤법 오류.
우리는 링크를 통해 갈거야 목록 및 해시 테이블
전체 섹션.
나는 매주 목록을이 목록을 넣어 당신이 당신을 도울 수에 대한 자원
이 과정에서 재료.
손실의 경우 또는 경우 일부를 찾고 자세한 내용은 다음 중 하나를 체크 아웃
이러한 자원.
>> 또, pset6는 맞춤법 오류입니다, 이번 주 PSET.
그리고 그것은 또한 당신을 격려, 그리고 다른를 사용하기를 권장
자원 특히이 PSET하십시오.
특히, 세 I했습니다 화면에 나열 -
우리가 잘 알고 있었어요 GDB, 지금 잠시 동안 사용하고있다
이번 주 매우 도움이 될 것이다.
그래서 나는 여기에서 그졌습니다.
그러나 때마다 당신은 C와 함께 작업하고, 당신은 항상 GDB를하기 위해 사용되어야한다
프로그램을 디버깅합니다.
이번 주에는 또한 Valgrind의.
사람은 Valgrind의가 무엇을 알고 있나요?
>> 청중 : 그것은 메모리 누수를 확인?
>> 제이슨 허쉬 호른 : Valgrind의 메모리 누수를 확인합니다.
그래서 경우에 당신의 malloc 뭔가 당신의 이 프로그램은, 당신은 메모리를 요구하고 있습니다.
프로그램의 끝에서, 당신은이 당신이 모든 걸에서 무료로 쓸 수
다시 메모리를 제공하기 위해 malloc으로 할당.
당신은 말에 무료로 작성하지 않은 경우 프로그램은 결론에 온다
모든 것이 자동으로 켜집니다 해제.
그리고 작은 프로그램을 위해, 그것의 그 큰되지 거래.
하지만 당신은 더 이상 실행을 작성하는 경우 종료되지 않는 프로그램,
반드시 분의 몇 초 부부라면, 메모리 누수
큰 거래 될 수 있습니다.
>> 그래서 pset6에, 기대는 것입니다 당신은 영 (0)으로 메모리 누수를해야합니다
프로그램.
메모리 누수를 확인하기 위해, 실행 Valgrind의 그것은 당신에게 좋은 줄 것이다
출력 당신이 있는지 여부를 알려주는 또는 모든 무료 아니었다.
우리는 나중에 연습합니다 오늘, 희망.
>> 마지막으로, diff 명령.
당신은 유사한 것을 사용 들여다 도구 pset5에.
당신이 안쪽으로 볼 수있었습니다.
또한 당,도 비교를 사용 문제는 사양을 설정합니다.
하지만 당신은 할 수 두 개의 파일을 비교합니다.
당신은 비트 맵 파일과 비교할 수 정보 직원 솔루션의 헤더와
pset5에서 솔루션의 경우 당신이 그것을 사용하기로 결정했습니다.
비교는 할 수 뿐만 아니라, 그렇게.
당신에 대한 올바른 답을 비교할 수 있습니다 답변으로 설정 이번 주 문제
그리고 볼 경우 최대 선 또는 참조 오류가있는 곳.
>> 그래서 그 세 가지 좋은 도구입니다 그 당신이 일주일 동안 사용하고한다
확실히 프로그램을 확인 이 세 가지 도구
그것은 안으로 켜기 전에
또, 매주 언급 한대로, 모두 - 만약 당신이 나를 위해 어떤 의견이 있으면
긍정적이고 건설적인 -
웹 사이트에 머리 주시기 바랍니다 이 슬라이드의 하단에
거기에 그것을 입력.
난 정말 감사 모든 의견.
그리고 당신은 나에게 특정 물건을주는 경우에 그 내가 걸 개선 할 또는 수
당신이 나를 좋아한다고 잘 내가 마음에 그것을 가지고 계속
정말 듣고 열심히 노력 당신의 의견에.
나는 내가 할거야 약속 할 수 없다 모든하지만, 착용 등
매주 의상 호박.
>> 그래서 우리는 대량의 지출 예정 부분은 내가 언급 한 바와 같이, 이야기
링크 된 목록 및 해시 테이블, 어떤 에 직접 적용 할 수있을 것입니다
문제는 이번 주에 설정합니다.
링크 된 목록은 우리가 상대적으로 갈거야 우리는 공정한 조금을 썼다 신속하게하기 때문에
시간의 부분에서 연습 해.
그래서 우리는 바로 들어갈 수 있습니다 링크 된 목록에 대한 문제를 코딩.
그리고 마지막에 우리가 얘기하자 그들이에 어떻게 적용되는지에 테이블을 해시하고
주 문제는 설정.
>> 당신은 이전에이 코드를 본 적이있다.
이것은 구조체이며 정의된다 뭔가 새로운 노드라고합니다.
그리고 노드 안에 정수가있다 바로 여기에 대한 포인터가있다
다른 노드.
우리는 전에 본 적이.
이에오고있다 이제 몇 주.
우리가했던 포인터를 결합한 허용하고, 구조체, 작업
우리는 두 가지를 결합 할 하나의 데이터 타입으로 가지.
>> 화면에 무슨 일이 많이있다.
그러나 모두가 상대적으로해야한다 당신을 잘 알고.
첫 번째 줄에, 우리 새 노드를 선언합니다.
그리고 그 새로운 노드 안에, 내가 설정 하나에 해당 노드의 정수입니다.
우리는 내가 일을 해요 다음 줄에 참조 printf의 명령 만이 회색으로 표시했습니다
printf의 명령 정말 때문에 중요한 부분은 여기 라인 -
new_node.n.
점은 무엇을 의미 하는가?
>> 청중 : 노드로 이동 그것을위한 N 값을 평가합니다.
>> 제이슨 허쉬 호른 : 때문입니다 정확히 맞아.
점은 N 부분에게 접근을 의미 이 새로운 노드의.
이 다음 라인은 무엇입니까?
마이클.
>> 청중 : 그것은 다른 노드를 생성 즉, 새로운 노드를 가리 킵니다.
>> 제이슨 허쉬 호른 : 그래서하지 않습니다 새 노드를 만들 수 있습니다.
그것은 무엇을 만들어?
>> 청중 : 포인터.
>> 제이슨 허쉬 호른 : 노드에 대한 포인터, 여기 노드 *로 표시된 바와 같이.
그래서 노드에 대한 포인터를 만듭니다.
어느 노드가 가리키는 마이클에?
>> 청중 : 새로운 노드?
>> 제이슨 허쉬 호른 : 새로운 노드.
우리가했습니다 때문에 그리고이 가리키는 것 그것을 새로운 노드의 주소를 부여.
그리고 지금이 줄을 우리는 볼 수 의 두 가지 방법
같은 일을 표현.
그리고 지적하고 싶었 방법이 두 가지가 동일합니다.
첫 번째 줄에서, 우리는 역 참조 포인터.
그래서 우리는 노드로 이동합니다.
즉,이 별 의미합니다.
우리는 포인터를하기 전에 봤어요.
해당 노드로 이동합니다.
즉, 괄호 안에 있습니다.
그리고 도트 연산자를 통해 액세스 그 노드의 N 소자.
>> 그래서 구문을 복용 우리는 바로 여기 지금 보았다
포인터로 사용.
물론,이 경우 통화의 종류를 가져옵니다 당신은 그 괄호를 작성하는 -
그 스타와 그 점.
조금 바쁜 가져옵니다.
그래서 우리는 몇 가지 문법 설탕이있다.
그리고 여기이 선 -
ptr_node -> N.
즉, 똑같은 일을한다.
그래서이 두 줄의 코드는 동등 할 것
정확히 똑같은 일.
>> 하지만 전에 이러한 지적하고 싶었 우리는, 당신은 이해할 더 진행
정말 바로 여기에이 일이 있음 역 참조에 대한 그냥 문법 설탕
포인터 다음에가는 그 구조체의 해당 부분입니다.
이 슬라이드에 대한 질문?
OK.
>> 그래서 우리는 몇 가지를 통해 갈거야 당신이에 할 수있는 작업
연결리스트.
연결리스트, 리콜, 시리즈의입니다 서로를 가리 노드.
그리고 우리는 일반적으로 포인터로 시작 라는 헤드는, 일반적으로, 그 가리키는
목록의 첫 번째 일.
여기에서 첫 번째 줄에 우리 먼저 우리의 원래의 L가 있습니다.
그래서 그 것은 당신이 생각할 수있는 -이 바로 여기에 텍스트 당신은 생각할 수
우리가 저장 한 단지 포인터 어딘가 점
첫 번째 요소.
그리고이 연결리스트에서 우리는 네 개의 노드가 있습니다.
각 노드는 큰 상자입니다.
큰 내부의 큰 상자 상자에는 정수 부분입니다.
그리고 우리는 포인터 부분이 있습니다.
>> 이 상자는 그려져 있지 않습니다 얼마나 큰 규모 때문에
바이트의 정수?
얼마나 큰 지금은?
네.
그리고 포인터가 얼마나 큰입니까?
네.
그래서 정말, 우리가 그릴 수 있다면 이 두 상자를 확장 할 수
같은 크기 일 것입니다.
이 경우, 우리는 삽입 할 링크 된 목록에 뭔가.
그래서 당신은 우리가 삽입하고 여기에 아래로 볼 수 있습니다 다섯 우리는 순회
연결리스트, 찾을 곳을 다섯 이동 한 다음 삽입합니다.
>> 의 그 아래로 휴식과 가자 조금 더 천천히.
나는 보드를 가리 키도록하겠습니다.
그래서 우리는 우리의 노드가 다섯이 우리는 mallocs에서 만들었습니다.
왜 모두 웃 고있다?
농담.
OK.
그래서 우리는 다섯 malloc으로 할당했습니다.
우리는이 노드를 생성 한 다른 곳.
우리는 갈은 준비해야합니다.
우리는 전면의 시작 두 우리의 목록입니다.
그리고 우리는 삽입 할 정렬 방식.
>> 그래서 우리는 두 가지를보고 우리가 사용하고 싶은 경우에 사용하면된다 우리가 볼 때 다섯, 우리는 무엇을해야합니까
우리보다 뭔가?
무엇?
우리는 이것으로 다섯을 삽입 할 연결리스트, 그것을 정렬 유지.
우리는 두 번째를 참조하십시오.
그래서 우리는 무엇을해야합니까?
마커스?
>> 청중 : 포인터를 호출 다음 노드로.
>> 제이슨 허쉬 호른 : 왜 할 우리는 다음 단계로 이동?
>> 청중 : 그것은이기 때문에 목록의 다음 노드.
그리고 우리는 다른 위치를 알고있다.
>> 제이슨 허쉬 호른 : 그리고 5는 큰 2 개 이상, 특히.
우리는 정렬을 유지하려는 때문에.
그래서 다섯 개의보다 크다.
그래서 우리는 다음 단계로 이동합니다.
그리고 지금 우리는 네 가지에 도달합니다.
우리가 네 가지에 도달했을 때 어떤 일이 일어나는가?
>> 파이브 사보다 크다.
그래서 우리는 계속.
그리고 지금 우리는 6시입니다.
그리고 우리는 6시에 무엇을 볼 수 있습니까?
예, 카를로스?
>> 청중 : 6 다섯보다 크다.
>> 제이슨 허쉬 호른 : 6입니다 오보다.
우리가 원하는 곳 그래서의 다섯을 삽입합니다.
그러나 염두에 두어야하는 경우 우리 단지 여기에 포인터를 가지고 -
이것은 우리의 여분의 포인터 목록을 통과.
우린 6을 가리키는입니다.
우리는 무엇을 추적을 잃었습니다 여섯 전에 온다.
그래서 우리는에 무언가를 삽입 할 경우 그것을 유지하는이 목록은 분류 우리
아마 얼마나 많은 포인터를 필요로 하는가?
>> 대상 : 두 가지.
>> 제이슨 HIRSCHORN : 두.
하나는 현재의 추적 할 하나 하나의 트랙을 유지하는
이전.
이것은 단지 단일 연결 목록입니다.
그것은 오직 하나의 방향으로 진행한다.
우리는 이중 연결리스트를 가지고 있다면, 여기서 모든 것에 가리키고
그것과 그 이전 일 다음 후 우리는 그렇게 할 필요가 없을 것입니다.
그러나이 경우에 우리는 잃고 싶지 않아 경우에 우리 앞에 와서 무엇을 추적
우리는 다섯 곳을 삽입해야 중간에.
우리가 구를 삽입했다고 말했습니다.
때 무슨 일이 일어날 지 우리는 여덟있어?
>> 청중 : 당신은해야 할 것 그 널 포인트를 얻을.
NULL 대신 포인트를 갖는 당신은이 것 요소를 추가 한 다음이 수
그것은 구를 가리 킵니다.
>> 제이슨 HIRSCHORN : 그렇지.
그래서 우리는 팔을.
우리는 목록의 끝에 도달하기 때문에 이 null로 가리키고 있습니다.
그리고 지금, 대신 갖는 그것은을 가리 널 (null) 우리는 우리의 새로운 노드를 가리있다.
그리고 우리의 포인터를 설정 null로 새로운 노드.
아무도 질문이 있습니까 삽입하는 방법에 대한?
무엇 대해 상관하지 않는 경우 정렬 된 목록을 유지?
>> 청중 :에 그것을 찌르 시작 또는 끝.
>> 제이슨 HIRSCHORN :에 그것을 찌르 시작 또는 끝.
어느 우리는 어떻게해야합니까?
바비?
왜 말?
>> 청중 : 때문에 시작 이미 가득 차 있습니다.
>> 제이슨 HIRSCHORN : OK.
시작은 이미 가득 차 있습니다.
누가 바비에 대해 주장하려고합니다.
마커스.
>> 청중 : 그럼 당신은 아마 원하는 처음에 붙어 있기 때문에
당신은에 넣어 그렇지 않으면 경우 당신이해야 할 거라고 말
전체 목록을 통과.
>> 제이슨 HIRSCHORN : 그렇지.
우리는 런타임에 대해 생각하고이 경우, 끝에 삽입 런타임
N 것, 이것의 크기입니다.
삽입의 큰 O 런타임은 무엇입니까 처음에?
일정 시간.
그래서 당신은 유지에 대해 걱정하지 않는 경우 뭔가, 그냥 훨씬 더 정렬
이 목록의 시작 부분에 삽입합니다.
그리고 일정한 시간에 수행 할 수 있습니다.
>> OK.
다음 작업을 찾을 수있는 다른합니다 - 우리는 검색으로 이것을 표현한 것.
그러나 우리는을 통해 보는거야 일부 개체의 연결리스트.
너희들에 대한 코드를 볼 수있다 강의 전에 검색 할 수 있습니다.
그러나 우리는 종류의 단지로했다 삽입, 또는 적어도 삽입
뭔가를 정렬.
당신은을 통해 보면, 노드에서 노드를 가고, 당신은 당신이하고있는 번호를 찾을 때까지
찾고.
당신이 도달하면 어떻게됩니까 리스트의 끝?
나는 아홉 내가 찾고 있어요 말 목록의 끝에 도달한다.
우리는 무엇을해야합니까?
>> 청중 :는 false?
>> 제이슨 HIRSCHORN : false를 반환합니다.
우리는 그것을 찾을 수 없습니다.
당신은리스트의 끝에 도달하고 있으면 당신은 당신이하고있는 번호를 찾을 수 없습니다
을 찾고, 그것은 거기 아니에요.
에 대한 질문은 찾았나요?
이 정렬 된 목록 인 경우, 어떤 것 우리의 검색에 대해 다른 수?
그래.
>> 청중 : 그것은 첫 번째 값을 찾아 낼 것입니다 즉, 1보다 큰의
당신을 찾고있어 다음 false를 반환합니다.
>> 제이슨 HIRSCHORN : 그렇지.
따라서 정렬 된 목록의 경우, 우리는 얻을 경우 무엇보다 더 큰 무언가
우리가 찾고있는, 우리가 할 필요가 없습니다 목록의 마지막에 계속.
우리는 그 시점에서 false를 반환 할 수 있습니다 우리는 그것을 발견하지 않을거야 때문이다.
문제는 지금 우리가 이야기했습니다된다 정렬 된 연결리스트를 유지하는 것은,
정렬되지 않은 그들을 유지.
그게 당신이있어 뭔가 될 것 아마 생각해야 할 것
당신이 경우 코딩 문제는 다섯을 설정할 때 별도의와 해시 테이블을 선택
체인 접근하는 우리는 이상에 대해 이야기 할 것입니다.
>> 그러나 목록을 유지하는 가치가있다 다음 정렬 및 아마 가질 수
빠른 검색?
아니면 신속하게 삽입하는 것이 좋습니다 다음 일정 런타임에 뭔가 있지만,
검색 이상이?
즉, 바로 거기에 트레이드 오프의 당신에게 그 더 적절한 결정을 얻을
특정 문제에 대한.
그리고 반드시 하나가 아니다 절대적으로 정답.
그러나 그것은 확실히 당신이 얻을 결정의 확인하고, 아마 좋은 방어
점에서, 말, 코멘트 나 두 이유 당신은 다른 통해 하나를 선택했다.
>> 마지막으로, 삭제.
우리는 삭제 봤어요.
그것은 검색과 유사합니다.
우리는 요소를 찾습니다.
우리는 6을 삭제하려고한다고 가정 해 봅시다.
그래서 우리는 여기 여섯을 찾을 수 있습니다.
우리는 확실히 우리 만들어야 할 것 할 것은 모두가 가리키는 것입니다
여섯 - 우리는 단계에서 볼 수 있듯이 여기 아래 두 -
여섯 요구를 가리키는 뭐든간에 지금 여섯을 건너로 변경
무엇이든 여섯 가리키는.
우리는 지금까지 나머지를 고아로하지 않는다 그 설정 잊고으로 우리의 목록
이전 포인터.
그리고 때때로, 따라 프로그램을, 그들은 단지거야
완전히이 노드를 삭제합니다.
때때로 당신은 반환 할 수 있습니다 이 노드의 값입니다.
그래서 작품을 삭제하는 방법입니다.
에 대한 질문은 삭제 하시겠습니까?
>> 청중 : 그래서 당신은 삭제하려고하는 경우 그것은, 당신은 무료로 사용하는 것이 때문에
아마도 그것은 malloc으로 할당 된?
>> 제이슨 HIRSCHORN : 당신은 무료로 할 경우 정확히 바로 당신 뭔가
그것을 malloc으로 할당.
우리는이 값을 반환한다고 가정 해 보자.
우리는 반환 할 수 있습니다 여섯 다음 무료 그것에이 노드와 전화 무료.
아니면 우리는 아마 최초의 무료 전화 것 다음 여섯을 반환합니다.
>> OK.
그래서 코딩 연습을 이동하자.
우리는 세 가지 기능을 코딩하는 것입니다.
첫 번째는 insert_node이라고합니다.
그래서 당신은 내가 당신을 이메일로 코드를 가지고 있고, 당신은 나중에이를보고하는 경우
당신 linked.c에서 코드에 액세스 할 CS50 웹 사이트에서 찾아 볼 수 있습니다.
그러나 linked.c 일부있다 이미 골격 코드
당신을 위해 작성되었습니다.
그리고 몇 가지 기능이 있어요 당신이 작성해야합니다.
>> 처음에 우리가 갈거야 insert_node 물품.
그리고 무엇 insert_node 않습니다 IS는 정수를 삽입합니다.
그리고 당신은 정수에게주는거야 연결리스트로.
특히, 당신이 필요합니다 정렬 된 목록을 유지하는
최소에서 최대로.
또한, 당신은하고 싶지 않아 중복을 삽입합니다.
마지막으로, 당신은 insert_node을 볼 수 부울을 반환합니다.
그래서 당신은 사용자에게 알려 야지 삽입되었는지 여부
true 또는 false를 반환하여 성공.
이 프로그램의 끝에서 -
이 단계에 당신은 필요로하지 않는다 아무것도 해제에 대해 걱정할 필요.
그래서 당신이하고있는 모든 정수를하고있다 그리고리스트에 삽입.
>> 그게 내가 지금 할 당신을 부탁 해요 것입니다.
다시, linked.c에, 어떤 당신 이 모두, 골격 코드입니다.
그리고 당신은 바닥으로 볼 수 샘플 함수 선언.
그러나, 코딩에 가기 전에 C에서, 내가보기 엔 이동하는 것이 좋습니다
단계를 통해 우리는 봤는데 매주 연습.
우리는 이미 겪었어요 이의 사진.
그래서 당신은 몇 가지 이해가 있어야 이 작업을 수행하는 방법의.
하지만 작성하는 것이 좋습니다 것 수정 전에 일부 의사
그리고 우리는 가서거야 그룹으로 의사.
그리고 당신이 작성한 번 의사, 우리가 작성한 한 번 우리의
그룹으로 의사, 당신은 할 수 C.에 코딩로 이동
>> 헤드 업, insert_node 함수 아마의 까다로운입니다
세 우리가 쓰는거야 때문에 에 몇 가지 추가 제약 조건을 추가
프로그래밍, 특히 그 당신은 어떤 삽입하지 않을거야
중복 및 그 목록 정렬을 유지해야한다.
그래서 이것은 비 단순 프로그램 당신이 코딩을 필요로 함을 의미합니다.
그리고 당신은 왜 일곱에 다섯을지지 않습니다 분은 작업을 얻을 수 있습니다
의사와 코드입니다.
그리고 우리가 시작됩니다 그룹으로가는.
다시 말하지만, 당신은 질문이있는 경우 손을 들어 내가 돌아올거야.
.
>> 우리는 또한 일반적으로 이러한 작업을 수행 -
아니면 명시 적으로 당신에게 말을하지 않습니다 사람들과 함께 작업 할 수 있습니다.
하지만 분명히, 내가보기 엔 당신을 격려, 당신은 질문이있는 경우에는, 부탁합니다
당신 옆에 앉아 이웃 또는 누군가와 함께 작동
다른 당신이 원한다면.
이 개인 일 필요는 없습니다 침묵하는 활동.
>> 의 일부를 쓰기 시작하자 보드에 의사.
누가 나에게의 첫 번째 라인을 제공 할 수 있습니다 이 프로그램의 의사?
이 기능의 경우, 오히려 - insert_node.
알덴?
>> 청중 : 그래서 내가 한 첫 번째 일은이었다 노드와 I에 새로운 포인터를 만들
그것은 동일한 가리키는 초기화 리스트가 가리키고있는 것.
>> 제이슨 HIRSCHORN : OK.
그래서 당신은 새로운 포인터를 만드는 목록이 아닌 노드에.
>> 청중 : 네.
그래.
>> 제이슨 HIRSCHORN : OK.
그리고 우리가 무엇을 할 수 있습니까?
그 후 무엇입니까?
어떤 노드에 대한?
우리는 노드를 필요가 없습니다.
우리는 단지 가치가있다.
우리는 노드를 삽입 할 경우, 어떤 일이 우리가 할 우리도 할 수 있습니다 전에 먼저해야 할
를 삽입하는 방법에 대한 생각?
>> 청중 : 아, 죄송합니다.
우리는 노드에 대한 공간을 MALLOC해야합니다.
>> 제이슨 HIRSCHORN : 좋음.
의는하자 -
OK.
그 높은 도달 할 수 없습니다.
OK.
우리는 아래로 갈 예정하고있어 우리는 두 개의 열을 사용하고 있습니다.
나도 갈 수 없습니다 -
OK.
새 노드를 만듭니다.
당신은 목록에 다른 포인터를 만들 수 있습니다 존재 또는 당신은 목록을 사용할 수 있습니다.
당신은 정말 그렇게 할 필요가 없습니다.
>> 그래서 우리는 새로운 노드를 만들 수 있습니다.
좋아요.
즉, 우리가 처음하는 일이다.
다음은?
>> 청중 : 잠깐.
우리는 지금 새로운 노드를 만들거나해야 우리가 있는지 확인하기 위해 대기해야
노드의 중복이 없다 목록에 전에 우리는 그것을 만들?
>> 제이슨 HIRSCHORN : 좋은 질문입니다.
그 이야기는 나중에하기 때문에 위해 그것을 유지하자 우리가 만들 수 있습니다 시간의 대부분
새 노드.
그래서 우리는 여기에 그하겠습니다.
그러나 그것은 좋은 질문입니다.
우리는 그것을 만들고 우리가 발견하는 경우 중복, 무엇을해야
우리는 반환하기 전에 무엇입니까?
>> 청중 : 그것을 해방.
>> 제이슨 HIRSCHORN : 네.
아마 해방.
OK.
우리는 이후 우리는 무엇을해야합니까 새 노드를 생성?
애니?
>> 청중 : 우리는 둘 노드의 수?
>> 제이슨 HIRSCHORN : 그렇지.
우리는 번호를 넣어 - 우리는 공간을 MALLOC.
나도 떠날거야 모두 한 줄로.
하지만 당신 말이 맞아.
우리는 그 공간을 MALLOC하고, 우리는 안으로 번호를 넣어
우리는 심지어 포인터를 설정할 수 있습니다 null로의 일부.
그게 바로 그렇습니다.
그리고 무엇을 그 후 약?
우리는 보드에이 사진을 끌었다.
그래서 우리는 무엇을해야합니까?
>> 청중 : 우리는 목록을 통해 이동합니다.
>> 제이슨 HIRSCHORN : 목록을 통해 이동합니다.
OK.
그리고 우리는 각 노드에서 무엇을 검사한다.
커트, 우리는 무엇을 확인합니까 각 노드에 대한?
>> 청중 :보기 N 값의 여부 그 노드는 N 값보다 큰
우리의 노드.
>> 제이슨 HIRSCHORN : OK.
내가 할거야 -
OK, 그래.
따라서 N의 -
나는 값이 큰 경우, 말거야 이 노드보다, 우리는 무엇을해야합니까?
>> 청중 : 글쎄, 우리는 삽입 바로 그 전에 것.
>> 제이슨 HIRSCHORN : OK.
그래서이보다 큰 경우에, 우리는 삽입 할.
그러나 우리는 바로 전을 삽입 할 또한 될 필요가 있기
추적을 유지하고, 전에 무슨의.
그래서 전에 삽입합니다.
그래서 우리는 아마 뭔가를 놓친 이전에.
우리는 아마 유지해야 무슨 일이 일어나고 있는지를 추적.
그러나 우리가 다시 얻을 수 있습니다.
그래서 값이보다 작?
커트, 우리는 경우 어떻게해야합니까 값보다 작?
>> 청중 : 그럼 그냥 계속 그것은 마지막 하나가 아니라면.
>> 제이슨 HIRSCHORN : 나는 좋아한다.
그래서 다음 노드로 이동합니다.
그것은 마지막 하나를 제외 -
우리는 아마 검사하고 조건의 측면에서.
하지만 그래, 다음 노드.
그리고는, 너무 낮은지고 그래서 우리는 여기에 이​​동합니다.
그러나 만약에 -
모든 사람이 볼 수 있습니까?
우리가 동일한 있다면 우리는 무엇을해야합니까?
값은 우리가 삽입하려는 경우 이 노드의 값과 동일한?
그래?
>> 청중 : [청취].
>> 제이슨 HIRSCHORN : 네.
이 주어 -
마커스 권리입니다.
우리는 어쩌면 할 수 있었다 다른 무엇인가.
그러나 여기, 우리가 만든 주어진 우리는 해방 후 반환해야합니다.
소년 아.
그것은 더 나은가요?
어떻게 그런 일이있어?
OK.
우리가하는 일 후 무료 [청취] 반환?
OK.
우리는 무엇을 누락?
그래서 우리는 어디를 추적하는 이전 노드의?
>> 청중 : 내가 갈 것이라고 생각 후 새 노드를 만들 수 있습니다.
>> 제이슨 HIRSCHORN : OK.
그래서 처음에 우리는 아마거야 -
그래, 우리는 새로운 포인터를 만들 수 있습니다 이전 노드 포인터와 같은 노드 및
현재 노드의 포인터.
그럼 그 여기에 삽입 할 수 있습니다.
만들기 현재 및 이전 노드에 대한 포인터.
그러나 때 우리가 그 포인터를 조정합니까?
우리가 코드에서 어디에해야합니까?
제프?
>> 대상 : - 값의 조건?
>> 제이슨 HIRSCHORN : 어느 특히 하나?
>> 청중 : 난 그냥 혼동하고 있습니다.
값이 노드보다 크면 그것은 당신이 가고 싶은 것을 의미하지 않는다
다음 노드로?
>> 제이슨 허쉬 호른 : 그래서 우리의 값이면 이 노드의 값보다 큰.
>> 청중 : 그래, 당신이 원하는 것 오른쪽 선 아래로 더 이상 갈?
>> 제이슨 허쉬 호른 : 오른쪽.
그래서 우리는 여기에 삽입하지 않습니다.
값은 현재 노드보다 작 으면 우리는 다음 노드로 이동 - 다음 또는 우리
전에 삽입합니다.
>> 청중이되는, 대기 노드와 어떤 가치인가?
>> 제이슨 허쉬 호른 : 좋은 질문입니다.
값이 함수의 정의에 따라 우리가 제공하는 것입니다.
그래서 값이 우리가 제공하고있는 번호입니다.
그래서 값이보다 작은 경우 노드는, 우리는 삽입하는 시간이 필요합니다.
값이 노드보다 크면 우리는 다음 노드로 이동합니다.
다시 원래의 질문에, 하지만, 어디 -
>> 청중 : 값이 큰 경우 이 노드보다.
>> 제이슨 허쉬 호른 : 그래서 우리는 여기에서 무엇을해야합니까?
달콤한.
즉 올바른 것입니다.
난 그냥 쓰는거야 업데이트 포인터.
그러나 네, 현재 하나 당신은으로 업데이트 할
다음 중 하나를 가리 킵니다.
다른 건 우리가 누락 되었습니까?
그래서 나는이를 입력 할거야 의 gedit에 코드.
나는이 작업을 수행하는 동안, 당신은있을 수 있습니다 코딩 작업에 몇 분 이상
이 C에서
>> 그래서 입력에게 의사가있다.
우리가 시작하기 전에 빠른 메모.
우리는 수에 완전하지 않을 수 있습니다 모든이를 완료
이러한 기능의 세 가지.
그들에게 올바른 해결책이 있습니다 난 너희들에게 이메일 것
섹션 뒤에, 그리고 것 CS50.net에 게시.
그래서 난 당신을 권장하지 않습니다 섹션을보고 이동합니다.
난에서 다음을 시도하는 것이 좋습니다 당신의 자신의 다음 연습을 사용
답을 확인하는 문제.
이들은 모두 설계되었습니다에 밀접하게 관련 및 준수 무엇
당신은 문제 세트에서 수행해야합니다.
그래서 나는이 연습을하는 것이 좋습니다 않습니다 자신에 다음에 코드를 사용
답을 확인합니다.
나는 해시에 이동하려는 않기 때문에 섹션의 어떤 시점에서 테이블.
그래서 우리는 모두 통과되지 않을 수 있습니다.
그러나 우리는 지금 우리가 할 수있는 많은 것을 할 수 있습니다.
>> OK.
우리가 시작합시다.
ASAM, 어떻게 우리는 새로운 노드를 만들려면 어떻게해야합니까?
>> 청중 : 당신은 * 구조체 않습니다.
>> 제이슨 허쉬 호른 : 그래서 우리 여기에이를 수 있습니다.
아, 죄송합니다.
당신은 * 구조체를 말 하였다.
>> 청중 : 그리고 [? 종류?] 노드 나 C 노드.
>> 제이슨 허쉬 호른 : OK.
나는 그것을 new_node 호출하는거야 그래서 우리는 일관성을 유지 할 수 있습니다.
>> 청중 : 당신은 그렇게 설정하려면 , 첫 번째 노드를 머리에.
>> 제이슨 허쉬 호른 : OK.
그래서 지금이 가리키는 - 그래서이 아직 새 노드를 생성하지 않았습니다.
이것은 단지를 가리키는 목록에있는 첫 번째 노드.
어떻게 새 노드를 만들려면 어떻게해야합니까?
나는 새로운 노드를 만들 공간이 필요합니다.
MALLOC.
그리고 얼마나 큰?
>> 청중 : 구조체의 크기입니다.
>> 제이슨 허쉬 호른 : 구조체의 크기입니다.
그리고 구조체는 무엇이라고?
>> 청중 : 노드?
>> 제이슨 허쉬 호른 : 노드.
그래서의 malloc (sizeof 연산자 (노드)); 우리에게 공간을 제공합니다.
그리고이 줄은 -
한 가지가이 선에 올바르지 않습니다.
구조체에 대한 포인터 new_node인가?
즉, 일반적인 이름입니다.
그것은 무엇인가 -
노드, 정확하게.
그것은 * 노드입니다.
그리고 우리는 바로 후 무엇을해야합니까 우리는 아산 무언가를 MALLOC?
우리가 가장 먼저하는 일이 무엇입니까?
어떻게 그것이 작동하지 않는 경우에?
>> 청중 : 아, 확인하면 노드를 가리키는?
>> 제이슨 허쉬 호른 : 그렇지.
그래서 new_node 경우 등호 동일 널 (null), 우리는 무엇을해야합니까?
이 부울,이 함수를 반환합니다.
정확히.
좋아 보인다.
거기에 추가 할 수 없나?
우리는 말에 일을 추가합니다.
그러나 지금까지 잘 보인다.
현재 및 이전 포인터를 만듭니다.
마이클, 나는 이것이 어떻게해야합니까?
>> 청중 : 당신은 것 노드를 수행하는 방법 *.
당신은 하나를하지 수 있도록해야 할 것 new_node뿐만 대한
노드는 우리가 이미 있습니다.
>> 제이슨 허쉬 호른 : OK.
따라서 현재 노드가 시작 됐어요.
그 CURR를 호출합니다.
괜찮아요.
우리는 우리가 유지하려는 결정했습니다 우리는 알 필요가 있기 때문에 두
어떻게 그 이전입니다.
그들은 무엇으로 초기화합니까?
>> 청중 : 우리의 목록에서 자신의 가치.
>> 제이슨 허쉬 호른 : 그래서 무엇인가 우리의 목록에 첫 번째 것은?
아니면 우리가 어떻게 알 수 있습니까 곳 우리의 목록의 시작은 무엇입니까?
>> 청중 :이 전달되지 않습니다 함수에?
>> 제이슨 허쉬 호른 : 오른쪽.
그것은 바로 여기에서 통과되었다.
이 함수에 전달 그래서 경우, 목록의 시작, 무엇을 우리가해야
동일한 전류를 설정?
>> 청중 : 목록.
>> 제이슨 허쉬 호른 : 목록.
그게 바로 그렇습니다.
지금은 주소를 가지고 우리의 목록의 시작.
그리고 무엇 이전에 대한?
>> 청중 : 목록을 뺀?
>> 제이슨 허쉬 호른 :있다 그 전에 아무 것도 없습니다.
그래서 우리는 아무것도 의미하지하기 위해 무엇을 할 수 있습니까?
>> 청중 : 널.
>> 제이슨 허쉬 호른 : 네.
좋은 생각처럼 들린다.
완벽한.
감사합니다.
목록을 이동합니다.
콘스탄틴, 얼마나 오래 갈까 목록을 이동하는 방법?
>> 청중 : 우리는 널 (null)에 도달 할 때까지.
>> 제이슨 허쉬 호른 : OK.
그래서, 만약 루프, 동안.
우리는 무엇을하고 있습니까?
>> 청중 : 아마 루프?
>> 제이슨 허쉬 호른 : 이제 루프를하자.
OK.
>> 청중 : 그리고 우리는 말할 -
현재 포인터까지 null이 동일하지 않습니다.
>> 제이슨 허쉬 호른 : 그래서 우리가 알고있는 경우 조건, 우리는 어떻게 루프를 작성할 수 있습니다
그 조건을 기반으로.
우리는 루프의 어떤 종류를 사용해야합니까?
>> 청중 : 동안.
>> 제이슨 허쉬 호른 : 네.
즉 기반으로 더 의미가 있습니다 당신이 말한 끕니다.
우리가 우리에 가고 싶은 경우는 것 단지 그 일을 알고 만들 것
while 루프를 수행하는 것이.
현재는 동일하지 NULL을하지,하지만 값은이 노드보다 작은 경우.
Akshar, 날이 선을 제공합니다.
>> 청중 : 만약 현재 -> N N 값 미만.
아니면 그 반대.
그 브래킷을 전환합니다.
>> 제이슨 허쉬 호른 : 죄송합니다.
>> 청중 : 브래킷을 변경합니다.
>> 제이슨 허쉬 호른 : 그래서 만약 값보다 크다.
그와 혼란 때문에 위의 언급, 내가 할거야.
그러나 예.
우리의 값이이보다 작은 경우 노드, 우리는 무엇을해야합니까?
오.
바로 여기에 있습니다.
전에 삽입합니다.
OK.
우리가 어떻게해야합니까?
>> 청중 : 그것은 나를 아직도 있나요?
>> 제이슨 허쉬 호른 : 네.
>> 청중 : 당신 -
new_node -> 다음.
>> 제이슨 허쉬 호른 : 그래서 무엇을 즉, 동일하게가는거야?
>> 청중 : 그것은 동일한 전류 것입니다.
>> 제이슨 허쉬 호른 : 그렇지.
그리고 다른 -
우리가 업데이트 밖의 무엇을해야합니까?
>> 청중 : 과거가 널 (null)에 해당하는지 확인합니다.
>> 제이슨 허쉬 호른 : 이동 이전하는 경우 -
그렇다면 이전은 null 같습니다.
>> 청중 : 그게 무슨 의미 머리가 될 수 있습니다.
>> 제이슨 허쉬 호른 : 그 말 그것은 머리되고있다.
그럼 우리는 무엇을해야합니까?
>> 청중 : 우리는 머리를 할은 new_node 같습니다.
>> 제이슨 허쉬 호른 : 머리 new_node 같습니다.
왜 나열하지, 여기에 머리?
>> 청중 : 머리는 글로벌이기 때문에 시작 장소입니다 변수.
>> 제이슨 허쉬 호른 : 스위트.
OK.
그리고 -
>> 청중 : 그럼 당신은 다른 않는보기 이전 -> 다음 new_node 같음.
그리고 당신은 true를 반환.
>> 제이슨 허쉬 호른 : 어디 할 우리는 new_node 끝을 설정?
>> 청중 : 나는 것 -
나는 처음에 그 설정합니다.
>> 제이슨 허쉬 호른 : 그래서 라인?
>> 청중 : 후 if 문 가 알려진 경우 확인.
>> 제이슨 허쉬 호른 : 바로 여기?
>> 청중 : 내가 할 것 new_node -> N 값과 같다.
>> 제이슨 허쉬 호른 : 좋은 데요.
아마 의미가 있습니다 - 우리는하지 않습니다 우리가 왜 왔는지 목록 알아야
우리는 다루고 있기 때문에 하나의 목록과 함께.
이처럼 더 나은 함수 선언 이것은 단지이 제거하는 것입니다
완전히 그냥 삽입 머리에 값.
우리는 심지어 알 필요가 없습니다 우리가 처한 어떤 목록
하지만 지금은 보관 것이다 다음 업데이트시 변경
슬라이드 및 코드.
그래서 지금은 좋아 보인다.
만약 값 -이 줄을 할 수 있습니까?
만약 -
우리는 노아, 여기에 무엇을해야합니까.
>> 청중 : 값이 큰 경우 N CURR->보다 -
>> 제이슨 허쉬 호른 : 어떻게 우리는 다음 노드로 이동?
>> 청중 : 문헌 [Curr -> n은 new_node 동일.
>> 제이슨 허쉬 호른 : 그래서 n은 구조체의 어떤 부분?
정수입니다.
그리고 new_node는 노드에 대한 포인터입니다.
그래서 우리는 CURR의 어떤 부분을 업데이트해야합니까?
하지 N 경우, 다른 부분은 무엇입니까?
노아, 다른 부분은 무엇인가.
>> 청중 : 아, 다음에.
>> 제이슨 허쉬 호른 : 다음, 정확하게.
정확히.
다음으로 오른쪽에 하나입니다.
그리고 우리는 다른 무엇을해야합니까 노아를 업데이트?
>> 청중 : 포인터.
>> 제이슨 허쉬 호른 : 그래서 우리는 현재 업데이트.
>> 청중 : 이전 -> 다음.
>> 제이슨 허쉬 호른 : 네.
OK, 우리는 일시 중지됩니다.
누가 여기에 우리를 도울 수 있는가?
마누, 우리는 무엇을해야 하는가?
>> 청중 : 당신은 설정할 수있어 그것은 CURR -> 다음에 해당.
그러나 이전 행하기 전에 해당 작업을 수행.
>> 제이슨 허쉬 호른 : OK.
다른 건?
Akshar.
>> 청중 : 당신이 생각하지 않는다 다음 CURR->를 변경하는 것을 의미했다.
당신이 CURR 같음을 의미 같아요 CURR -> 다음 노드로 이동 옆에.
>> 제이슨 허쉬 호른 : 그래서 죄송합니다, 어디?
어떤 줄에?
이 라인?
>> 청중 : 네.
확인 CURR 다음 CURR -> 같습니다.
>> 제이슨 허쉬 호른 : 그래서 정답 전류이므로
노드에 대한 포인터입니다.
그리고 우리는 다음을 가리 키도록 할 현재 점점 어떤 노드
을 지적했다.
CURR 자체는 다음이 있습니다.
그러나 우리는한다면 curr.next를 업데이트하기 위해, 실제 노트를 업데이트 할 것
그 자체가 아닌 곳 포인터가 가리키는했다.
어떤이 라인에 대한,하지만.
아비?
>> 청중 : 이전 -> 다음 CURR 같습니다.
>> 제이슨 허쉬 호른 : 그럼 다시, 만약 이전은 (는) 노드에 대한 포인터는 이전 -> 다음입니다
노드에있는 실제 포인터.
그래서이 업데이트 될 것이다 CURR에 노드에 포인터.
우리는 업데이트 할 수 없습니다 노드의 포인터.
우리는 이전 업데이트 할.
그래서 우리는 어떻게해야합니까?
>> 청중 : 그냥보기 이전 될 것이다.
>> 제이슨 허쉬 호른 : 오른쪽.
는 이전 노드에 포인터이다.
이제 우리는로 변경하고 노드에 새로운 포인터.
OK 우리가 아래로 이동하자.
마지막으로,이 마지막 조건.
제프, 우리는 여기에서 무엇을해야합니까?
>> 청중 : 값이있는 경우 CURR-> N과 동일.
>> 제이슨 허쉬 호른 : 죄송합니다.
맙소사.
무엇?
값 == CURR-> N.
우리는 무엇을해야합니까?
>> 청중 : 당신은 우리의 new_node을 무료 것, 다음은 false를 반환 것입니다.
>> 제이슨 허쉬 호른 :이 무엇인지 우리는 지금까지 작성했습니다.
사람은 무엇을해야합니까 우리가하기 전에 추가하는 방법?
OK.
의 해보자.
제어 단부에 도달 할 수있다 void가 아닌 함수의.
아비, 무슨 일이야?
>> 청중 : 당신은 수익을 넣어되어 있습니까 while 루프의 외부에 사실?
>> 제이슨 허쉬 호른 : 모르겠어요.
당신이 나를 하시겠습니까?
>> 청중 : 신경 쓰지 마세요.
아니오.
>> 제이슨 허쉬 호른 : Akshar?
>> 청중 : 나는 당신이 의미 생각 마지막에 반환 거짓을 넣어
while 루프의.
>> 제이슨 허쉬 호른 : 어디 당신은 어디로 가고 싶어?
>> 청중 : while 루프 외부처럼.
그래서 당신은 그 방법에게 while 루프를 종료하는 경우 당신은 끝에 도달했는지
아무것도 일이 없어요.
>> 제이슨 허쉬 호른 : OK.
그래서 우리는 여기에서 무엇을해야합니까?
>> 청중 : 당신은 false를 반환 이뿐만 아니라.
>> 제이슨 허쉬 호른 : 아, 두 곳에서 그것을 할?
>> 청중 : 네.
>> 제이슨 허쉬 호른 : OK.
우리가 가야하나요?
맙소사.
미안 해요.
나는 화면을 드려 죄송합니다.
그것은 종류의 우리에게 끼쳐 요.
그래서 옵션을 선택합니다.
제로는, 코드마다, 프로그램을 종료.
하나는 뭔가를 삽입합니다.
의 세 가지를 삽입 할 수 있습니다.
삽입이 성공하지 못했습니다.
나는 인쇄 할거야.
난 아무것도 필요가 없습니다.
OK.
어쩌면 그것은 단지 우연이었다.
하나를 삽입합니다.
성공하지.
OK.
의 정말 빨리 GDB를 통해 실행하자 무슨 일이 일어나고 있는지 확인합니다.
>> 의 GDB를 기억하십시오. / 이름하여 프로그램은 GDB로 우리를 가져옵니다.
많이 처리 할 수​​ 있다는 것입니다?
깜박이는?
아마.
눈을 감고 몇 가지 깊은을 당신이 피곤하면 호흡
의 그것을보고.
나는 GDB에있어.
GDB에서 내가 가장 먼저하는 일이 무엇입니까?
우리는 알아낼 수있어 무슨 일이 일어나고.
보자.
우리는 그림 6 분을 무슨 일인지.
주요 휴식.
그리고 내가 무엇을해야합니까?
카를로스?
실행합니다.
OK.
의이 옵션을 선택할 수 있습니다.
그리고 N 무엇을 하는가?
다음.
그래.
>> 청중 : 당신이 언급하지 않았다 -
당신은 머리는 것을 말하지 않았다 처음에 null로 초기화.
그러나 나는 당신이 그 확인을했다 생각했다.
>> 제이슨 허쉬 호른 : 가자 -의를 살펴 보자 GDB에, 그리고, 우리는 돌아 가야합니다.
당신이 이미 가지고있는 것처럼하지만 소리 무슨 일이 일어나고 있는지에 대한 몇 가지 아이디어.
그래서 우리는 뭔가를 삽입 할.
OK.
우리는 삽입했다.
int를 입력 해 주시기 바랍니다.
우리는 세 가지를 삽입 할 수 있습니다.
그리고 나는이 줄에 있어요.
어떻게 디버깅을 시작 가는가 삽입 기능을 알고?
맙소사.
즉 많은입니다.
것을 많이 났는데?
>> 청중 : 아, 그것은 죽었다.
>> 제이슨 허쉬 호른 : 그냥 그것을 꺼냈다.
OK.
>> 청중 : 어쩌면 그것은이다 와이어의 다른 쪽 끝.
>> 제이슨 허쉬 호른 : 와우​​.
그래서 결론 -
당신은 무엇을 말 했는가?
>> 청중 : 내가 말했듯이 기술의 아이러니 이 클래스의 어려움.
>> 제이슨 허쉬 호른 : 알아요.
경우에만 그 부분을 제어 할 수 있었다.
[청취]
잘 됐네요.
왜 너희들에 대해 생각을 시작하지 않는다 우리가 잘못 할 수 있었다,
그리고 우리는 90 초가 될 것입니다.
>> Avica, 나는 어떻게 이동하는 방법을 물어 보자 그것을 디버깅하는 내부 insert_node.
우리가 마지막으로 중단 된 곳이야.
어떻게 insert_node 내부에 가야합니까, Avica, 무슨 일이 일어나고 있는지 검사하는 방법?
무엇 GDB 명령?
브레이크 내부에 데려다하지 않을 것입니다.
후작 알고 있나요?
>> 청중 : 무엇?
>> 제이슨 허쉬 호른 : 어떤 GDB 명령 나는이 함수 내에서 이동하는 데 사용?
>> 청중 : 단계?
>> 제이슨 허쉬 호른 :를 통해 단계 내부 나 소요 S..
OK.
New_node는 일부 공간을 mallocing.
모두는 거 같다고.
의이 new_node을 살펴 보자.
그것은 어떤 메모리 주소를 얻었다.
의 확인하자 -
그게 올바른 것입니다.
그래서 여기에 모든 것 제대로 작동 될 수있다.
>> 청중 : 차이 무엇입니까 P와 디스플레이 사이?
>> 제이슨 허쉬 호른 : P는 인쇄를 의미합니다.
그리고 당신이 무엇을 요구하는지 그것과이 사이의 차이는?
이 경우, 아무것도.
그러나 일반적으로있다 약간의 차이.
그리고 당신은 GDB 매뉴얼에 보일 것입니다.
그러나이 경우, 아무것도.
우리는하지만, 인쇄를 사용하는 경향이 있기 때문에 우리는보다 더 많은 작업을 수행 할 필요가 없습니다
단일 값을 인쇄 할 수 있습니다.
>> OK.
그래서 우리는 우리의 코드의 라인 80에있는 목록에 해당 노드 *의 CURR 설정.
우리가 CURR를 인쇄 할 수 있습니다.
이 목록 같습니다.
달콤한.
기다립니다.
그것은 뭔가 같습니다.
그것은 바로 보이지 않는다.
거기 우리는 간다.
그건 GDB에서, 오른쪽, 경우 때문에 당신이 그것을하고있는 라인의
아직 실행되지 않았습니다.
그래서 당신은 실제로 입력해야 줄을 실행하기 위해 다음
그 결과를보고하기 전에.
그래서 여기에 우리가 있습니다.
우리는 단지이 줄을 실행, 이전 널 같습니다.
그래서 다시, 우리는 이전에 인쇄하면 우리는 이상한 아무것도 볼 수 없습니다.
그러나 우리는 실제로 그것을 실행하는 경우 라인, 우리는 볼 수 있습니다
그 라인은 일한.
>> 그래서 우리는 CURR있다.
사람들은 모두 좋다.
오른쪽?
이제 우리는 여기이 선에 있어요.
CURR는 동일 널 (null)을하지 않지만.
음, CURR은 동일 무엇을합니까?
우리는 단지 null이 같게 보았다.
우리는 그것을 밖으로 인쇄.
나는 다시 인쇄합니다.
그래서입니다 while 루프 실행하는 것?
>> 청중 : 호
>> 제이슨 허쉬 호른 : 그래서 내가 입력 한 때 라인, 당신은 우리가 모든 방법을 뛰어 참조
아래로 아래로, false를 반환합니다.
그리고 우리는 false를 반환거야 우리의 프로그램으로 돌아가서
우리가 본처럼 결국, 인쇄, 삽입이 성공하지 못했습니다.
그래서, 사람은 무엇에 대한 아이디어를 가지고 우리는이 문제를 해결하려면 어떻게해야합니까?
내가 볼 때까지 기다릴거야 손의 두 최대 이동합니다.
우리는이 작업을 실행하지 못했습니다.
명심이 처음 우리가하고 있었던 것.
나는 몇 가지 작업을 수행하지 않을 것이다.
나는 몇 가지를 할거야.
부부는 두 가지를 의미하기 때문이다.
나는 두 개 이상 기다릴 수 있습니다.
>> 제 1 삽입, CURR, 기본값은 null 등호.
이 루프는 실행 CURR가 null가 아닌 경우.
그래서 내가 어떻게이 문제를 해결받을 수 있나요?
나는 3 손을 참조하십시오.
나는 3 개 이상 기다릴 수 있습니다.
마커스, 당신은 어떻게 생각합니까?
>> 청중 : 글쎄, 당신이 그것을 필요로하는 경우에 두 번 이상 실행하면 바로
DO-whil​​e 루프로 변경.
>> 제이슨 허쉬 호른 : OK.
즉, 비록 우리의 문제를 해결할 것인가?
>> 청중 :이 경우에는의 때문에 없습니다 목록이 비어 있다는 사실.
그럼 당신은 아마 추가해야 문이 경우 루프가 종료
당신은 말 할 필요 당신을 점하는 목록,
그냥 삽입 할 수 있습니다.
>> 제이슨 허쉬 호른 : 나는 좋아한다.
그 의미가 있습니다.
루프가 종료되면 -
그것은 여기에 false를 반환합니다 때문입니다.
그래서 루프가 종료하면, 우리는에있어 아마도 목록의 끝, 또는
아무것도에 존재하지 않는 경우는 목록의 시작 그것은, 어떤 말과 동일합니다.
그래서 지금 우리가 삽입 할 여기서 뭔가.
어떻게 그 코드는 마커스를 보여?
>> 청중 : 당신은 이미 노드를 얻은 경우 malloc으로 할당, 당신은 말할 수
new_node -> 다음 NULL 때문에 Equals 그 말에 있어야한다.
또는 new_node -> 다음에 널 (null)와 같습니다.
>> 제이슨 허쉬 호른 : OK.
미안 해요.
New_node -> 다음 널 (null)과 동일 우리는 끝이기 때문에.
그게 넣을하지 않습니다
어떻게 우리가이 목록에 배치해야합니까?
오른쪽.
그건 그냥 동일하게 설정합니다.
아니 어떻게 우리가 실제로 할 목록에 넣어?
가리키는 무엇이 목록의 끝?
>> 청중 : 머리.
>> 제이슨 허쉬 호른 : 죄송합니다?
>> 청중 : 머리가 가리키는 리스트의 끝.
>> 제이슨 허쉬 호른 : 아무것도에서이없는 경우 목록, 헤드가 가리키는
목록의 끝.
그래서 작동합니다 제 1 삽입.
부부가 무엇인지에 대한 경우 목록에있는 것들?
우리는 설정하지 않고보다 new_node 동일 향한다.
우리가하고 싶어?
그래?
아마 이전.
그것은 작동 할 것인가?
이전 단지는 것을 기억하라 노드에 대한 포인터.
그리고 이전 지역 변수입니다.
그래서이 줄은 로컬 변수를 설정합니다, 이전과 동일하거나
이 새로운 노드를 가리키는.
즉, 실제로 두지 않습니다 우리의 목록에서, 그래도.
우리는 어떻게 우리의 목록에 배치해야합니까?
Akchar?
>> 청중 : 나는 당신을 생각 다음 전류>을한다.
>> 제이슨 허쉬 호른 : OK.
CURR -> 다음.
그래서 다시, 우리는 아래로하고있는 유일한 이유는 여기이며, 어떤 일이 같은 현재합니까?
>> 청중 : 널 (null)와 같습니다.
>> 제이슨 허쉬 호른 : 그래서 무엇을 우리가 옆에 널 (null)>을 할 경우 어떻게됩니까?
우리는 무엇을 얻을 것입니까?
우리는 세그먼트 오류를​​ 얻을 수 있습니다.
>> 청중 : 마 CURR가 null 같습니다.
>> 제이슨 허쉬 호른 : 그 같은 일이 이전으로하지만,이 때문에
우리가 설정하고 지역 변수 이 새로운 노드와 동일.
이제 우리의 그림으로 돌아 가자 무언가를 삽입.
우리는 마지막에 삽입한다고 가정 해 봅시다 목록, 바로 여기에있다.
우리의 현재 포인터가 null로 가리키고 이전 지점
그 8 가리키는 것.
그래서 우리는 아비, 업데이트해야합니까?
>> 청중 : 이전 -> 다음은?
>> 제이슨 허쉬 호른은 : 이전 -> 다음에 무엇 우리는 업데이트 할 수 있기 때문에 그
실제로에 삽입합니다 목록의 끝.
우리는 여전히,하지만, 하나의 버그를 우리는로 실행하는 거라고.
이 버그는 무엇입니까?
그래?
>> 청중 : 그것은 반환 것 이 경우 거짓?
>> 제이슨 허쉬 호른 : 오,이다 false를 반환하는 것.
그러나 또 다른 버그가있다.
그래서 우리는 진정한 반환에 넣어해야합니다.
>> 청중 : 않습니다 이전 여전히 동일 목록의 맨 위에 널 (null)?
>> 제이슨 허쉬 호른 : 그래서 이전 계속 맨 처음에 널 (null)와 같습니다.
어떻게 우리가 극복 할 수 있습니까?
그래?
>> 청중 : 난 당신이 검사를 할 수 있다고 생각합니다 그것의 경우 while 루프를 확인합니다 전에
빈 목록.
>> 제이슨 허쉬 호른 : OK.
그래서 여기에 가자.
검사를 수행합니다.
만약 -
>> 청중 : 그래서 만약 머리 동일은 null 같습니다.
>> 제이슨 허쉬 호른 : 만약 머리 동일은 널 (null)과 동일 -
이 빈 목록의 경우 그것은 우리에게 있습니다.
>> 다음 당신 : 관객 이렇게 머리가 새와 같습니다.
>> 제이슨 허쉬 호른 : 머리 new_node 같다?
그리고 또 우리는 무엇을해야합니까?
>> 청중 : 그리고 당신은 true를 반환.
>> 제이슨 허쉬 호른 : 그렇진.
우리는 한 단계 누락.
>> 청중 : New_node 다음 null로 지적한다.
>> 제이슨 허쉬 호른 : 정확히, 알덴.
그리고 우리는 true를 반환 할 수 있습니다.
OK.
하지만 여전히 일을하는 것이 좋습니다 리스트의 끝에서 오른쪽?
괜찮아요.
우리는 여전히 실제로 얻을 수 있습니다 리스트의 끝.
우리가에있어 경우에 따라서이 코드 벌금입니다 목록의 끝에 몇 가지가 있습니다
목록에있는 것들?
오른쪽?
우리는 여전히 마커스의 생각을 가지고 있기 때문에.
우리는이 루프를 종료 할 수 있기 때문에 우리는리스트의 끝에있어.
그래서 우리는 여전히이 원하는거야 여기에 아래 코드?
>> 청중 : 네.
>> 제이슨 허쉬 호른 : 네.
그리고 우리는이를 변경해야합니까?
참.
않는 좋은 소리 모든 사람이 지금까지?
누구는이 -
아비, 당신은 추가 할 수있는 뭔가를해야합니까?
>> 청중 : 호
>> 제이슨 허쉬 호른 : OK.
그래서 우리는 변화의 몇 가지를 만들었습니다.
우리는 전에이 검사를 만들었어요 빈 목록에 갔다.
그래서 우리는 빈리스트의 치료를 촬영했습니다.
그리고 여기에 우리가 삽입 처리했다 리스트의 끝에서 무언가.
따라서이 while 루프를 가지고가는 것 같아 사이에있는 것들의 관리,
어딘가에 목록에있는 경우가 상황이 목록에 있습니다.
>> OK.
우리는이 프로그램을 다시 실행하자.
성공하지.
>> 청중 : 당신은 그것을하지 않았다.
>> 제이슨 허쉬 호른 : 아, 나는 그것을하지 않았다.
좋은 점, 마이클.
의 연결된 메이크업을 추가 할 수 있습니다.
87 행에 오류가있다.
라인 87.
알덴이 당신이 내게 준 선이었다.
무슨 일이야?
>> 청중 : 그것은 null로 수 있습니다.
>> 제이슨 허쉬 호른 : 좋음.
정확히 맞아.
그것은 NULL이어야합니다.
다시 한 번 만들어 보자.
컴파일합니다.
OK.
의 세 가지를 삽입 할 수 있습니다.
삽입에 성공했습니다.
의 그것을 인쇄 할 수 있습니다.
아, 단지 우리가 확인할 수 있다면.
그러나 우리는하지 않은 아직 기능을 인쇄 할 수 있습니다.
의 다른 뭔가를 입력 할 수 있습니다.
우리는 무엇을 입력해야합니까?
>> 청중 : 세븐.
>> 제이슨 허쉬 호른 : 세븐?
>> 청중 : 네.
>> 제이슨 허쉬 호른 : 우리는 세그먼트 오류가 있습니다.
그래서 우리는 하나를 가지고 있지만, 명확하게 두 가지를 얻을 수 없습니다.
그것은 5:07입니다.
그래서 우리는이 문제를 디버깅 할 수 3 분.
하지만 여기에 우리를 떠나려고 해요 와 테이블을 해시로 이동합니다.
그러나 다시,이 코드에 대한 답변 나는 약간의 당신에게 이메일을 보내드립니다.
우리는 매우 가까이 있습니다.
내가보기 엔 파악하는 것이 좋습니다 무슨 일이 일어나고 그것을 해결 있어요.
그래서 나는 당신에게이 코드를 이메일로 보내 드리겠습니다 플러스 솔루션도 -
나중에 아마 솔루션입니다.
우선이 코드.
>> 나는 우리가 전에하고 싶은 다른 것은 마무리는 우리가 아무것도를 해제하지 않은 것입니다.
그래서 난 당신을 보여주고 싶은 Valgrind의가처럼 보인다.
우리는 Valgrind의 경계를 실행하는 경우 우리의 프로그램에. / 링크.
다시 말하지만,이 슬라이드에 따르면, 우리 어떤 종류의에 Valgrind의 실행해야
이 경우 옵션, - 누출 점검 = 전체.
그럼 Valgrind의를 작성할 수 - 누출 점검 = 전체.
그래서이 Valgrind의를 실행합니다 우리의 프로그램에.
그리고 지금은 프로그램이 실제로 실행됩니다.
그래서 우리는 단지처럼 실행하는거야 이전에, 안으로 뭔가를 집어
나는 3에 넣을거야.
그 작동합니다.
내가 뭔가에 넣어하려고하지 않을 것이다 우리는 갈거야 다른 사람 때문에
이 경우 세그먼트의 거짓을 얻을.
그래서 그만 둘거야.
>> 그리고 지금 당신은 여기 아래 참조 누출 및 힙 요약.
이들은 좋은 것들 그 당신은 체크 아웃 할.
그래서 힙 요약 -이 말한다, 사용 출구에서 - 하나의 블록에 8 바이트.
즉, 하나의 블록은 노드 우리는 malloc으로 할당.
마이클, 당신은 노드가 8 개입니다 전에 말했다 그것은 정수가 물기 때문에
및 포인터.
그래서 우리의 노드입니다.
그리고, 그것은 우리의 malloc를 사용 말한다 일곱 번 우리는 해제
뭔가 여섯 번.
그러나 우리는 자유로운 호출되지 않습니다, 그래서 나는 아니오 이 얘기를 무슨 생각.
>> 그러나 말을 충분이 때 프로그램이 실행 때 malloc이 호출되고
다른 장소에서 우리 에 대해 걱정할 필요가 없습니다.
그래서 malloc에​​ 아마 불렀다 어떤 장소에서.
우리는 어디에서 고민 할 필요가 없습니다.
그러나 이것은 정말 우리입니다.
첫 번째 라인은 우리입니다.
우리는 블록을 떠났다.
그리고 당신은 여기에서 볼 수 있습니다 누출 요약.
아직도 도달 -
한 블록에있는 8 바이트.
즉, 해당 메모리를 의미합니다 -
우리는 메모리를 유출했다.
확실히 손실 -
뭔가가 영원히 손실됩니다.
일반적으로, 당신은하지 않습니다 거기에 무엇을 참조하십시오.
아직 도달 일반적이다 당신이 원하는거야 어디 물건을 볼 수 있습니다
어떤 코드가해야 볼 볼 수 있습니다 해제하지만 당신은 무료로 잊고있다.
>> 그리고 이것은, 케이스 아니라면 우리는 무료로 모든 것을 한 경우에,
우리는 그것을 확인할 수 있습니다.
그냥 프로그램을 실행하자 아무것도 참을 수 없어.
당신은 출구에 사용 여기에 아래로 볼 수 있습니다 -
제로 블록에 0 바이트.
즉, 우리가 아무 것도 남은 것 없음을 의미합니다 이 프로그램은 종료 할 때.
그래서 pset6에 켜기 전에, Valgrind의 실행 그리고 당신이하지 않아도 확인
모든 메모리는 프로그램에서 누수.
당신은 Valgrind의 어떤 질문이 있으면, 다가 주시기 바랍니다.
그러나 이것은 당신이 그것을 사용하는 방법입니다.
아주 간단한 - 만약 당신이 있는지 확인 출구에서 사용이 -
모든 블록의 모든 바이트.
>> 그래서 우리는 삽입 노드에서 작업을했다.
여기 두 개의 다른 기능을 가지고 - 노드와 노드를 무료로 인쇄 할 수 있습니다.
또, 이들은 함수입니다 연습을 위해 좋은 것
그들은 당신을뿐만 아니라 도움이 될 것입니다 때문에 이러한 샘플 연습뿐만 아니라,
문제에 설정합니다.
그들은 볼거리에 꽤 밀접에 매핑 당신은에해야 할 것입니다
문제는 설정.
하지만 확인 하시겠습니까 우리는 모두에 터치합니다.
해시 테이블은 또한 중요하다 우리는이 부분에서 무슨 일을하는지
주 - 또는 문제 세트.
>> 그래서 우리는 부분을 마무리 할거야 해시 테이블에 대해 이야기.
당신이주의하는 경우에 내가 만든 작은 해시 테이블.
즉, 우리가 이야기하고있는 것이 아니다 그러나, 약.
우리는 다른 얘기 해시 테이블의 타입.
그리고 그 핵심, 해시 테이블에 에 불과하다
어레이 플러스 해시 함수.
우리는 단지에 조금만 이야기 할 것입니다 반드시 모두가 무엇을 이해합니다
해시 기능입니다.
그리고 나는 것을 지금 말하는거야 두 가지 이상의 아무것도 -
배열 및 해시 함수.
그리고 여기 단계까지입니다 어떤이 운영하고 있습니다.
>> 우리의 배열이있다.
우리의 기능이있다.
특히, 해쉬 함수가 필요 이와 함께 몇 가지 작업을 수행.
내가 특별히 말할거야 에 대해이 문제를 설정합니다.
아마 것 문자열을 가지고.
그리고 무엇 반환 할거야?
데이터 유형을?
알덴?
귀하 해시 함수 반환?
정수입니다.
그래서 이것은 무엇 해시 테이블의 구성은 -
어레이의 형태로 나타난 그리고 해시 함수.
그것은 어떻게 작동?
그것은 세 단계로 작동합니다.
우리는 그에게 키를 제공합니다.
이 경우, 우리는 그것을 문자열을 줄 것이다.
우리는 단계 당 하나의 해시 함수를 호출 키에 우리는 가치를 얻을.
>> 특히, 우리는 말할 것 우리는 정수를 얻을.
즉, 정수, 매우 구체적인있다 그 정수가 될 수있는 한계.
이 예에서, 우리의 배열 크기 세입니다.
그래서 정수는 어떤 숫자가 될 수 있습니다.
유효 값의 범위는 무엇입니까 그 정수, 이것의 반환 형식
기능을 해시?
제로, 하나, 둘.
해시 함수의 포인트입니다 배열의 위치를​​ 알아낼
우리의 키는 것입니다.
만 세 가지가 있습니다 여기에 위치 -
0, 1, 2.
따라서이 기능은 더 나은 반환 0, 1, 2.
이 배열의 일부 유효 indice.
>> 그리고,이 반환 위치에 따라 당신은 개방이 배열을 볼 수 있습니다
값을 괄호.
우리가 키를 넣어 곳이다.
그래서 우리는 호박을 던져, 우리는 제로를 얻을.
배열 브래킷 0에서, 우리는 호박을 넣어.
우리는 우리가 하나를 얻을, 고양이 던져.
우리는 하나에 고양이를 넣어.
우리는 거미에 넣어.
우리는 두 가지를 얻을.
우리는 배열 브래킷 두 가지에 거미를 넣어.
너무 좋은 것입니다 경우 그것은 그런 식으로 일했다.
그러나 불행하게도, 우리는 볼 수 있습니다로 그것은 조금 더 복잡합니다.
>> 우리는이 질문으로 시작하기 전에 약이 기본
해시 테이블의 셋업?
이것이 바로의 이미지입니다 우리는 보드에 그린 그림을.
하지만 이후 우리는 내가 그것을 칠판에 그린 또한 그것으로 이동하지 않을거야.
기본적으로 키, 마법의 블랙 박스 - 또는이 경우, 청록색 상자 -의
해시 함수는 양동이에 넣습니다.
이 예에서 우리는있어 이름을 참을 수 없어.
우리는 관련된 전화를 옮기고 버킷에있는 이름의 수.
하지만 당신은 잘 할 수 단지 양동이에 이름을 넣어.
>> 이것은 무엇을 단지 사진입니다 우리는 보드에 그린.
우리는하지만, 잠재적 인 함정이있다.
그리고 두 사람은 특히이있다 내가 가서하려는 슬라이드.
첫 번째에 관한 것입니다 해시 함수.
그래서, 질문을 어떻게 좋은 해시 함수를 무엇입니까?
나는 두 개의 답변을 제공합니다.
첫 번째는 결정의 것입니다.
해쉬 함수의 문맥에서, 이것은 무엇을 의미합니까?
예?
>> 청중 : 그것은 찾을 수 있습니다 일정 시간의 인덱스?
>> 제이슨 허쉬 호른 : 그 그것은 무엇을 의미하지 않습니다.
하지만 그건 좋은 생각입니다.
다른 사람이 추측이 이 무엇을 의미하는지에?
즉, 좋은 해시 함수 결정적?
애니?
>> AUDIENCE : 키만을 매핑 할 수있는 해시 테이블에있는 하나의 장소에.
>> 제이슨 허쉬 호른 : 때문입니다 정확히 맞아.
당신이 호박에 넣어 때마다, 항상 0을 반환합니다.
당신은 호박과 해시에 넣어 경우 함수는 0을 반환하지만이
뭔가를 반환 확률 0보다 다른 더 큰 -
어쩌면 때때로 하나를 반환 할 수 있습니다 또는 두 개의 다른 시간 -
그건 좋은 해시 함수가 아닙니다.
당신은 정확히 맞아.
귀하의 해시 함수를 반환해야합니다 이 경우 똑같은 정수,,
똑같은 문자열입니다.
>> 아마 똑같은 정수를 반환 똑같은 문자열
에 관계없이 총액.
그러나이 경우는 아직 결정하기 때문에 여러 가지
같은 값에 매핑됩니다.
괜찮아요.
한 사람 만이있는 한 주어진 입력에 대한 출력.
>> OK.
두 번째 문제는 그것이 유효한 인덱스를 반환합니다.
우리는 일찍왔다.
이 해시 함수 -
소년 오 -
해시 함수는해야 유효한 인덱스를 반환합니다.
그래서 말 -
이제 다시이 예제로 돌아가 보자.
내 해시 함수는 카운트 업 단어의 문자.
즉, 해시 함수이다.
그리고 그 정수를 반환합니다.
나는 단어가 있다면, 그건 하나를 반환 할 것.
그리고 바로 여기에 넣어 것입니다.
내가 단어 박쥐에 넣으면?
이 세 가지를 반환하는 것입니다.
어디 박쥐 가는가?
>> 그것은 맞지 않습니다.
그러나 그것은 어디 갈 필요가있다.
이것은 결국 내 해시 테이블이며, 항상 어딘가로 이동합니다.
어디 박쥐 가야하나요?
어떤 생각을?
추측?
좋은 추측?
>> 청중 : 제로.
>> 제이슨 허쉬 호른 : 왜 제로?
>> 청중 : 때문에 세 모듈 세 제로?
>> 제이슨 허쉬 호른 : 세 모듈 세은 0이다.
즉, 좋은 생각이다, 그 맞습니다.
그래서이 경우에는해야 아마 0으로 이동합니다.
그래서 좋은 방법 보장하는이 해시 기능은 유효한 인덱스를 반환한다
테이블의 크기로 나눈 나머지하기.
당신은에 의해 어떤이 반환을 모듈로하는 경우 세 가지, 당신은 항상받을거야
0, 1, 및 둘 사이의 무언가.
그리고 이것은 항상 일곱을 반환하고, 경우 당신은 항상 세 가지로 나눈 나머지, 당신이있어
항상 같은 일을 얻을 것.
>> 그래서 아직 결정의 당신은 모듈로합니다.
하지만 그 보장합니다 당신에게 그 무언가를 결코 -
잘못된 산업.
일반적으로,이 모듈이 발생한다 당신의 해시 함수 내부.
그래서 당신은 이것에 대해 걱정할 필요가 없습니다.
당신은 다음을 확인 할 수 있습니다 이 유효한 indice입니다.
여기에 대한 질문 잠재적 인 함정?
>> OK.
그리고 거기에 우리가 간다.
다음 잠재적 인 함정 및 이것은 큰 문제입니다.
어떤 경우에는 두 개의 키지도 동일한 값?
따라서이 문제를 처리하는 방법은 두 가지가 있습니다.
첫 번째는 선형이라고 제가하는 프로빙
이상 갈 수 없습니다.
하지만 당신은 잘 알고 있어야하는 방법 그 작품과 그 것입니다.
>> 내가 가서려고 두 번째 그 많은 하나이기 때문에
사람들은 아마 결정 끝날 것 자신의 문제 세트에 사용할 수 있습니다.
물론, 당신은 필요가 없습니다.
그러나 문제 세트, 많은 사람들이 해시 테이블을 생성하기 위해 선택하는 경향
구현하기 위해 별도의 체인과 함께 그들의 사전.
그래서 우리는 그것이 무엇을 의미하는지에 갈거야 로 해쉬 테이블을 작성
별도의 체인.
>> 그래서 호박에 넣어.
그것은 0을 반환합니다.
그리고 여기에 호박을 넣어.
그럼 난에 넣어 -
다른 할로윈 테마 것은 무엇입니까?
>> 청중 : 사탕.
>> 제이슨 허쉬 호른 : 사탕!
즉, 좋은 하나입니다.
나는 사탕, 사탕에 넣어 또한 저에게 영을 준다.
어떻게해야합니까?
어떤 아이디어?
당신은 모든 종류의 알고 있기 때문에 별도의 무엇 체인입니다.
그래서 어떤 아이디어가 무엇을 할 수?
그래.
>> 청중 : 문자열을 퍼팅 실제로 해시 테이블.
>> 제이슨 허쉬 호른 : 그래서 우리가 갈거야 여기에 좋은 생각을 그립니다.
OK.
>> 청중 : 해시 테이블에게 있으 [청취]
를 가리키는 포인터 목록의 시작.
그리고 호박은 첫 번째 값이 될 수있다 링크 된 목록과 사탕에있을
링크 된 목록의 두 번째 값입니다.
>> 제이슨 허쉬 호른 : OK.
마커스는, 그 뛰어난했다.
나는 그것을 무너 뜨리는거야.
마커스는 할 말을하지 호박을 덮어 씁니다.
즉, 나쁜 것입니다.
다른 곳에서 사탕을 넣지 마십시오.
우리는 0에 모두 넣어 것입니다.
하지만 우리가 다루는거야 제로에 이르렀
0에서 목록을 작성.
그리고 우리는 목록을 만들거야 제로에 매핑 된 모든.
그리고 우리가 만들 배운 가장 좋은 방법 성장하고 축소 할 수 있습니다 목록
동적 범위가 아닌 또 다른 배열입니다.
그래서하지 다차원 배열.
그러나 단지 연결리스트를 만들 수 있습니다.
>> 그래서 그가 제안 -
나는 새를 얻을거야 -
포인터와 배열을 만들 수 있습니다 포인터의 배열.
OK.
어떤 아이디어 나 힌트 어떤 유형 이 포인터이어야한다?
마커스?
>> 청중 :에 대한 포인터 -
>> 제이슨 허쉬 호른 : 당신 때문에 연결리스트는 이렇게 말했다 -
>> 청중 : 노드 포인터?
>> 제이슨 허쉬 호른 : 노드 포인터.
만약에 우리의 연결에있는 것들 목록 노드는 그들이있다
노드 포인터이어야한다.
그리고 그들은 처음에 어떻게 같을 수 있습니까?
>> 청중 : 널.
>> 제이슨 허쉬 호른 : 널.
그래서 우리의 비어있는 일이있다.
호박 0을 반환합니다.
우리는 무엇을해야합니까?
그것을 통해 저를 걸어?
사실, 마커스는 이미 준.
다른 사람은 그것을 통해 저를 걷는다.
우리는 무엇을 할 때 우리 -
이것은 매우 유사 우리는 그냥 뭘하고 있었는지.
아비.
>> 청중 : 나는 생각을하는거야.
그래서 당신은 사탕을 얻을 때.
>> 제이슨 허쉬 호른 : 네.
음, 우리는 호박을 얻었다.
이제 우리의 첫 번째를 얻을 수 있습니다.
우리는 호박을 얻었다.
>> 청중 : OK.
호박 0을 반환합니다.
그래서 당신은에 넣어.
아니면 실제로, 당신은 넣어 링크 된 목록.
>> 제이슨 허쉬 호른 : 우리는 어떻게 할 연결리스트에 넣어?
>> 청중 : 아, 실제 구문?
>> 제이슨 허쉬 호른 : 그냥 산책 -
더 이상 말을.
우리는 무엇을해야합니까?
>> 청중 : 당신은 단지 삽입 그 첫 번째 노드로.
>> 제이슨 허쉬 호른 : OK.
그래서 우리는 우리의 노드, 호박이 있습니다.
그리고 지금 내가 어떻게 삽입합니까?
>> 청중 : 당신은 지정 포인터에 그것.
>> 제이슨 허쉬 호른 : 어떤 포인터?
>> 청중 : 제로의 포인터.
>> 제이슨 허쉬 호른 : 어디 이 점은 무엇입니까?
>> 청중 : 지금 NULL로.
>> 제이슨 허쉬 호른 : 음, NULL을 가리키는 것.
하지만 호박에 걸었습니다.
어디 그것을 가리켜 야?
>> 청중 : 호박합니다.
>> 제이슨 허쉬 호른 : 호박에.
정확히.
그래서이 호박을 가리 킵니다.
어디이 포인터는 않습니다 호박 포인트?
에
>> 청중 : 널.
>> 제이슨 허쉬 호른 : null로.
정확히.
그래서 우리는 뭔가를 삽입 링크 된 목록에.
우리는 단지이 작업을 수행하기 위해이 코드를 썼다.
거의 우리는 거의 그것을 가지고 완전히 금이.
이제 우리는 사탕을 삽입합니다.
우리의 캔디는 0이.
그래서 우리는 사탕과 함께 무엇을해야합니까?
>> 청중 : 그것은 여부에 따라 달라집니다 우리는 그것을 정렬 할 노력하고 있지.
>> 제이슨 허쉬 호른 : 때문입니다 정확히 맞아.
이에 따라 달라집니다 여부 우리는 그것을 정렬 할 노력 중입니다.
의 우리가하지 않은 가정하자 그것을 정렬 할 것.
>> 청중 : 그럼, 우리가 설명하고있는 바와 같이 전에, 그것은 그냥 넣어 간단한 것
바로 처음에 너무 포인터 사탕 제로 지점에서.
>> 제이슨 허쉬 호른 : OK.
잠깐만.
내가 바로 여기에 사탕을 만들 수 있습니다.
그래서이 포인터 -
>> 청중 : 네, 지금해야 사탕을 가리키는 될 수있다.
그런 다음 포인터에서이 호박에 사탕 포인트.
>> 제이슨 허쉬 호른 : 그 마음에 드 셨나요?
그리고 우리는 또 다른 났다고 제로로 매핑하는 것은?
>> 청중 : 음, 그냥 같은 일을?
>> 제이슨 허쉬 호른 : 같은 일을한다.
따라서이 경우, 우리는 그렇게하지 ​​않으면 그것을 정렬 유지하려면
오히려 간단한 소리.
우리는 indice의 포인터를 가지고 우리의 해시 함수에 의해 주어진다.
우리는 우리의 새로운 노드에 그 지점이 있습니다.
그리고, 그것은 지적 된대로 이전에 -
이 경우의 널 (null),에 두 번째의 경우 호박 -
그것이 가리키는 뭐든간에, 그 이전에, 우리는 다음에 추가
우리의 새로운 노드.
우리는 무언가를 삽입하고 처음에.
사실이보다 훨씬 간단합니다 정렬 된 목록을 유지하려고합니다.
그러나 다시, 검색이 될 것입니다 자세한 내용은 여기에 복잡.
우리는 항상 끝으로 이동해야합니다.
>> OK.
별도의 체인에 대한 질문?
그게 어떻게 작동?
지금 문의하십시오.
정말 여러분 모두 확인하려면 우리는 밖으로 머리를하기 전에이 작업을 이해합니다.
>> 청중 : 왜 호박을 넣을까요 및 동일로 사탕
해시 테이블의 일부?
>> 제이슨 허쉬 호른 : 좋은 질문입니다.
왜 우리는 같은에 넣어 않는다 해시 테이블의 일부?
음,이 경우 우리의 해시 함수 반환 둘 다 제로.
그래서 그들은 indice 제로에 갈 필요가 우리가가는 곳 그 때문에
그들을 보면 우리는 지금 그들을보고 싶어.
또, 선형 프로빙 접근법 우리는 0에서 그들을 모두 넣어하지 않을 것입니다.
그러나 별도의 체인 방식에서, 우리는 0에 모두 넣어거야
다음 제로의 해제 목록을 만들 수 있습니다.
>> 그리고 우리는 호박을 덮어 쓰지 않으려는 단순히 그것에 대해 우리는 것이기 때문에
호박이되었다고 가정 삽입되지 않습니다.
우리는 단지 한 가지를 유지하는 경우 나쁜 것 위치.
그런 다음이있을 것 없음 지금 우리의 기회 -
우리가 이제까지 중복이 있다면, 우리 다만 우리의 초기 값을 삭제합니다.
우리는이 방법을 수행 것도 그런 이유입니다.
우리가 선택한 이유 또는 그 -하지만 다시, 우리 별도의 체인 방식을 선택했다,
많은 다른 접근 방법이되는 하나를 선택할 수 있습니다.
그 질문에 대한 답변을합니까?
>> OK.
카를로스.
선형 프로브는 포함합니다 -
우리는 0에서 충돌을 발견하는 경우에, 우리 볼 옆 자리에 보일 것입니다 경우
그것은 열려 거기에 넣어.
그리고 우리는 다음 스포츠에서보고 즉 열려 있는지 확인하고 거기에 넣어.
그래서 우리는 가능한 다음를 찾으십시오 개방 장소와 거기에 넣어.
다른 질문?
그래, 아비.
>> 청중 : 그 후속으로, 옆 자리에 무엇을 의미합니까?
해시 테이블 또는 링크 된 목록.
>> 제이슨 허쉬 호른 : 선형에 대한 프로그래밍, 아니 연결리스트.
해시 테이블에 다음 자리.
>> 청중 : OK.
그래서 해시 테이블 것 크기로 초기화 -
문자열의 수와 같은 당신이 삽입되었는지?
>> 제이슨 허쉬 호른 : 당신은 것 정말 큰되고 싶어요.
예.
여기에 우리의 사진입니다 그냥 보드에 그린.
다시 말하지만, 우리는 바로 여기에 충돌이 있습니다.
152.
그리고 당신은 우리가 만든 볼 수 있습니다 그것의 전원 연결리스트.
다시, 해시 테이블 별도 체이닝 방법은 하나의 당신이 아닙니다
문제 설정을 위해 수행해야 여섯하지만 하나입니다 많은
학생들이 수행하는 경향이있다.
그래서 주에, 우리는 간단하게 이야기하자 우리는 문제를 약 6 밖으로 머리를하기 전에
그리고 난 당신과 함께 이야기를 공유 할 수 있습니다.
우리는 3 분있다.
>> 문제는 여섯을 설정합니다.
당신은 네 가지 기능을 가지고 있습니다 -
로드, 크기 및 언로드 확인합니다.
로드 -
물론, 우리는 가고 있었어요 지금 과부하.
우리는 보드에 부하를 받았다.
그리고 우리는 심지어 많은 코딩 시작 연결리스트에 삽입.
그래서 부하보다 훨씬 더 많은 수 없습니다 우리는 그냥 뭘했는지.
>> 당신이 한 번 확인입니다 뭔가로드.
그것은이 같은 프로세스이다.
당신이 던져 같은 첫 두 부분 해시 함수에 뭔가
그 값을 얻을.
하지만 지금 우리는 그것을 삽입 아닙니다.
이제 우리는을 찾고 있습니다.
나는 샘플 코드를 찾기 위해 작성한 연결리스트에서 뭔가.
그 연습을하는 것이 좋습니다.
하지만 직관적으로 뭔가를 찾는 것은 뭔가를 삽입하는 것과 비슷.
사실, 우리는 발견의 그림을 그렸습니다 연결리스트에서 뭔가 움직이는
당신이 마지막에 도착할 때까지 통해.
그리고 당신은 결국에 도착하고없는 경우 그것을 발견, 다음이 아니다.
그래서 본질적으로, 체크합니다.
>> 다음 크기입니다.
의 크기를 건너 보자.
마지막으로 언로드했다.
언로드 우리가 그려지지 않은 하나입니다 보드에 아직 코딩.
그러나 나는 당신이 그것을 코딩을 시도하는 것이 좋습니다 샘플 링크리스트의 예에.
하지만 직관적으로 언로드 무료 비슷합니다 -
또는 내 말은 확인 비슷합니다.
당신이려고 지금마다 제외 를 통해, 당신은 단순히 점검하지 않을
당신이 거기에 값이있는 경우를 참조하십시오.
하지만 당신은 그 노드를 복용하고있어 본질적으로, 그것을 해제.
즉, 언로드 할을 요청거야.
당신이 malloc으로 할당 한 무료 다.
그래서 당신은 전체 목록을거야 또, 전체의 해시 통하지
테이블을 다시.
이 시간은 확인하지 않습니다 거기에 무엇을 볼 수 있습니다.
그냥 거기에 어떤 무료.
>> 그리고 마지막으로 크기.
크기는 구현해야합니다.
당신은 크기를 구현하지 않는 경우 -
나는 이런 식으로 말을합니다.
정확히 사이즈를 구현하지 않는 경우 를 포함하여 한 줄의 코드
문을 반환, 당신은 잘못의 크기를하고.
그래서 전체 디자인을 위해, 반드시 크기를 확인 점, 당신은 정확히 하나의 일을하고있어
등의 코드 라인, return 문.
>> 그리고, 아직 Akchar을 포장하지 않습니다.
열망 비버.
너희들 고맙다는 말을하고 싶었 절을 주셔서.
해피 할로윈 있습니다.
이것은 내 의상입니다.
나는 목요일에이를 착용 할 나는 근무 시간에 당신을보고합니다.
그리고 당신은 좀 더에 대한 호기심이 있다면 배경이 복장에 같은 느낌
2011 섹션을 체크 아웃 무료 난 이유에 대한 이야기
호박 의상을 입고.
그리고 그것은 슬픈 이야기입니다.
그래서되어 있는지 확인하십시오 근처의 일부 조직.
그러나에, 당신은 어떤이있는 경우 내가있을께요 질문
외부 섹션 후.
행운을 빌어 문제에 6을 설정합니다.
그리고 언제나처럼, 당신은 어떤이있는 경우 질문, 알려주세요.