1.数组
优点:随机访问元素效率高
缺点:需要分配一块连续的存储区域(很大区域,有可能分配失败),删除和插入某个元素效率低。
2.链表
节点:数据域,指针域
尾结点:指针域指向NULL
优点:不需要一块连续的存储区域,删除和插入某个元素效率高。
缺点:随机访问元素效率低。
3.结构体嵌套
(1).结构体可以嵌套另外一个结构体的任何类型变量
(2).结构体嵌套本结构体普通变量(不可以);
本结构体的类型大小无法确定,类型本质:固定大小内存块别名;
(3).结构体嵌套本结构体指针变量(可以)指针变量的空间能确定,32位, 4字节, 64位, 8字节;
typedef struct A { int a; int b; char *p; }A; typedef struct B { int a; A tmp1; //ok A *p1; //ok //struct B tmp2; //结构体嵌套本结构体普通变量(不可以) //本结构体的类型大小无法确定,类型本质:固定大小内存块别名 struct B *next; //指针类型大小确定:32位, 4字节, 64位, 8字节 }B;
4.静态链表
typedef struct Stu { int id; //数据域 char name[100]; struct Stu *next; //指针域 }Stu; int main(void) { //初始化三个结构体变量 Stu s1 = { 1, "mike", NULL }; Stu s2 = { 2, "lily", NULL }; Stu s3 = { 3, "lilei", NULL }; s1.next = &s2; //s1的next指针指向s2 s2.next = &s3; s3.next = NULL; //尾结点 Stu *p = &s1; while (p != NULL) { printf("id = %d, name = %s\n", p->id, p->name); //结点往后移动一位 p = p->next; //&s2 }