初学者学习链表应该看的第一篇文章(c语言)

链表是基于将多个结构体连接在一起,可以使用一个指向链表的指针访问链表中存储的信息。

初学者学习链表应该看的第一篇文章(c语言)

 每一个方块代表了一个结构体,比如我们可以这样来定义一个结构体:

struct node{
    int val;
    struct node*next;
};

该结构体可以储存一个int量,还有一个指向该类型结构体的指针。

我们可以在具体的程序中看看链表是如何实现的:

#include <stdio.h>  
#include<stdlib.h>  //提供malloc函数;
#include<string.h>  //提供字符串函数strcpy

typedef struct film {  //typedef让struct film可以用Film代替。 
	char title[20];
	struct film* next;
}Film;

int main() {
	Film* head = NULL;//创造出一个头指针,指向链表的第一项
	Film* current = NULL;//current指针是为了方便对链表进行操作
	Film* tail = NULL;//tail指针始终指向链表的最后一个元素可以对链表加项
	char input[20];
	puts("enter the first movie title");
	while (fgets(input, 20, stdin) != NULL && input[0] != '!') {
		current = (Film*)malloc(sizeof(Film)); 
		strcpy(current->title, input);
		if (head == NULL) { /*如果head指针是NULL的那证明还没有项加入链表中,那就让head指向第一项*/
			head = current;
		}
		else {
			tail->next = current; //将current接到链表的尾部
		}
		current->next = NULL;
		tail = current;//让tail指针重新指向最后一项
		puts("enter the next movie title or input ! to stop");
	}

	current = head; //让current指向第一个元素,打印每个结构体含有的title
	while (current != NULL) {
		printf("%s", current->title);
		current = current->next;
	}
    //释放空间
	current = head;
	while (current != NULL) {
		head = current->next;
		free(current);
		current = head;
	}
	puts("finished!");
	return 0;
}

 这样我们就利用链表实现了简单的功能,但是还存在许多缺点,比如无法实现删除某个节点,而且该代码只是带大家初步认识链表,后续还会为大家带来更为深入的链表知识。

上一篇:PyQt5线程队列-----ThreadLoop


下一篇:生成省市区(不包含港澳台)