链表:用链式存储结构存储的线性表;
优点:插入删除不需要移动大量的数据,只需要修改指针即可;
缺点:表中的元素只能顺序存储,不能随机存取数据;
数据域:用来存储节点的值;
指针域:指向下一个节点(直接后继)的指针;
头指针:指向第一个节点的指针;
单链表的定义:
typedef struct node
{
int data; //数据域
node* next; //指针域
}slink;
单链表最基本的操作为指针后移,在某个节点的后面插入或删除节点;
单链表的建立:
算法思路:根据链表的示意图从头结点开始往后面建立新的节点,特别注意新建立的节点需要连接到上一个节点(也就是把上一个节点的指针域指向新建立的节点)。建立完成后,最后尾部节点后面不再建立新节点,是尾部节点的指针域置空(也就是代表着单链表的建立完成)。
slink* creslink(int n) //建立含有n个节点的单链表
{
slink* head, * p, * s;
int i;
p = head = (slink*)malloc(sizeof(slink)); // 建立头节点
for (i = 0; i < n; i++)
{
s = (slink*)malloc(sizeof(slink)); //建立节点
scanf("%d", &s->data); //输入数据
p->next = s; //将新节点连接到p所指的节点后面
p = s; //p指向新连接的节点
};
p->next = NULL;