静态链表
1.概念:
静态链表是顺序表和链表的结合,在初始化时申请一定大小的空间(等同于定义一定长度的数组),数组元素时结构体的变量,结构体内有两个元素,一是数据,二是游标(相当于链表中的指针),游标保存的是下一个节点的下标。
2.与动态链表的区别:
(1)静态链表类似于数组的方法实现的,是顺序存储结构,在物理地址上的连续的,而且需要预先分配空间大小。所以静态链表的初始值一般是固定的,在做插入和删除时不需要移动元素,仅需修改指针。
(2)动态链表是用内存申请函数(malloc/new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。
3.静态链表;
#include <stdio.h>
/* 静态链表 */
struct node
{
int num;
struct node *next;
};
int main()
{
struct node stu[3];
struct node *head, *p;
stu[0].num = 10; //对结点的num成员赋值
stu[1].num = 20;
stu[2].num = 30;
head = &stu[0]; //头指针指向第1个结点stu[0]
stu[0].next = &stu[1]; //将结点stu[1]的地址赋值给stu[0]结点的next成员
stu[1].next = &stu[2]; //将结点stu[2]的地址赋值给stu[1]结点的next成员
stu[2].next = NULL; //stu[2]是最后一个结点,其next成员不存放任何结点的地址,置为NULL
//遍历静态链表
p = head; //使p指针也指向第1个结点
do{
printf("%d\n", p->num); //输出p所指向结点的数据
p = p->next; //然后让p指向下一个结点
} while (p != NULL); //直到p的next成员为NULL,即完成遍历
return 0;
}