C言語接続リスト1
ノードについて説明します.
<ノード構造で作成>ヘッダポインタをNULL値の初期値 に置き換える.の新しいノードにメモリを割り当て、アドレス値をヘッダポインタに格納します. ノードの番号には、値12が格納されます.->次のノードはありません. <2番目のノードを追加した場合?>ノード番号の値に15を代入します. には次のノードがありません. <繰り返し文を使用して接続リストの最後のノードを参照します.> pヘッダに格納されているアドレス値から、最初のノードのアドレス値が格納される. p nextがNULLになるまで繰り返します. <実装接続リスト関数>接続リストに新しいノードを追加し、temp変数に渡された数値を新しい追加ノードの番号 に保存します.*pp tailというエンドポイントが追加されました.最後のノードを追加することでwhile文の使用を回避できます. <ノードの削除>
<ノード構造で作成>
typedef struct node
{
int number; //숫자를 저장하는 변수
struct node* p_next; // 다음 노드를 가르키는 포인터
}NODE;
<新しいノードの追加>NODE* p_head = NULL;
p_head = (NODE*)malloc(sizeof(NODE));
p_head->number = 12;
p_head->p_next = NULL;
p_head = (NODE*)malloc(sizeof(NODE));
p_head->p_next->number = 15;
p_head->p_next->p_next = NULL;
フェースノードメモリを2回割り当てます. NODE* p = p_head;
while (NULL != p->p_next)
{
p = p->p_next;
}
void AddLinkedlist(NODE** pp_head, int temp) //2차원 포인터를 선택한 이유는 p_head 포인터 변수와 주소 값을 넘겨 받아야하고, 1차원 포인터의 주소 값을 받아서 사용해야된다.
{
NODE* p;
if (NULL != *pp_head) // 여기서 *pp_head는 이전에 p_head값과 동일하다.
{
p = *pp_head;
while (NULL != p->p_next) p = p->p_next; // 마지막 노드를 찾기 위해서 p_next가 NULL일 때 까지 반복한다.
p->p_next = (NODE*)malloc(sizeof(NODE)); // 새 노드를 위한 메모리를 할당한다.
p = p->p_next; // 새로 만든 노드의 주소 값을 p에 넣는다.
}
else {
*pp_head = (NODE*)malloc(sizeof(NODE));//새 노드 메모리를 할당한다.
p = *pp_head; // 새로 만든 주소 값을 p에 대입한다.
}
p->number = temp; // 새 노드 number에 temp를 대입한다.
p->p_next = NULL; //다음 노드가 없다
}
<接続リストの最後のノード>void addfuction(NODE** pp_head, NODE** pp_tail, int number)//tail를 이용한 함수
{
//tail를 추가함으로써 while(NULL != *pp_head) x tail이라는 마지막 노드를 설정하고 그것이 p_next를 가리키게 설정한다.
if (NULL != *pp_head)
{
*pp_tail->p_next = (NODE*)malloc(sizeof(NODE));//메모리를 할당해라
*pp_tail = (*pp_tail)->p_next;
}
else
{
*pp_head = (NODE*)malloc(sizeof(NODE));
*pp_tail = (*pp_head);
}
*pp_tail->number = data; // 새 노드의 number에 data값 명시
*pp_tail->p_next = NULL; //다음 노드가 없음을 명시한다.
}
NODE* p = p_head, * p_save;
while (NULL != p)
{
p_save = p->p_next; // p_save에 값을 넣는 역할을 한다.
free(p);
p = p_save;
}
p_head = p_tail = NULL; //시작노드와 끝 노드가 없다는 것을 명시한다.
<ノードの削除(ヘッドポインタを使用)>NODE* p;
while (NULL != p_head)
{
p = p_head->p_next;
free(p);
p_head = p;
}
p_tail = p_head; //반복문을 빠져 나오면 p_head값은 NULL이다. p_tail 값도 NULL로 변경한다.
Reference
この問題について(C言語接続リスト1), 我々は、より多くの情報をここで見つけました https://velog.io/@qlwb7187/C언어-연결리스트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol