선생님 질문있습니다. 배열 int a[ ] = {1, 2, 3, 4, 5} 연결리스트 1 => 2 => 3 => 4 => 5 이렇게 있을 때 배열의 값1을 지우고 2, 3, 4, 5를 앞으로 한칸씩 이동하는 것과 연결리스트의 값5를 지우기 위해 1~5까지 순회하는 과정에서 순회를 위한 임시노드로 각 주소를 이동하는 것은 비슷하게 컴퓨터리소스를 사용하는 것이 아닌가요?
배열에는 array와 vector 두 가지 타입이 있다고 항상 생각해왔는데, 말씀하신 배열에서 하나의 원소를 삭제할 경우에 (가장 최악의 경우를 생각해본다면) array의 포인터 접근법으로 index=0으로 접근하거나 또는 벡터에서의 인덱스 접근법으로 삭제를 하는 경우가 있다고 생각합니다. 배열을 생각해보면 (예를들어), int A[5] = {1, 2, 3, 4, 5}; 가 일반 형태이고 int*p = new int[5]; for(int i = 0;i < 5; i++) {p[i] = i + 1};와 같이 동적 할당하는 방법이 있고 벡터의 경우엔 vector a = {1, 2, 3, 4, 5}; 하는 방법이 기본적으로 initialize할 수 있는 방법으로 알고 있습니다. 이 떼, 일반적인 배열의 경우 배열에 추가나 삭제를 할 수 없는것으로 알고있는데 선생님께서 말씀하신 array에서 추가나 삭제가 일어나는 경우는 벡터나 dynamic array에 해당된다는 경우라고 생각하면 될까요? 또 array의 경우엔 접근성이 빠른것에 장점이 있고 linkedlist의 경우엔 추가/삭제에 장점이 있습니다. 따라서 각각을 사용해야할 경우가 array는 추가 삭제가 많이 일어나지 않고 접근이 많을때, linkedlist는 그 반대의 경우에 사용해야 할것이라는 건 짐작할 수 있습니다. 이 때, dynamic array와 vector 모두 배열의 형태인데 dynamic array의 경우는 포인터 접근이고 vector의 경우는 벡터 인덱스 접근법을 사용한다고 하던데 둘의 차이가 클까요? 언제 dynamic array를 사용해야하고 언제 vector를 사용해야 할지 잘 모르겠습니다ㅠㅠ
- 비전공자인데 수업 잘 듣고 있습니다. 몇 가지 질문이 있어 문의드립니다.😀 1. C언어를 이용해 스택을 연결리스트로 구현시 코드에 관한 질문입니다. - pop 코드에서 top이 현재 가리키고 있는 값을 임시 변수(반환값, item)에 넣어준 후 현재 top이 가리키는 주소를 초기화하는데요. (Top-> temp->link) 여기서 top을 null값으로 초기화하면 다음 스택 위치를 어떻게 top이 찾아 가는지 문의 드립니다. 코드는 free(temp) 후 item을 리턴해주고 끝이나네요. 2. 유튜브 강좌 문의 : c언어로 역리스트 및 스택구조를 연결리스트로 구현한 혀니쌤 컨텐츠가 있는지 문의드립니다.
@@withhoneyc 바쁘실텐데 귀중한 답변 감사합니다. 컨텐츠에 헤드 또는 Top이 노드와 연결을 끊고 다음 노드와 연결하거나 방향전환하는 개념도 함께 다뤄주시면 더욱 유익할 것 같네요 ^_^ 스택 입/출력 방식이 LIFO이나 현재는 배열 중심으로 리스트를 생각하다보니 오개념이 생기는 것 같아요
잘 들었습니다! 감사합니다!
아 선생님 너무 감사합니다.
학교에서 교수님이 무슨 말씀 하나도 이해 못했는데, 이제야 비로소 완벽하게 이해했습니다.
어머머머 감사합니다:) 홍보 좀 많이 해주세용!!!😜😝😊🤪
감사합니다. 너무 깔끔한 설명입니다
저도 감사합니다🙏
설명을 정말 잘해주시네요 감사합니다!
감사합니다:) 거의 첫 영상이라 화질도 안좋고 얼굴도 들이대서 부담스럽네요 ㅠ
설명을 너무 잘해주시네요
감사합니다^^
감사합니다🙏
설명이 깔끔해서 좋아요
저도 감사합니다😊
깔 끔
잘 이해하고 갑니다
감사합니다🙏
감사합니다
배열도 자료구조다. 멸치도 생선이다.
@user-sb7op4zf8j 배열 최고예요👍👍👍
자료구조란 결국 "베열"과 "연결리스트"의 다양한 변용에 다름아니었네 !!! 가르침 감사합니다 !!!
ㅋㅋㅋㅋㅋ 제대로 이해하셨네용👍
안녕하세요 선생님! 선생님 강의보면서 공부중인데요, 혹시 단일 환형 연결리스트랑 다항식 덧셈 프로그램 관련 강의영상도 있을까요?
아직 없네요^^
선생님 질문있습니다.
배열 int a[ ] = {1, 2, 3, 4, 5}
연결리스트 1 => 2 => 3 => 4 => 5
이렇게 있을 때
배열의 값1을 지우고 2, 3, 4, 5를 앞으로 한칸씩 이동하는 것과
연결리스트의 값5를 지우기 위해 1~5까지 순회하는 과정에서 순회를 위한 임시노드로 각 주소를 이동하는 것은
비슷하게 컴퓨터리소스를 사용하는 것이 아닌가요?
맞습니다! 하지만 연결리스트는 값을 앞으로 대입하는 과정이 없습니다.
연결 리스트는 값을 삭제 후 연결만 하면 되는 반면 배열은 뒤에 있는 값을 앞으로 한 개씩 대입해야 합니다.
배열에는 array와 vector 두 가지 타입이 있다고 항상 생각해왔는데, 말씀하신 배열에서 하나의 원소를 삭제할 경우에 (가장 최악의 경우를 생각해본다면) array의 포인터 접근법으로 index=0으로 접근하거나 또는 벡터에서의 인덱스 접근법으로 삭제를 하는 경우가 있다고 생각합니다. 배열을 생각해보면 (예를들어), int A[5] = {1, 2, 3, 4, 5}; 가 일반 형태이고 int*p = new int[5]; for(int i = 0;i < 5; i++) {p[i] = i + 1};와 같이 동적 할당하는 방법이 있고 벡터의 경우엔 vector a = {1, 2, 3, 4, 5}; 하는 방법이 기본적으로 initialize할 수 있는 방법으로 알고 있습니다. 이 떼, 일반적인 배열의 경우 배열에 추가나 삭제를 할 수 없는것으로 알고있는데 선생님께서 말씀하신 array에서 추가나 삭제가 일어나는 경우는 벡터나 dynamic array에 해당된다는 경우라고 생각하면 될까요?
또 array의 경우엔 접근성이 빠른것에 장점이 있고 linkedlist의 경우엔 추가/삭제에 장점이 있습니다. 따라서 각각을 사용해야할 경우가 array는 추가 삭제가 많이 일어나지 않고 접근이 많을때, linkedlist는 그 반대의 경우에 사용해야 할것이라는 건 짐작할 수 있습니다. 이 때, dynamic array와 vector 모두 배열의 형태인데 dynamic array의 경우는 포인터 접근이고 vector의 경우는 벡터 인덱스 접근법을 사용한다고 하던데 둘의 차이가 클까요? 언제 dynamic array를 사용해야하고 언제 vector를 사용해야 할지 잘 모르겠습니다ㅠㅠ
배열, 벡터, 다이나믹에레이 모두 맨 뒤에 원소를 추가하거나 삭제 시 오버헤드가 발생하지 않습니다. 그러나 메모리 중간에 원소를 추가하는 경우 원래 저장 되어 있던 메모리를 뒤로 한 칸 씩 미뤄야 하기 때문에 비용이 발생하게 됩니다.
말씀하신대로 배열의 공간이 부족한 경우는 더이상 추가할 수 없으며 여유 공간에 있는 경우만 추가 가능합니다. 대신 벡터 같은 경우는 push_back 메서드를 이용하면 크기에 상관없이 맨 뒤에 추가 됩니다 동적할당도 메모리 재할당 후 추가 가능합니다.
다이나믹어레이나 벡터 모두 실행 중 메모리를 할당하는 방식으로 어떤 걸 사용해도 상관없습니다. 다만 벡터는 제공되는 메서드가 많아 코드 작성 시 굉장히 유리합니다. 다이나믹 에레이 사용 시 모든 코드를 직접 구현해서 쓰셔야 합니다.
일반적인 배열의 경우엔 메모리가 남아있는 경우를 말씀하신 거였군요! 빠른 답변 너무 감사합니다ㅠㅠ
정말 친절하게 설명해주셔서 감사합니다.
저도 감사합니다🙏
- 비전공자인데 수업 잘 듣고 있습니다. 몇 가지 질문이 있어 문의드립니다.😀
1. C언어를 이용해 스택을 연결리스트로 구현시 코드에 관한 질문입니다.
- pop 코드에서 top이 현재 가리키고 있는 값을 임시 변수(반환값, item)에 넣어준 후 현재 top이 가리키는 주소를 초기화하는데요. (Top-> temp->link) 여기서 top을 null값으로 초기화하면 다음 스택 위치를 어떻게 top이 찾아 가는지 문의 드립니다. 코드는 free(temp) 후 item을 리턴해주고 끝이나네요.
2. 유튜브 강좌 문의 : c언어로 역리스트 및 스택구조를 연결리스트로 구현한 혀니쌤 컨텐츠가 있는지 문의드립니다.
1. 연결 리스트로 스택 구현 시 연결 리스트 맨 앞 삽입과 맨 앞 삭제로 구현 하시면 됩니다. 연결리스트는 배열처럼 인덱스가 없기 때문에 top 지정 변수가 없어도 됩니다.
2. 당연히 있을거라 생각했는데 없네요 ㅎㅎ
곧 업로드 할게요!
@@withhoneyc 바쁘실텐데 귀중한 답변 감사합니다. 컨텐츠에 헤드 또는 Top이 노드와 연결을 끊고 다음 노드와 연결하거나 방향전환하는 개념도 함께 다뤄주시면 더욱 유익할 것 같네요 ^_^ 스택 입/출력 방식이 LIFO이나 현재는 배열 중심으로 리스트를 생각하다보니 오개념이 생기는 것 같아요
노드는 메모리에 있는 공간인가요?삽입 삭제시 시피유가 일하나요? 아님 os가 제어하나요?
노드는 malloc으로 할당 된 메모리로 ram메모리 영역 중 heap영역에 할당 됩니다:)