リストの話をする前に、少し話を:
ロングは、ずっと前に、私は市場からのハスキーを買って、よく知られた、ハスキー、何もしないことは、一般的に、知られていない、彼は離れて実行してみましょうするために、私はそれにチェーンリーシュを必要とします、しかし、私は日曜大工、製チェーンを必要とする?それを行う方法、家に行く必要がありますか?もちろん、負けはあなたが見ている必要があります道の小さな鎖である、各セクションには、次のセクションを接続するための小さな港を持っているので、私は、着実の小さなチェーンを行うには、すべて一緒に1私はそれらのいくつかのためにチェーンに接続ロープを作ったので、その後、我々はまた、犬のセットである側、それを取った者であるエンドかを決定する必要があります。その後、私は20万人の改修計画をもたらすためにカザフスタンの2は,,,,,,さて、話は終わりました。写真付き!!
質問の前に、チェーン、小さなチェーン、ロープ三つの言葉や名詞の対応リストを覚えていてください。
単語 | 対応する名詞の一覧を表示 |
---|---|
チェーン | リスト |
小さなチェーン | ノード |
ロープ | ヘッドノード |
今Laijiangjiangの方法は、まず、異なるリストと配列のリストを連結し、配列要素のメモリアドレスが連続しており、リスト内のメモリ素子のアドレスはランダムです。以下のように、ノードのリンクリストのデータ型が同じであるとランダム保管されているので、我々は、配列がヘッドノードのみがリスト全体にアクセスすることができます知っている必要がありませんでしたようなので、私たちは各ノードに格納された次のノードに対処する必要があり各セクションの穴に犬のチェーンは、次のセクションでは、チェーン、我々は1リスト全体にアクセスできることを唯一の方法を接続するために使用されます。
アレイは、メモリの使用である、メモリアドレスが連続しています
リストには、すべての彼らは、次のノードへのポインタを持っている必要があり、メモリの使用であり、
ここを参照してください、あなたはので、ここで我々はそれのリストを定義するために来て、リストそれを少し理解している必要があります。
リストを定義します。1.
typedef struct list
{
int x;
struct list * next;
}list;
私たちは、金型の各セクションの小さなチェーンと同等のものを持っているリストの定義について考えてみて、それから、私たちは小さなチェーンやロープを行う必要があります。
2.ヘッドノードの初期化
list * InitListHead() //初始化
{
list *Phead = (list *)malloc(sizeof(list));//创建头结点
Phead->x = 0; //该变量可存放该链表长度
Phead->next = NULL;
return Phead; //创建后返回该头指针
}
INSERT INTO尾と頭を含む片方向リンクリストことに注意することは、ここで、データは、ヘッドノードの鎖長として、保存することができ、そう、それから、私達はちょうど重複ノードを作成する必要がある上、これはリストで、次のように個別に説明します。
3.ヘッド補間
void HeadList(list * L,int e)//头插法
{
list * Pbady = (list *)malloc(sizeof(list));//创建一个节点
Pbady->x = e;
Pbady->next = NULL;
if (L->next == NULL)
{
L->next=Pbady;
}
else
{
Pbady->next = L->next;
L->next = Pbady;
}
L->x++;
}
}
あなたはコードを少し硬いを見れば、我々は説明するための図を使用しています。
第1の補間データを用いて、見やすいが逆の順序であるが、後上面、プラグの頭部と尾部との間の差が挿入されているの一つです。
4.テール補間
void TrailList(list * LA,list ** LB,int e)//尾插法
{
list *Pbady = (list*)malloc(sizeof(list));
Pbady->x = e;
if (LA->next == NULL)
{
LA->next = Pbady;
}
else
{
(*LB)->next = Pbady;
}
Pbady->next = NULL;
*LB = Pbady;
LA->x++;
}
コードは無知探している場合、エンドプラグヘッドは、私たちがある図面に残っていること、もう一つのポインタのための補間方法を身に着けています。
ヘッドテール補間補間方法とは異なり、単に挿入の初めにすることができますが、我々は、ポインタを使用することを期待するので、最後には、リスト全体を横断し、リストは明らかに非科学的、再びたびに、それを横断するために十分な長さであれば、最後のを見つける必要が挿入されています私たちは、新しいノードを持っている時はいつでも、あなただけのポインタの後ろにプラグインできるように、最後のノードへの最後のノードの位置の記録、及びポイントをキープ。そして、二次ポインタの使用は、この記事を表示する理由としてポインタを更新します。
パラメータのポインタは、の問題のいくつかである
、以下の基本的な操作は、リストを見てください。
シリアル番号でコンテンツを探す5。
int NumFindList(list *L,int e)//按序号查找
{
if (e <= 0)
{
return -1;
}
int i = 0;
int j = L->x;
list * P = L;
while (P != NULL&&i <= j)
{
if (i == e)
{
printf("该内容为%d\n", P->x);
break;
}
P = P->next;
i++;
}
}
値によって検索6
void ValueFindList(list * L,int e)//按值查找
{
int i = 0;
int j = L->x;
list * P = L;
while (P != NULL&&i <= j)
{
if (P->x == e)
{
printf("已找到\n");
}
P = P->next;
i++;
}
}
チェーンの長さを求めている7.
int LengthList(list * L)//链表长度
{
return L->x;//这里我们只需要访问头节点中的数据即可
}
8.挿入
void InsertList(list * L,int i,int e)//插入操作
{
if (i > L->x)
{
printf("插入位置不合法\n");
return ;
}
list * Pbady = (list *)malloc(sizeof(list));
list *P = L->next;
int a = 1;
Pbady->x = e;
while (P != NULL)
{
if (a == i-1)
{
Pbady->next = P->next;
P->next = Pbady;
L->x++;
break;
}
P = P->next;
a++;
}
}
9.削除
void DelList(list * L,int i)//删除操作
{
if (i > L->x)
{
printf("插入位置不合法\n");
return;
}
list * P = L->next;
list * P_2 = NULL;
int a = 1;
while (P != NULL)
{
if (a == i-1)
{
P_2 = P->next;
P->next = P->next->next;
P_2->next = NULL;
free(P_2);
L->x--;
break;
}
P = P->next;
a++;
}
}
既存のコンテンツを表示リスト
void ShowList(list * L)//显示链表
{
list * P = L;
printf("该链表共有%d个元素\n", P->x);
P = L->next;
while (P!= NULL)
{
printf("%d\n", P->x);
P = P->next;
}
}
11.リリースメモリー
void FreeList(list * L)
{
list * P;
if (L == NULL)
{
return ;
}
while (L)
{
P = L->next;
free(L);
L = P;
}
}
さて、ここではリストにそれを説明するための一つの方法。何かが間違っている場合は、指摘してください。
それぞれのテキスト文:すべての顔に自信を持って笑顔にしてください、DOは常に涙を保持するために印象づけるために使用しないで、そして時にはあなたの涙は逆効果、笑顔!