プログラミングC: 投稿 12 – 配列に設定リンクの一覧


リンクのリストは、アレイまたはポインタに設置することができる. この記事では、配列を使用する方法を紹介します :), このリストを入力することは、多くの場合、次のリストと呼ばれている.

1. [設定] (レポート) リスト

このリストを宣言するには、我々は持っている必要があります 1 最大要素数Nのデータ型の配列は、アイテムである (これは、データ項目の概要のタイプです, それはint型になりますとき, 構造型フロートや学生). もっと必要 1 可変サイズのリストは、既存の要素の数を表す。.
具体的には、以下:

code by nguyenvanquan7826
1
2
3
4
5
6
7
8
9
#define N 100 //so phan tu toi da la 100
typedef int item;
/*kieu cac phan tu la item
ma cu the o day item la kieu int */
typedef struct
{
    item Elems[N]; //mang kieu item
    int size; //so phan tu toi da cua mang
}List; //kieu danh sach List

2. 空のリストを初期化します

私たちのリストが空の場合、リスト内の要素の数によって 0. だから中1のサイズを宣言 0 ある.

code by nguyenvanquan7826
1
2
3
4
5
6
void Init(List *L) //ham khoi tao danh sach rong
/*Danh sach L duoc khai bao kieu con tro
de khi ra khoi ham no co the thay doi duoc*/
{
    (*L).size = 0; //size = 0.
}

3. リストが空のチェック, 完全なリスト

リストを確認するには、空またはリストの要素の単なる外観の完全である 0 か否か (ホロー) とNによるか (フル).

code by nguyenvanquan7826
1
2
3
4
5
6
7
8
9
int Isempty (List L)
{
    return (L.size==0);
}
 
int Isfull (List L)
{
    return (L.size==N);
}

4. リスト内の位置kに要素を挿入します

リスト内の要素を挿入する前に、私たちが構築する必要があります 1 機能は、データを返す (入力データ) 要素は、それを挿入する.

code by nguyenvanquan7826
1
2
3
4
5
6
item init_x() //khoi tao gia tri x
{
    int temp;
    scanf("%d",&temp);
    return temp;
}

[挿入に進みます:
挿入中、私たちは、リストがいっぱいになっているかどうかを確認する必要があります, 挿入し、それを確認する場所kを入力する, 適切な場合 (0<へ<N =) 挿入するように進みます.
リスト内の位置kにおける要素xを挿入するには (配列内の) 我々は必要とする 1 ループは、配列の最後の方に位置k個の要素から移動する, その後、位置kのxを挿入する. 最後に、サイズを増やす 1 ユニット.

リスト内の要素を挿入します
リスト内の要素を挿入します
code by nguyenvanquan7826
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int Insert_k (List *L, item x, int k)//chen x vao vi tri k
{
    if (Isfull(*L)) //kiem tra danh sach day
    {
        printf("Danh sach day !");
        return 0;
    }
 
    if (k<1 || k>(*L).size+1) //kiem tra dieu kien vi tri chen
    {
        printf("Vi tri chen khong hop le !\n");
        return 0;
    }
    printf ("Nhap thong tin: ");
    x = init_x(); //gan x = ham khoi tao x
    int i;
    //di chuyen cac phan tu ve cuoi danh sach
    for (i = (*L).size; i >= k; i--)
        (*L).Elems[i] = (*L).Elems[i-1];
    (*L).Elems[k-1]=x;//chen x vao vi tri k
    (*L).size++;//tang size len 1 don vi.
    return 1;
}

5. リストを入力します

いつもの配列として入力してください

code by nguyenvanquan7826
01
02
03
04
05
06
07
08
09
10
11
12
void Input (List *L)
{
    int n;
    printf("Nhap so phan tu cua danh sach: ");
    scanf("%d",&(*L).size);
    int i;
    for (i=0; i<(*L).size; i++)
    {
        printf("Nhap phan tu thu %d : ",i+1);
        (*L).Elems[i] = init_x();
    }
}

6. リスト内の要素xを探す

xの値がその位置を与えられている場合、私はリストの最後を拾い読み.

code by nguyenvanquan7826
1
2
3
4
5
6
7
8
int Search (List L, item x)
{
    int i;
    for (i=0; i<L.size; i++)
        if (L.Elems[i] == x)
            return i+1;
    return 0;
}

7. リストをクリアk番目の要素

一つはチェックする必要があります削除する前に、リストは空です. あなたが削除して検査する位置に流されない場合は (適切な場合は0<へ<N =).
私たちは、位置kに実行するためにforループを使用して, その後、前のk 1からの要素を置く 1 ユニット. しかし、我々はそれを使用する必要がある場合は、情報をご遠慮削除する前に削除された要素の値を保存する必要があります. 最後に、縮小サイズダウン 1 ユニット.

リストから要素を削除する
リストから要素を削除する
code by nguyenvanquan7826
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
int Del_k (List *L, item *x, int k)
{
    if (Isempty(*L))
    {
        printf("Danh sach rong !");
        return 0;
    }
    if (k<1 || k>(*L).size)
    {
        printf("Vi tri xoa khong hop le !");
        return 0;
    }
    *x=(*L).Elems[k-1]; //luu lai gia tri cua phan tu can xoa
    int i;
    for (i=k-1; i<(*L).size-1; i++) //don cac phan tu ve truoc
    (*L).Elems[i]=(*L).Elems[i+1];
    (*L).size--; //giam size
    return 1;
}

8. リスト内の要素の含有量xを除去する

我々は、検索機能を使用する前に行っ要素xを見つけるリスト内の要素の含有量xを削除するには、次にx位置の値を返す, 私たちは見つける位置に要素を削除するには、関数del_kを継続して使用する.

code by nguyenvanquan7826
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
int Del_x (List *L, item x)
{
    if (Isempty(*L))
    {
        printf("Danh sach rong !");
        return 0;
    }
 
    int i = Search(*L,x);
    if (!i)
    {
        printf("Danh sach khong co %d",x);
        return 0;
    }
    do
    {
        Del_k(L,&x,i);
        i = Search(*L,x);
    }
    while (i);
    return 1;
}

9. 完全なプログラム (フル)


[ポストをRPS-含ま=”2703″ ショートコード=”偽”]