링크 에서 Node 와 LinkList (Node *) 의 차이
8825 단어 데이터 구조
우선 구조 체 를 살 펴 보 자.
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node, *LinkList;
이 구조 체 에 서 는 노드 (struct Node 와 등가), 링크 리스트 (Node 와 등가) 를 사용 했다.구조 체 내부 에 struct Node next 도 정의 되 어 있 습 니 다. 이러한 정 의 는 Node 의 지향 을 바 꿀 수 있 지만 내부 의 값 을 바 꿀 수 없습니다. Node 내부 의 값 을 바 꾸 려 면 LinkList *, 즉 구조 체 지침 을 가리 키 는 지침 을 사용 해 야 합 니 다.
결론.
Node *: 구조 체 의 지향 (예 를 들 어 다음 노드 를 가리 키 거나 NULL 을 가리 키 는 것) 을 바 꿀 수 있 지만 내부 요 소 를 바 꿀 수 없습니다.구조 체 노드 를 가리 키 는 지침 입 니 다.
LinkList *: 구조 체 내부 의 요소 (예 를 들 어 내부 data, next 지향 등) 를 바 꿀 수 있 지만 구조 체 노드 의 지향 을 바 꿀 수 없습니다.구조 체 지침 을 가리 키 는 지침 입 니 다.
예시
1. 프로그램 에서 보 듯 이 LinkList 를 사용 하면 이 노드 가 NULL 인지 아 닌 지 를 판단 할 수 있 고 상황 2 는 노드 내부 값 을 바 꿀 수 없습니다.
int main()
{
//
LinkList head1;
head1 = NULL;
printf("
");
//
#if 0
LinkList head2;
head2->data = 1;
head2->next = NULL;
perror("
");
#endif
//
Node head3;
head3.data = 1;
head3.next = NULL;
printf("head3.data = %d, next = %p
", head3.data, head3.next);
}
2. 여기 서 LinkList * head 를 이해 하면 (head) 를 하나의 전체 로 보고 내부 값 을 바 꿀 수 있다 는 LinkList 를 표시 하면 된다.swap (int a, int * b) 에서 (* a) 와 (b) 를 주소 값 을 바 꿀 수 있 는 int 형 으로 비교 하면 됩 니 다.또한 주의: 우 리 는 main 함수 에서 링크 리스트 와 같은 형식 을 정의 하지 않 고 링크 리스트 node 와 같은 형식 만 정의 합 니 다.LinkList * node 라 는 형식 은 함수 에서 만 사용 되 며, 일반적으로 (* node) 를 전체 로 간주 합 니 다. 예 를 들 어 (* a), (* b).
#include
#include // ,
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node, *LinkList;
//
void InitList(LinkList *head)
{
(*head) = (LinkList)malloc(sizeof(Node));
(*head)->data = 1;
(*head)->next = NULL;
}
int main()
{
LinkList head = NULL;
InitList(&head);
printf("head.data = %d, next = %p
", head->data, head->next);
return 0;
}
3. 그 다음 에 각 조작 이 사용 하 는 형식 도 알 수 있다.
//
void Insert(LinkList L, ElemType e);
//
void Delete(LinkList L, ElemType e);
// , free
void Destory(LinkList *L);