链表:结构体变量和指向结构体变量的指针构成链表。
链表的头指针存放结构体变量的首地址,结构体的指针变量存放下一个结构体变量的首地址,依次递推,直至最后一个结构体指针变量next=NULL结束。
单链表:各个节点在内存中星罗棋布、散落天涯。
静态链表所有的节点都是在程序中定义的,不是临时开辟的,也不能用完后释放。静态链表分配一整片连续的内存空间,各个节点集中安置。
链表实例:
#include <stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
//声明或者叫用户自定义一个Student类型的结构体
struct Student {
//定义成员
int num;
float score;
Student *next;
};
int main() {
Student a, b, c, *head, *p;
a.num = 2111901199; a.score = 90.5;
b.num = 2111901197; b.score = 88.5;
c.num = 2111901198; c.score = 99.5;
head = &a;
a.next = &b;
b.next = &c;
c.next = NULL;
p = head;
do {
printf_s("%d,%f\n",p->num,p->score );
//p.num表示不明,p表示结构体变量a的起始地址即a.unm的地址。
//*p.num,"."成员运算符的优先级最高,因此该式等价于*(p.num),表示错误。
//(*p)表示p指向结构体变量,(*p).num是p指向结构体变量中的成员num,即a.num。
printf_s("%d,%f\n", (*p).num, (*p).score);
//p = p->next;//等价于p = (*p).next;表示将p->next的值赋给p。
p = (*p).next;
} while (p != NULL);
return 0;
}
实验结果:
静态链表的存储结构: