본문 바로가기

반응형

자료구조

★ 16. C# - List 사용 예제 List 에 대한 간략한 설명 및 사용 방법을 알아보겠습니다. [1] 일반적으로 배열은 동적으로 크기 조절이 되지 않지만 List는 가능합니다.[2] 리스트를 사용하면 배열의 크기에 대해서 크게 신경쓸 필요도 없습니다.[3] 선형 리스트에 필요한 Key도 사용하지 않으면서 많은 기능을 제공합니다. Key PointList는 Generic이나 구조체로 간주되며 사이에 자료형을 선언해야 합니다. Add Value 1234567891011121314using System.Collections.Generic; class Program{ static void Main() { List list = new List(); list.Add(2); list.Add(3); list.Add(5); list.Add(7); }}.. 더보기
★ 11. 링크드 리스트와 배열의 차이 링크드 리스트와 배열의 차이 - 배열과 연결 리스트는 데이터를 나열한다는 점에서 비슷함 - 배열과 연결 리스트는 엄연히 다르기 때문에 사용하기에 따라 프로그램의 성능이 달라지게 됨. - 배열 (Array) 1. 배열은 데이터를 논리적 순서에 따라 순차적으로 데이터를 입력하며, 물리적 주소 또한 순차적이다. 2. 인덱스를 가지고 있어서 원하는 데이터를 한번에 접근이 가능하기 때문에 데이터 접근 속도가 매우 빠르다. 3. 배열은 데이터의 삽입/삭제에는 취약하다. 배열 특성상 데이터 삽입/삭제가 이루어지면 삽입/삭제가 이루어진 위치의 다음부터 모든 데이터의 위치를 변경해야 하기 때문이다. - 연결리스트 (Linked List) 1. 연결리스트는 데이터를 논리적 순서에 따라 데이터를 입력한다. 하지만 물리적 주.. 더보기
★ 1. STL Vector와 List 설명 및 장단점 STL Vector와 List 설명 및 장단점 - Vector, List 설명 - = Vector =벡터는 일반적인 배열처럼 개체들을 연속적인 메모리 공간에 저장한다.즉, iterator 뿐 아니라 position index(operator [])로도 접근이 가능하다는 것이다.동적으로 확장/축소가 가능한 동적 배열(dynamic array)로 구현되어 있다. = List =리스트는 double linked list로 구현되어 있다.노드가 양 쪽으로 모두 연결 되어 있으며 삽입/삭제가 자주 발생하는 경우에 용이하다. - Vector, List 장단점 - = Vector =장점 : 1. 개별 원소들 접근 가능 2. 원소를 마지막에 삽입 하는 것이 빠름 3. 랜덤으로 원소 순회가 가능 4. 개별 원소에 대한 .. 더보기
★ 10. 연결 리스트를 이용한 스택 구현하기 연결 리스트를 이용한 스택 구현 전과 마찬가지로 각 기능별 함수로 구현되었습니다. // # 연결 리스트를 이용한 스택 ##include #include using namespace std;typedef int element; struct stackNode { element data; // # 다음 노드를 가리키는 포인터 변수 # stackNode *link; }; stackNode* top; // # 스택이 비어 있으면 true 아니면 false를 반환 # int isEmpty() { // # top 포인터가 NULL이면 스택이 비어 있는 것 # return (top == NULL); } // # 스택의 TOP에 원소를 삽입 # void push(element item) { // # 새로운 노드 공간을 .. 더보기
★ 9. 배열을 이용한 스택 구현하기 배열을 이용한 스택 구현 // # 배열을 이용한 스택 ##include using namespace std; // # 배열 크기 # #define MAX_STACK_SIZE 5 typedef int element; // # 스택에 원소를 저장하기 위한 배열 # element stack[MAX_STACK_SIZE]; // # TOP의 위치 # int top = -1; // # 처음엔 맨 아래를 위치하기 때문에 '-1' # // # 스택 초기화 함수 # void initialize() { // # TOP 인덱스를 -1로 주어 스택을 비움 # top = -1; } // # 스택이 비어 있으면 true 아니면 false를 반환 # int isEmpty() { // # TOP 인덱스가 -1이면 true # ret.. 더보기
★ 8. 스택 스택 스택은 제일 먼저 삽입(push)된 데이터가 맨 아래에 쌓여 있고가장 최근에 삽입된 데이터가 맨 위에 쌓이는 구조를 가지고 있습니다. 데이터를 삭제(pop)할 때에는 가장 최근에 삽입한 데이터를 꺼내는구조이고 스택에서의 입출력은 맨 위에서만 일어나고중간에서는 데이터를 삽입 또는 삭제를 할 수 없는 구조입니다.~ ★ 스택은 가장 최근에 들어온 데이터가 가장 먼저 나가기 때문에[후입선출] : LIFO( Last - In, First - Out : 라이포 리포)라고도 합니다. 스택에서 원소의 삽입과 삭제가 일어나는 곳을 TOP라 하고 스택의다른 한쪽 끝, 즉 TOP의 반대쪽 끝을 BOTTOM이라고 합니다. 다음 포스팅에서 코드적인 부분으로올리겠습니다. 더보기
★ 7. 이중 연결 리스트 구현하기 - 이중 연결 리스트 - (이중 원형 연결리스트) 각 기능별로 함수로 구현이 된 이중 연결 리스트 예제 소스입니다."한번에 이해되는 C 자료구조" 책을 참조하였습니다. // # 이중 원형 연결 리스트에 원소 추가, 삽입하기 # #include #include using namespace std;typedef int element;struct tagListNode { tagListNode* leftLink; // # 왼쪽 노드를 가리키는 링크 필드 # element data; // # 노드를 구성하는 데이터 필드 # tagListNode* rightLink; // # 오른쪽 노드를 가리키는 링크 필드 # };// # 헤더의 정보를 저장할 구조체 선언 # struct tagListHead { tagListN.. 더보기
★ 6. 이중 연결 리스트 - 이중 연결 리스트 - 원형 연결 리스트는 단순 연결 리스트보다는 이점이 있다. 그러나!아직도 몇 가지 단점이 있는데, 단점으로는 리스트를 뒤로 순회할 수없다는 점과 삭제하고자 하는 노드에 대한 포인터만으로는 그 노드를삭제할 수 없다는 점 등이 있다. 이러한 문제를 해결하기 위하여 어떤 노드에 대한 다음 노드뿐만아니라 전 노드까지 알 수 있도록 하여, 한 가지 방향의 탐색이 아닌양쪽 방향의 탐색이 가능하게 구성한 것이 이중 연결 리스트이다. 하나의 노드를 가진 구조체입니다.~struct LISTNODE{LISTNODE* lLink; // # 왼쪽(선행) 노드를 가리키는 링크 필드 #int data; // # 노드를 구성하는 데이터 필드 #LISTNODE* rLink; // # 오른쪽(후속) 노드를 가리.. 더보기
★ 5. 원형 연결 리스트 구현하기 - 원형 연결 리스트 - 각 기능별로 함수로 구현이 된 원형 연결 리스트 예제 소스입니다."한번에 이해되는 C 자료구조" 책을 참조하였습니다. // # 원형 연결 리스트에 원소 추가, 삽입하기 # #include #include using namespace std; typedef int element; struct tagListNode { // # 노드를 구성하는 데이터 필드 # element data; // # 다음 노드를 가리키는 링크 필드 # tagListNode* link; }; // # 헤더의 정보를 저장할 구조체 선언 # struct tagListHead{ tagListNode* head; }; // # 연결 리스트를 초기화하는 함수 # tagListHead* createLinkedListHe.. 더보기
★ 3. 선형 연결 리스트 구현하기[추가] 기존 선형 연결 리스트에서 좀 더 추가된 소스입니다. #include #include using namespace std;// # 노드 구조체 # struct tagListNode { int data; // # 노드를 구성하는 데이터 필드 # tagListNode* link; // # 다음 노드를 가리키는 링크 필드 # };// # 헤드 구조체 # struct tagListHead { tagListNode* head; };// # 리스트를 초기화 하는 함수 # tagListHead* createLinkedHeadList() { tagListHead* L; // # 헤더의 공간을 확보 # L = new tagListHead; L->head = NULL; return L; }// # 연결 리스트에 노드를 추.. 더보기

반응형