2012-05-01 3 views
0

포인터는 효율적이고 의미 론적 인 데이터 구조로 간주 될 수 있습니까? 연결된 목록, 해시, 큐, 스택에 대해 어떻게 스택 업 할 수 있습니까?포인터를 데이터 구조로 사용할 수 있습니까?

+1

데이터 구조에 정수 스택이 어떨까요? –

+1

예. 어쩌면. 미국은 민주주의인가, 공화국인가? 캘리포니아 스파클링 와인 샴페인인가요? 귀하의 질문은 코드가 아니라 단어 정의 중 하나입니다. 포인터는 데이터 구조로 간주 할 수 있습니다. 마찬가지로 데이터 구조와 구별 할 수 있습니다. 투표를 종료합니다. –

+0

@Chris : 정수는 메모리 셀에 저장된 비트로 구성됩니다. 셀 자체는 트랜지스터 (예 : SRAM 케이스의 6 개 트랜지스터)로 구성되거나 래치 조합이 될 수 있습니다. 셀 자체도 메모리 뱅크를 형성하도록 구성됩니다. 버스, 인터커넥트, 변환 테이블 등이 있습니다. 정수가 데이터 구조가 아닌 이유는 무엇입니까? –

답변

8

아니요, 포인터는 구조체가 아닌 형식 일뿐입니다. 유형 (std::vector, std::map, ...) 인 구조의 구현이 있지만 포인터는 없습니다.

이들은 일반적으로 열거 된 구조의 구현에 내부적으로 사용되지만 그 자체로 포인터는 구조체가 아닙니다.

+2

조심하다면 일부 아키텍쳐에서 정보를 포인터로 꾸릴 수있는 경우가있다. (아마도 번거롭게 할 필요는 없지만 여전히 가능할 것입니다.) – Flexo

+0

일부 아키텍처 에서뿐만 아니라 다음 포인터와 마지막 포인터를 xoring하여 단일 포인터로 이중 링크 된 목록을 구현할 수도 있습니다. 반복되는 동안 두 개의 포인터를 유지해야 노드의 포인터를 * 디코딩 할 수 있습니다. http://en.wikipedia.org/wiki/XOR_linked_list –

+0

@ DavidRodríguez-dribeas that sci-fi.그러나 어쨌든, 데이터 구조는 포인터가 아닌 이중 연결된 목록입니다. 구현 방법은 다른 문제입니다. –

0

포인터는 데이터 구조가 아닌 데이터 유형입니다. (다소 느슨한 용어가있는 일부 서적은 포인터와 같은 기본 유형을 더 큰 데이터 구조 세트의 요소로 정의하지만 포인터는 분명히 추상 데이터 구조의 예)

더 pertinently, 등과 데이터로의 포인터를 사용한다 링크리스트 큐, 스택, 트리, 및 추상적 인 데이터 구조의 대부분 C++ 구현 부재.; 즉, 포인터는 구현의 일부를 형성합니다; 그것들은 구현 그 자체가 아닙니다.

예를 들어, 자신의 링크 된 목록을 구현하려는 경우 목록의 각 요소가 이전 노드와 다음 노드에 대한 포인터가 포함 된 노드로 표시되는 이중 연결 버전을 선택할 수 있습니다.

template <typename T> 
class DLList 
{ 
public: 
    // Lots of things 
private: 
    Node* _head; // Pointer to the head of the list 
    Node* _tail; // Pointer to the tail of the list 
}; 

노드는 다음과 같이 구현 될 수있다 :

template <typename T> 
struct Node { 
    Node* _prev; 
    Node* _next; 
    T  _data; 
}; 
0

데이터 구조를 저장하고 효율적으로 사용할 수 있도록하는 컴퓨터로 데이터를 구성하는 특정 방법이다. 포인터는 실제로 데이터를 저장하고 구성하는 매우 효율적인 방법이며 요즘 메모리를 다루는 주요 방법입니다. 그것은 유일한 방법은 아니지만. 예를 들어 CPU 레지스터는 다르게 처리됩니다. 첫 번째 질문에 대한 대답은 '예'입니다.

두 번째 질문에 대해서는 실제로 포인터를 해시, 대기열, 스택 및 기타와 같은 상위 수준의 데이터 구조와 비교할 수 없습니다. 이것들은 두 가지 다른 수준의 추상화입니다. 상위 컨테이너는 포인터와 같은 하위 수준의 데이터 구조를 사용하여 구현됩니다.

관련 문제