①.结构体
结构体中分为data(数据域)和next(指针)
struct node {
int number;
char str[10];//这里的我随意设置的,想要什么类型自己可以设置
struct node *next;
}; //struct结构体
②.创建一个全空链表
struct node *head,*tail,*p; //头尾和p指针
head = tail =NULL; //必须先设空,后面才能插入
③.添加
p = (struct node *) malloc(sizeof(node));//赋空间,要注意的是,每次把p插入后必须再次赋予空间
cin>>number>>str;//cin就是C语言中的scanf,即输入。这里的number和str并不是①中结构体里的,你还得重新设置过,这里命名相同是没什么关系的。
p->number=number;
strcpy(p->str,str)//strcpy函数是字符串复制,意思就是p->str=str,但是没这写法,得用到strcpy函数。
p->next = NULL;//把p->next赋为NULL,然后head和tail两个指针就可以指到p上而不再是NULL,也就是不再为空
if(head==NULL) head=p;//就一步就是上面说的头指针指向p而不是NULL,这一步只执行一次
else tail->next=p;//头指针指向了链表头部后不再移动,尾指针则不断移动,从而使得整个链表不断往后延伸,如果没有这一步链表不会往下延伸,只有最开始的一个
tail = p;//tail在这里就相当于火炬手,需要把火炬(即p指针)传下去,p是不断在更新的。
//它一更新即p = (struct node *) malloc(sizeof(node)),就转世重生没了记忆,不知道自己是谁,自己在哪,这时只有tail可以挽救它,把它传递下去。
如果没看懂在纸上稍微画一下,按照上面的流程推一推。
strcpy详见strcpy函数
③的操作可以不断重复用来延长链表。
实例:查询成绩(链表)