ホームページ  >  記事  >  C言語でリンクリストを理解する方法

C言語でリンクリストを理解する方法

清浅
清浅オリジナル
2019-03-06 10:31:0519505ブラウズ

C言語のリンクリストは、ストレージを動的に割り当て、ノードのデータ型を定義し、ノードの追加、削除、変更などを実装できるデータ構造です。

リンク リストは一般的な基本データ構造であり、ここでは構造ポインタが最大限に活用されます。リンク リストはストレージを動的に割り当てることができます。つまり、リンク リストは非常に強力な配列です。ノード内で複数のデータ型を定義でき、必要に応じてノードを追加、削除、挿入できます。次に、C言語のリンクリストについて記事で詳しく紹介しますので、ご参考になれば幸いです。

C言語でリンクリストを理解する方法

【おすすめコース:C言語チュートリアル

リンクされたリストには、アドレスを格納するヘッド ポインター (通常は head で表されます) があります。リンクリストのノードはヘッドノードと一般ノードに分かれており、ヘッドノードにはデータフィールドがありません。リンクされたリストの各ノードは、データ フィールドとポインター フィールドの 2 つの部分に分割されます。リンクされたリストはチェーンのようなものです。先頭は最初の要素を指します。最初の要素は 2 番目の要素を指します。...最後の要素まで、その要素は他の要素を指しません。これは「末尾」と呼ばれます。アドレス部分には「NULL」(「空のアドレス」という意味)が格納され、リンクリストはここで終了します。強力な機能を備えたリンク リストなので、リンク リストの作成、変更、削除、挿入、出力、並べ替え、逆順、リンク リストの要素のクリア、リンクの長さの検索など、さまざまな操作が可能です。リストなどリンク リストの学習の初心者は、通常、一方向のリンク リスト

#空のリンク リスト#

--->NULL
head
#n 個のノードを持つリンク リスト

##から始めます。 #
 ---->[p1]---->[p2]...---->[pn]---->[NULL]
head   p1->next  p2->next   pn->next

リンク リストの作成

一般に、構造変数を定義するときに LinkList *a; を直接使用して定義できるため、typedef struct を使用してリンク リストを作成します。構造型変数。

typedef struct student{
int score;
struct student *next;
} LinkList;

リンク リストを初期化します。n はリンク リスト ノードの数です

LinkList *creat(int n){
LinkList *head, *node, *end;//定义头节点,普通节点,尾部节点;
head = (LinkList*)malloc(sizeof(LinkList));//分配地址
end = head;         //若是空链表则头尾节点一样
for (int i = 0; i < n; i++) {
node = (LinkList*)malloc(sizeof(LinkList));
scanf("%d", &node->score);
end->next = node;
end = node;
}
end->next = NULL;//结束创建
return head;
}
リンク リスト ノードの値を変更します

変更 リンク リストのノード値は非常に単純です。以下は、値を変更するためにリンク リストと変更対象のノードを渡す関数です。

void change(LinkList *list,int n) {//n为第n个节点
LinkList *t = list;
int i = 0;
while (i < n && t != NULL) {
t = t->next;
i++;
}
if (t != NULL) {
puts("输入要修改的值");
scanf("%d", &t->score);
}
else {
puts("节点不存在");
}
}

リンク リスト ノードの削除

リンク リストの要素を削除するとは、前のノードのポインタ フィールドを、削除するノードを超えた次のノードに渡すことを意味します。 。つまり、 p->next = q->next; そしてノード q のスペースを解放します、つまり free(q);

void delet(LinkList *list, int n) {
	LinkList *t = list, *in;
	int i = 0;
	while (i < n && t != NULL) {
		in = t;
		t = t->next;
		i++;
	}
	if (t != NULL) {
		in->next = t->next;
		free(t);
	}
	else {
		puts("节点不存在");
	}
}

リンク リスト ノードの挿入

C言語でリンクリストを理解する方法

ノードを挿入すると、データをリンクするために挿入する前にノードのポインター フィールドが使用されることがわかります。挿入したノードのフィールドに挿入し、そのノードを挿入します。 ポインタフィールドのリンクが次のノードのデータフィールドに挿入されます。図によると、ノードの挿入は次のようになります: e->next = head->next; head->next = e;C言語でリンクリストを理解する方法 リンク リスト ノードの追加には、2 つの構造体ポインターと 1 つの int データが使用されます。

void insert(LinkList *list, int n) {
	LinkList *t = list, *in;
	int i = 0;
	while (i < n && t != NULL) {
		t = t->next;
		i++;
	}
	if (t != NULL) {
		in = (LinkList*)malloc(sizeof(LinkList));
		puts("输入要插入的值");
		scanf("%d", &in->score);
		in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
		t->next = in;//填充t节点的指针域,把t的指针域重新指向in
	}
	else {
		puts("节点不存在");
	}
}

出力リンク リスト

出力リンク リストは非常にシンプルで、トラバースしながら出力するだけです

        while (h->next != NULL) {
		h = h->next;
		printf("%d  ", h->score);
	}
概要: 上記が内容全体です。この記事がお役に立てば幸いです。

以上がC言語でリンクリストを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。