本次总结仅限于对单链表的总结,后续会对双向链表、循环链表等总结。
大多数老师都统一口径说链表这一部分很简单,但是个人对链表的理解实在太差,还是无法理解链表代码所表示的意思和功能。
所以在此粗略总结。
链表是由节点组成,所谓节点就是一个结构体,这个结构体包括两部分:数据域和指针域。
指针域用来指向下一个节点的首地址。
——————————————————————————————————————————
结构体一般定义如下:
struct node{ //而没有typedef,就应为struct node *p,*head;
int data;
struct node *next;
};
或者
typedef struct node{ //加上typedef的作用大概就是,定义node类型。
int data; // 例如这样:node *head,*q;
struct node *next;
}node;
——————————————————————————————————————————
单链表基本操作(以C语言代码为例):一、单链表的初始化
head=(struct N*)malloc(sizeof(struct N));
head->n=NULL;
二、创建单链表
①前插法创建单链表
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL; //建立一个带头结点的空链表
for(i=0;i<n;i++){
q=(struct node *)malloc(sizeof(struct node)); //生成新结点*p
scanf("%d",&q->data); //输入元素值赋给新结点*q的数据域
q->next=head->next;
head->next=q; //将新结点*q插入到头结点之后
}
②后插法创建单链表
head=(node *)malloc(sizeof(node));
head->next =NULL; //建立一个带头结点的空链表
tail=head; //尾指针tail指向头结点
for(i=1;i<=n;i++)
{
p=(node *)malloc(sizeof(node)); //生成新结点
scanf("%d",&p->date); //输入元素值赋给新结点*p的数据域
p->next=NULL;
tail->next=p; //将新结点*p插入尾结点*tail之后
tail=p; //tail指向新的尾结点*p
}