接続リスト-リソース構造


なぜ接続リストを使用するのですか?


接続リストについて話す前に、配列について話します.
私たちが配列を使う理由は何ですか?
なぜ
  • スキームを使用するのか
    1宣言が容易
    2ストレージデータ
    3
  • データへの順次アクセス
    はい、配列を使用しているのは、データに順次アクセスするためです.
    取締役室を実態に変えて、手配の動的配分について議論しましょう.
    配列の動的割り当ては、既存の既知の配列の多くの欠点を相殺します.
    データ数に基づいてアレイのサイズを決定するだけで、メモリをより効率的に向上
    使用できますが、データが変化したときにアレイ内のメモリを動的に割り当てることができます.
    調節は重い仕事だ
    これらの問題を解決するために,資料構造は接続リストという資料構造である.
    接続リストを見てみましょう.

    接続リスト


    前述したように、接続テーブルは2つの機能を提示する必要があります.
    1.データへの順次アクセスが必要
    2.動的配分の手間を減らす
    では、接続リストをゆっくり理解してみましょう.
    私たちが5つのメモリを割り当てて、絵を描くことを想像してみてください.

    5個のメモリをランダムに割り当てた
    これから接続しよう
    そして異常状態で番号を貼り付けます.

    上の図を見ると、配列に重要な順序が近いことがわかります.
    では、もし今新しいデータが入ってきたら、どうすればいいのでしょうか.
    新しいメモリを1枚目の<ヘッダ>最後の<ディテール>に貼ればいいです.
    このような接続リースデータの順次アクセスが可能となり、新しいデータを追加した後、同じものを貼るだけで終了する
    では、簡単なコードと画像で理解してみましょう.
    typedef struct _node
    {
    	int  data;	//데이터를 담을 공간
        struct _node * next; // 연결도구
    
    }
    
    struct _node * next;
    (この逆方向を次のノードを接続する接続ツールとして想像します)
    構造体を定義して簡単な図に描きました

    これらのシェイプをノードとして定義します
    これらのノードを接続します.

    接続リストの全体的な形式が完了しました
    次に、接続リストの挿入を見てみましょう.

    接続リストの挿入


    3つのポインタ変数を宣言して接続リストを挿入
    	typedef struct _node
    {
    	int  data;	//데이터를 담을 공간
        struct _node * next; // 연결도구
    
    }Node;
    
    //포인터 변수 
    Node * head =Null;
    Node * tail =Null;
    Node * cur =Null;
    針たちの様子を図で見てみましょう.
    (cur変数の逆活動は後述する)

    では、接続レポートを作成します.
    	typedef struct _node
    {
    	int  data;	//데이터를 담을 공간
        struct _node * next; // 연결도구
    
    }
    
    //포인터 변수 
    Node * head =Null;
    Node * tail =Null;
    Node * cur =Null;
    
    
    newNode = (Node*)malloc(sizeof(Node));
    newNode->data = 10;
    newNode->next = NULL;
    
    if(head == Null)
    	head = newNode;
    else
    	tail->next = newNode;
    
    tail = newNode;
    上のコードを3つのステップに分けて、図で観察します.
    
    //포인터 변수 
    Node * head =Null;
    Node * tail =Null;
    Node * cur =Null;
    
    
    newNode = (Node*)malloc(sizeof(Node));
    newNode->data = 10;
    newNode->next = NULL;
    if(head == Null)
    	head = newNode;
    else
    	tail->next = newNode;
    
    
    tail = newNode;

    次に、挿入プロセスのコードをリストすることで理解します.
    while(1)
    	{
    		printf("자연수 입력: ");
    		scanf("%d", &readData);
    		if(readData < 1)
    			break;
    
    		/*** 노드의 추가과정 ***/
    		newNode = (Node*)malloc(sizeof(Node));
    		newNode->data = readData;
    		newNode->next = NULL;
    
    		if(head == NULL)
    		{
    			head = newNode;
    			tail = newNode;
    		}
    		else
    		{
    			newNode->next = head;
    			head = newNode;
    		}
            tail = newNode;
    	}