リンクリストデータ構造の操作

/ *
    時間:2019年10月13日午前11時16分02秒
    注:いくつかの一般的な操作のリンクリスト
* /
書式#include <stdio.hに>
する#include <malloc.hを>
する#include <stdlib.h>に含ま
ノード構造体のtypedef
{
    データINT; //データフィールド
    構造体ノード* pNext; //ポインタフィールド
} NODE、* PNODE、ノードの構造体へのノード、PNODE同等の構造体への// NODE相当*
//函数声明
PNODEのcreate_list(無効)。
空traverse_list(PNODE PHEAD)。
ブールis_empty(PNODE PHEAD)。
int型length_list(PNODE)。
ブールinsert_list(PNODE、int型、int型);
ブールdelete_list(PNODE、int型、int型*);
空sort_list(PNODE)。

メインINT(ボイド)
{
    PNODE PHEAD = NULL;ノードPHEAD = NULL構造体に// *等価;
    PHEAD create_listは=(); // create_list()関数:単鎖非環式を作成するために、リスト接合ヘッドPHEADするために支払わアドレスポイント
    traverse_list(PHEADを);
    IF(is_empty(PHEAD))
    {
        のprintf( "リストは、N- \空である!");
    }
    他
    {
        のprintf( "リストは、N- \空ではありません!");
    }
   length_list長= INT(PHEAD);
   のprintf( "リストの長さ:%Dを\ n"、長さ )。
   ( "ソート")のprintf;
   sort_list(PHEAD);
   traverse_list(PHEAD);
  
   IF(insert_list(PHEAD、4,26))
   {
       のprintf( "挿入ノード");
       traverse_list(PHEAD);
   }
   他
   {
        printf関数( "挿入ノードは、\ N-失敗しました!");
   }
   INTヴァル;
   IF(delete_list(PHEAD ,. 4、およびヴァル))
   {
        のprintf( "要素を削除:%dを、ノードを削除し、"ヴァル);
       traverse_list(PHEAD);
   }
   他
   {
      printf関数は、(「ノードに障害が発生した削除! \ N- ");
   }
  
    リターン0;
}
Create_list PNODE(ボイド)
{
   int型のlen、アクティブノードの数を格納するために使用//
   のprintf( "生成するリストのノード番号を入力してください:= LEN");
   scanfの( "%のD"、およびLEN)を、
   ヴァルint型; //一時的にユーザノードによって値の入力を格納します
   //割り当てられた有効なデータが最初のノードが割り当てられていない、ヘッドポインタ、最初のノードへPHEAD点PHEAD
   PNODE PHEAD =(PNODE)はmalloc(はsizeof(ノード));
   IF(PHEAD == NULL)
   {
        のprintf ( "割り当てが失敗し、プログラムが\ N-終了!");
        出口(-1);
   }
   PNODE pTail = PHEAD; // pTailは常にエンドノードにポイントが表す
   pTail-> pNext = NULL;
 
   (; IはLEN <I ++はI 0 = INT)のために
   {
        ;:のprintfは(。、I + 1を"%d個のノードの値を入力してください")
        scanfの( "%のD"、およびヴァル);
        //すべてのサイクル、 PNEWは、新しいノードを作成します
        PNODE PNEW =(PNODE)はmalloc(はsizeof(ノード));
        IF(PNEW == NULL)
        {
            のprintf( "割り当てが失敗し、プログラムが\ N-終了!");
            出口(-1);
        }
        pNew->データ=ヴァル;
        pTail-> pNext = PNEW; // PNEW PHEADの後部に連結
        pNew-> pNext = NULL;
        PTAIL PNEW =;
   }
   ペット復帰。
}
traverse_listボイド(PNODE PHEAD)
{
    PNODE P = PHEAD;
    のprintf( "リンクされたリストである:");
    ながら(!P-> pNext = NULL)
    {
        のprintf( "%のD"、P-> pNext->データ) ;
        P = P-> pNext;
    }
    のprintf( "\ N-")。
}
ブールis_empty(PNODE PHEAD)
{
    IF(NULL == pHead-> pNext)
    {
        trueを返します。
    }
    他
    {
        falseを返します。
    }
}
INT length_list(PNODE PHEAD)
{
    int型LEN = 0。
    PNODE P = pHead-> pNext。
    一方、(!p = NULL)
    {
        P = P-> pNext。
        LEN ++;
    }
    LENを返します。
}
ボイドsort_list(PNODE PHEAD)
{
    PNODEのP、Q;
    int型のトン。
    用(P = pHead-> pNext; P = NULL P = P-> pNext!)
    {
        (; Q = NULL; Q = P-> pNext!Q = Q-> pNext)用
        {
            IF(P - >データ> Q - >データ)
            {
                T = P->データ。
                p型>データ= Q->データ;
                Q->データ= tの、
            }
        }
    }
   
    を返します。
   
}
//リストの先頭に挿入がposが新しいノード、ノード値がValで、その値は、POS 1開始からあるノードPHEAD指さ
BOOLのinsert_list(PNODE PHEADは、POSをINTは、INTヴァル)
{
    int型I 0 =;
    PNODE P = PHEAD;
   
    ながら(= NULL && P-POS 1> I。!)
    {
        P = P-> pNext;
        Iは++;
    }
    IF(I> POS-1 || P == NULL)
    {
        falseを返します。
    }
    PNODE PNEW =(PNODE)はmalloc(はsizeof(NODE))。
    もし(NULL == PNEW)
    {
        のprintf( "动态分配内存失败\ N!");
        出口(-1)。
    }
    pNew->データ=ヴァル。
    PNODE Q = P-> pNext。
    P-> pNext = PNEW。
    pNew-> pNext = Q。
    trueを返します。
}

ノードが除去される前に、//ノードを見つける
BOOLのdelete_list(PNODE PHEAD、POS INTを、INT *をpVal)
{
    int型I = 0;
    PNODE P = PHEAD;
    (!P-> pNext = NULL && I <-pos 1)一方
    {
        P = P-> pNext;
        Iは++;
    }
   
    IF(I> POS 1-P - == NULL ||> pNext。)
    {
        falseに戻り;
    }
   
    PNODE Q = P-> pNext;
    *をpVal Q- =>データ;
   
    / /ノードPの後ろのノードを削除
    P-> = P-pNext> pNext-> pNext;
    フリー(Q);
    Q = NULL;
   
    trueに戻します;
}

おすすめ

転載: www.cnblogs.com/baoyingying/p/11665503.html