数组: 长度一旦创建,不能修改 在内存中是物理连续存放的(在内存中挨着存) 访问元素,可以通过下标(便捷) 增加/删除元素,涉及到更改数组的长度,也就是重建数组/平移数据(繁琐) 链表: 长度随着元素数量动态变化 在内存中非物理连续,通过指针连接 访问元素,通过链表的头指针依次查找(繁琐) 增加/删除元素,直接修改即可(便捷) ---—------------- 指针指向结构体 node a; node *head=&a; cout<<a.name; cout<<(*head).name; cout<<head->name; ----------------- 1、静态链表 创建链表节点 struct node{ //数据域 string name; int age; //指针域 node *nex; }; 创建三个节点并连接 node a,b,c; a.name="hhh"; a.age=15; b.name="qqq"; b.age=16; c.name="bbb"; c.age=14; a.nex=&b; b.nex=&c; c.nex=NULL; node *head=&a; 遍历链表 while(head!=NULL){ cout<<head->name; head=head->nex; }//错误示范,head指向的数据不能更改,防止数据丢失 node *p=head; while(p!=NULL){ cout<<p->name; p=p->nex; } 完成静态链表的增删改查 增:输入一个数字n,输入一个节点数据,将这个新数据插入到第n个位置上 完成增加操作后,遍历链表 删:输入一个数字n,删除第n个数据 完成删除操作后,遍历链表 改:输入一个数字n,输入一个节点数据,将第n个节点的数据更新 完成修改操作后,遍历链表 查:输入一个数字n,返回第n个节点的数据 完成查询后输出这个数据的具体信息 2、了解链表的节点结构 链表的每个数据结构称为链表的节点,每个节点包含数据域和指针域 单向链表,指针域指向下一个节点的地址,最后一个数据指向NULL,头指针指向第一个数据 双向链表,指针域分别上一个节点和下一个节点的地址,两个头,两个尾 循环链表,尾节点的指针指向头节点 3、动态创建链表 4、完成动态链表的增删改查(单向、双向) (责任编辑:admin) |