网站首页 > 文章精选 正文
在ctf中的pwn中,很多堆题都是考察对链表的了解情况,有时候考察单链表,有时候考察双链表。此篇文章说明了对于单链表的分析,并分析了数据区和指针区在结构体中是如何书写的。
0×0:链表
存储区域:堆区
链表不需要连续空间
0×1:链表特点
链表成员除了存储自身的数据之外,还需要存储下一个成员的地址,每个成员都可以通过地址找到下一个。
链表不需要提前声明好空间大小,只要运行内存足够大,链表就会无限延伸。
0×2:链表模型组成
节点:链表中是由若干个个体组成的,而这些个体,我们称之为节点。
头节点:排在链表最开头的节点称之为头节点。在头节点中,数据域无效。
头节点数据域做索引。
数据域:存储自身的数据。数据域中可以存储:内置数据类型、指针、数组、结构体。
指针域:存下一个节点的地址。
如何在程序中表示一个节点?
一个节点又有数据域、同时也存在指针域,最好用结构体来表示。
例子:设计一条链表,每一个节点都是存储int类型的数据,分别存储10,20,30,把链表的实现过程写出来。
0×3:单链表中的尾插
//设计节点
struct list_node {
int data;//数据域
struct list_node *next;//指针域
};
struct list_node *head = init_list_head();
{
//申请一个头节点
struct list_node *head = malloc(sizeof(struct list_node));
if(head ==NULL)
{
printf("malloc head err\n")
}
//头节点的数据域与指针域赋值
head ->next =NULL;
return head;
}
//定义一个新的节点
intsert_node_to_tail(struct list_node *head,int sum)
{
//为新节点申请空间
struct list_node *new = malloc(sizeof(struct list_node));
if(new ==NULL)
{
printf("malloc new code err\n");
}
new->data=num;//text 的值
new->next=NULL;//next指针
//寻找最后一个节点
struct list_node *p=NULL;
for(p=head;p->next!=NULL;p=p->next);
//从循环出来,必定是p->next一定NULL,这时候p一定指向最后一个节点。只需要将最后一个节点指针域指向新节点
p->next =new;
return 0;
}
void show_list_node(struct list_node *head)
{
struct list_node *p = NULL;
for (p=head;p->next!=NULL;p=p->next)
{
printf("data:%d\n",p->next->data);
}
}
int main(int argc,char *argv[])
{
//初始化链表的头节点
struct list_node *head = NULL;
head = init_list_head();
//链表尾部插入数据
intsert_node_to_tail(head,10);
intsert_node_to_tail(head,20);
intsert_node_to_tail(head,30);
show_list_node(head);
return 0;
}
0×4:单链表中头插
0×5:小结
在链表中最重要的还是指针,所以对数据结构的掌握还是非常重要的。在c语言中,指针具有无比重要的地步。
猜你喜欢
- 2024-12-24 mysql索引总结(二) mysql索引的使用和原理
- 2024-12-24 常见数据结构—线性表详解(超详细顺序表、链表)
- 2024-12-24 「C语言」链表的操作——增删改查——让你一次全弄懂
- 2024-12-24 单向链表基本操作你学会了吗 单向链表基本操作你学会了吗为什么
- 2024-12-24 深入理解HashMap 深入理解计算机系统第三版答案
- 2024-12-24 @程序员,你真的了解内存吗? 程序员不用担心内存管理
- 2024-12-24 详解双向链表的基本操作(C语言) 双向链表基本操作的实现
- 2024-12-24 环形队列 Circular Queue 环形队列中有多少个元素可以根据队首指针
- 2024-12-24 编程知识:既然已经有数组了,为什么还要链表?
- 2024-12-24 哈希表原理及应用 哈希表工作原理
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)