Maison  >  Article  >  Comment comprendre les listes chaînées en langage C

Comment comprendre les listes chaînées en langage C

清浅
清浅original
2019-03-06 10:31:0519768parcourir

La liste chaînée du langage C est une structure de données dans laquelle le stockage peut être alloué dynamiquement, les types de données de nœud peuvent être définis et les nœuds peuvent être ajoutés, supprimés, modifiés et vérifiés.

La liste chaînée est une structure de données de base commune, et les pointeurs de structure sont pleinement utilisés ici. La liste chaînée peut allouer dynamiquement du stockage. En d'autres termes, la liste chaînée est un tableau extrêmement puissant. Elle peut définir plusieurs types de données dans les nœuds, et des nœuds peuvent être ajoutés, supprimés et insérés selon les besoins. Ensuite, je vous présenterai en détail la liste chaînée en langage C dans l'article, j'espère qu'elle vous sera utile.

Comment comprendre les listes chaînées en langage C

[Cours recommandés : Tutoriel langage C]

La liste chaînée possède un pointeur head, généralement représenté par head, qui stocke une adresse. Les nœuds de la liste chaînée sont divisés en deux catégories, les nœuds principaux et les nœuds généraux. Le nœud principal n'a pas de champ de données. Chaque nœud de la liste chaînée est divisé en deux parties, un champ de données et un champ de pointeur. Une liste chaînée est comme une chaîne. La tête pointe vers le premier élément : le premier élément pointe vers le deuxième élément ;... jusqu'au dernier élément, l'élément ne pointe plus vers d'autres éléments. On l'appelle la « queue de la ». list". La partie adresse stocke un "NULL" (qui signifie "adresse vide"), et la liste chaînée se termine ici. En tant que liste chaînée dotée de fonctions puissantes, elle comporte bien sûr de nombreuses opérations, telles que : création de liste chaînée, modification, suppression, insertion, sortie, tri, ordre inverse, effacement des éléments de la liste chaînée, recherche de la longueur du lien. liste, etc Les débutants dans l'apprentissage des listes chaînées commencent généralement par une liste chaînée à sens unique

Liste chaînée vide

--->NULL
head

Une liste chaînée avec n nœuds

 ---->[p1]---->[p2]...---->[pn]---->[NULL]
head   p1->next  p2->next   pn->next

Créer une liste chaînée

Généralement, nous utilisons la structure typedef pour créer une liste chaînée, car lorsque nous définissons des variables de structure de cette manière, nous pouvons utilisez directement LinkList *a pour définir la variable de type de structure.

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

Initialiser une liste chaînée, n est le nombre de nœuds de liste chaînée

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;
}

Modifier la valeur du nœud de liste chaînée

Modifier la valeur du nœud de la liste chaînée est très simple. Ci-dessous se trouve une fonction qui passe dans une liste chaînée et le nœud à modifier pour modifier la valeur.

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("节点不存在");
}
}

Supprimer un nœud de liste chaînée

Supprimer un élément d'une liste chaînée consiste à pointer le champ de pointeur du nœud précédent devant le nœud à supprimer vers le nœud suivant. C'est-à-dire : p->next = q->next; puis libérez l'espace du nœud q, c'est-à-dire free(q);

Comment comprendre les listes chaînées en langage C

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("节点不存在");
	}
}

Insérer dans la liste chaînée Noeud

Comment comprendre les listes chaînées en langage C

On voit qu'insérer un noeud consiste à utiliser le champ pointeur du noeud avant insertion pour lier le champ de données du nœud inséré, puis le champ de pointeur du nœud inséré est lié au champ de données du nœud inséré. Selon la figure, l'insertion d'un nœud est : e->next = head->next; head->next = e;

L'ajout d'un nœud de liste chaînée utilise deux pointeurs de structure et une donnée 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("节点不存在");
	}
}

Sortir la liste chaînée

La sortie de la liste chaînée est très simple, il suffit de la sortir en la parcourant

        while (h->next != NULL) {
		h = h->next;
		printf("%d  ", h->score);
	}

Résumé : C'est tout pour cet article C'est tout, j'espère qu'il sera utile à tout le monde.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn