while{p!=null} printf{%d/n,%d/n,price,atk};p=p>-next;
静态数据结构:整型、浮点型、数组(内存空间和里面的内容是定义好的)
链表由一个个节点组成,每个节点都包含了数据和下一个节点的地址两部分。
数组是连续的内存空间,链表不一定连续。
上图显示如何设计并访问静态链表。
其中p->atk和(*p).atk表达效果一致。
1.静态数据结构:整形,浮点型,数组(很难确定占用多大的空间)
2.动态数据·结构:(1)head里存在地址,
(2)链表里边各个·元素的地址不一定是连续的
3.用结构体类型作节点元素:指针,赋值,循环
4.节点到下一个节点没有(例子:c.next=NULL)用空表示
静态数据结构:系统自动分配存储空间——整型、浮点型、数组。。。
动态数据结构:链表
链表包括头文件和元素,头文件包括地址,元素包括每一个节点,每一个节点包括用户需要的数据和下一个节点的地址(元素地址不定是线性的)
malloc函数用于分配动态空间,在头文件<malloc.h>之下。
静态数据结构(固定大小):整型,浮点型,数组,
动态数据结构:链表
每一个节点包含两个部分,一部分是用户需要的数据,一部分是下一个节点的地址
链表里各个元素的地址不连续
struct weapon{
int price;
int atk;
struct weapon *next;//下一个节点的信息
};
struct weapon a,b,c,*head;
a.price=100;
a.atk=100;
b.price=200;
b.atk=200;
c.price=300;
c.atk=300;
head=&a;
a.next=&b;
b.next=&c;
c.next=null;
struct weapon *p;
p=head;
while(p!=null){
p->atk,p->price;
p=p->next;
}
a.price=100;
a.atk=100;
链表:能够动态存储数据的数据结构
静态链表的节点均在程序中进行编译
原理:head->1,和2的地址->2,和3的地址->…………->n,和NULL. 每次若需访问第n个数据必须知道前一个数据的地址再找到该数据的地址
静态数据结构:整型,浮点型,数组等,声明时要说明长度,且长度固定。
数组里的元素地址连续,
动态数据结构,如链表,空间不定;
head存有指向第一个元素的地址,每个元素都有内容及指向下元素的地址,尾元素地址为空; 没有头指针即head,整个链表都找不到;
静态链表: (以结构体类型作为节点元素为例)
struct weapon { int price; int atk; struct weapon * next; }; int main(){ struct weapon a,b,c,*head; a.price=100; a.atk=100; b.price=200; b.atk=200; c.price=300; c.atk=300; head=&a; a.next=&b; b.next=&c; c.next=NULL; //下面用指针逐个输出 struct weapon *p; p=head; while(p!=NULL){ printf("%d,%d\n",p->atk,p->price); p=p->next; //p指向下一节点的指针内容 } return 0; }
静态链表结构图
静态链表: struct weapon { int price; int atk; struct weapon *next; //指向下一个节点 }; struct weapon a,b,c,*head; head = &a; a.next = &b; b.next = &c; c.next = NULL;
在链表中,通过上一个元素的下一个元素的地址才可访问元素,若无头指针是无法访问链表的
3。链表的构成
2.链表的储存位置不一定是连续的
1.
1.