Heim  >  Artikel  >  So verstehen Sie verknüpfte Listen in C-Sprache

So verstehen Sie verknüpfte Listen in C-Sprache

清浅
清浅Original
2019-03-06 10:31:0519768Durchsuche

Die verknüpfte Liste in C-Sprache ist eine Datenstruktur, in der Speicher dynamisch zugewiesen, Knotendatentypen definiert und Knoten hinzugefügt, gelöscht, geändert und überprüft werden können.

Verknüpfte Listen sind eine gemeinsame Basisdatenstruktur, und Strukturzeiger werden hier vollständig genutzt. Die verknüpfte Liste kann Speicher dynamisch zuweisen. Mit anderen Worten: Die verknüpfte Liste ist ein äußerst leistungsfähiges Array. Sie kann mehrere Datentypen in Knoten definieren und Knoten können nach Bedarf hinzugefügt, gelöscht und eingefügt werden. Als nächstes werde ich Ihnen die verknüpfte Liste in C-Sprache im Artikel ausführlich vorstellen. Ich hoffe, dass sie für Sie hilfreich ist.

So verstehen Sie verknüpfte Listen in C-Sprache

[Empfohlene Kurse: C-Sprach-Tutorial]

Die verknüpfte Liste verfügt über einen Kopfzeiger, der im Allgemeinen durch Kopf dargestellt wird und eine Adresse speichert. Die Knoten in der verknüpften Liste sind in zwei Kategorien unterteilt: Kopfknoten und allgemeine Knoten. Der Kopfknoten hat kein Datenfeld. Jeder Knoten in der verknüpften Liste ist in zwei Teile unterteilt, ein Datenfeld und ein Zeigerfeld. Eine verknüpfte Liste ist wie eine Kette. Der Kopf zeigt auf das erste Element: Das erste Element zeigt auf das zweite Element. Bis zum letzten Element zeigt das Element nicht mehr auf andere Elemente Liste". Der Adressteil speichert einen „NULL“ (was „leere Adresse“ bedeutet) und die verknüpfte Liste endet hier. Da es sich um eine verknüpfte Liste mit leistungsstarken Funktionen handelt, gibt es natürlich viele Vorgänge, z. B. Erstellen, Ändern, Löschen, Einfügen, Ausgeben einer verknüpften Liste, Sortieren, umgekehrte Reihenfolge, Löschen von Elementen der verknüpften Liste und Ermitteln der Länge der verknüpften Liste Liste usw. Anfänger beim Erlernen verknüpfter Listen beginnen normalerweise mit einer einseitig verknüpften Liste

Leere verknüpfte Liste

--->NULL
head

Eine verknüpfte Liste mit n Knoten

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

Erstellen Sie eine verknüpfte Liste

Im Allgemeinen verwenden wir typedef struct, um eine verknüpfte Liste zu erstellen, da wir bei der Definition von Strukturvariablen auf diese Weise LinkList direkt verwenden können *a; um Strukturtypvariablen zu definieren.

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

Eine verknüpfte Liste initialisieren, n ist die Anzahl der Knoten der verknüpften Liste

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

Ändern Sie den Knotenwert der verknüpften Liste

Das Ändern des Knotenwerts der verknüpften Liste ist sehr einfach. Nachfolgend finden Sie eine Funktion, die eine verknüpfte Liste und den zu ändernden Knoten übergibt, um den Wert zu ändern.

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

Knoten der verknüpften Liste löschen

Das Löschen eines Elements der verknüpften Liste bedeutet, dass das Zeigerfeld des vorherigen Knotens an den nächsten Knoten hinter dem zu löschenden Knoten übergeben wird. Das heißt: p->next = q->next und dann den Platz des q-Knotens freigeben, also free(q);

So verstehen Sie verknüpfte Listen in C-Sprache

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

Knoten der verknüpften Liste einfügen

So verstehen Sie verknüpfte Listen in C-Sprache

Wir können sehen, dass beim Einfügen eines Knotens das Zeigerfeld des Knotens vor dem Einfügen zum Verknüpfen verwendet wird Datenfeld des eingefügten Knotens, und fügen Sie dann den Knoten ein. Der Zeigerfeldlink wird in das Datenfeld des späteren Knotens eingefügt. Gemäß der Abbildung erfolgt das Einfügen eines Knotens wie folgt: e->next = head->next; head->next = e;

Beim Hinzufügen eines verknüpften Listenknotens werden zwei Strukturzeiger und int-Daten verwendet.

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

Verknüpfte Liste ausgeben

Die Ausgabe der verknüpften Liste ist sehr einfach, geben Sie sie einfach aus, während Sie sie durchlaufen

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

Zusammenfassung: Das Obige ist der gesamte Inhalt Ich hoffe, dass dieser Artikel allen hilft.

Das obige ist der detaillierte Inhalt vonSo verstehen Sie verknüpfte Listen in C-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn