포인터는 효율적이고 의미 론적 인 데이터 구조로 간주 될 수 있습니까? 연결된 목록, 해시, 큐, 스택에 대해 어떻게 스택 업 할 수 있습니까?포인터를 데이터 구조로 사용할 수 있습니까?
답변
아니요, 포인터는 구조체가 아닌 형식 일뿐입니다. 유형 (std::vector
, std::map
, ...) 인 구조의 구현이 있지만 포인터는 없습니다.
이들은 일반적으로 열거 된 구조의 구현에 내부적으로 사용되지만 그 자체로 포인터는 구조체가 아닙니다.
조심하다면 일부 아키텍쳐에서 정보를 포인터로 꾸릴 수있는 경우가있다. (아마도 번거롭게 할 필요는 없지만 여전히 가능할 것입니다.) – Flexo
일부 아키텍처 에서뿐만 아니라 다음 포인터와 마지막 포인터를 xoring하여 단일 포인터로 이중 링크 된 목록을 구현할 수도 있습니다. 반복되는 동안 두 개의 포인터를 유지해야 노드의 포인터를 * 디코딩 할 수 있습니다. http://en.wikipedia.org/wiki/XOR_linked_list –
@ DavidRodríguez-dribeas that sci-fi.그러나 어쨌든, 데이터 구조는 포인터가 아닌 이중 연결된 목록입니다. 구현 방법은 다른 문제입니다. –
포인터는 데이터 구조가 아닌 데이터 유형입니다. (다소 느슨한 용어가있는 일부 서적은 포인터와 같은 기본 유형을 더 큰 데이터 구조 세트의 요소로 정의하지만 포인터는 분명히 추상 데이터 구조의 예)
더 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;
};
데이터 구조를 저장하고 효율적으로 사용할 수 있도록하는 컴퓨터로 데이터를 구성하는 특정 방법이다. 포인터는 실제로 데이터를 저장하고 구성하는 매우 효율적인 방법이며 요즘 메모리를 다루는 주요 방법입니다. 그것은 유일한 방법은 아니지만. 예를 들어 CPU 레지스터는 다르게 처리됩니다. 첫 번째 질문에 대한 대답은 '예'입니다.
두 번째 질문에 대해서는 실제로 포인터를 해시, 대기열, 스택 및 기타와 같은 상위 수준의 데이터 구조와 비교할 수 없습니다. 이것들은 두 가지 다른 수준의 추상화입니다. 상위 컨테이너는 포인터와 같은 하위 수준의 데이터 구조를 사용하여 구현됩니다.
- 1. 포인터를 공용체에서 사용할 수 있습니까?
- 2. 순수 C++에서 포인터를 사용할 수 있습니까?
- 3. fortran에서 유형 생성자에 포인터를 사용할 수 있습니까?
- 4. C에서 void 포인터를 배열로 사용할 수 있습니까?
- 5. 어떻게 새로운 value_type 포인터를 사용할 수 있습니까?
- 6. 이전에 해제 된 포인터를 사용할 수 있습니까?
- 7. 데이터 유형의 포인터를 테스트 할 수 있습니까?
- 8. 어떻게 unordered_map을 트리 데이터 구조로 효율적으로 구현할 수 있습니까?
- 9. 파이썬에서 float 변수의 int 값과 일치하는 포인터를 사용할 수 있습니까?
- 10. 포인터를 기존 C++ 구조로 랩핑하는 파이썬 객체를 비교하는 방법은 무엇입니까?
- 11. 어떻게 포인터를 사용하지 않고 포인터를 시뮬레이트 할 수 있습니까?
- 12. MVC 구조로 객체 데이터 얻기
- 13. COM 스마트 포인터를 CList 컬렉션과 함께 사용할 수 있습니까?
- 14. 부모 클래스처럼 상속 된 클래스 포인터를 사용할 수 있습니까?
- 15. 함수는 정적 함수 포인터를 인수로 사용할 수 있습니까?
- 16. Silverlight : 사용자 정의 마우스 커서/포인터를 사용할 수 있습니까?
- 17. 이 구조로 MySQL 요청을 실행할 수 있습니까?
- 18. 비 포인터 데이터 멤버와 공유 포인터를 혼합 할 수 있습니까?
- 19. 함수 포인터를 사용하여 "데이터"를 실행할 수 있습니까?
- 20. jquery를 사용할 수 있습니까?
- 21. 데이터 포인터를 저장
- 22. BasicHttpBinding에서 데이터 계약 직렬화를 사용할 수 있습니까?
- 23. 데이터 저장을위한 데이터베이스 대신 사용할 수 있습니까?
- 24. 클래스 개체에 데이터 바인딩을 사용할 수 있습니까?
- 25. TBB 데이터 객체는 OpenMP에서 사용할 수 있습니까?
- 26. VB6에서 데이터 집합을 사용할 수 있습니까?
- 27. 데이터 보호와 함께 NSURLCredentialStorage를 사용할 수 있습니까?
- 28. XML을 추출하여 데이터 소스로 사용할 수 있습니까?
- 29. 언제든지 데이터 바인딩을 사용할 수 있습니까?
- 30. PHP에서 데이터 유형을 사용할 수 있습니까?
데이터 구조에 정수 스택이 어떨까요? –
예. 어쩌면. 미국은 민주주의인가, 공화국인가? 캘리포니아 스파클링 와인 샴페인인가요? 귀하의 질문은 코드가 아니라 단어 정의 중 하나입니다. 포인터는 데이터 구조로 간주 할 수 있습니다. 마찬가지로 데이터 구조와 구별 할 수 있습니다. 투표를 종료합니다. –
@Chris : 정수는 메모리 셀에 저장된 비트로 구성됩니다. 셀 자체는 트랜지스터 (예 : SRAM 케이스의 6 개 트랜지스터)로 구성되거나 래치 조합이 될 수 있습니다. 셀 자체도 메모리 뱅크를 형성하도록 구성됩니다. 버스, 인터커넥트, 변환 테이블 등이 있습니다. 정수가 데이터 구조가 아닌 이유는 무엇입니까? –