数据结构单链表思维(数据结构堆中的单链表)

 2025-05-12  阅读 651  评论 0

摘要:在ctf中的pwn中,很多堆题都是考察对链表的了解情况,有时候考察单链表,有时候考察双链表。此篇文章说明了对于单链表的分析,并分析了数据区和指针区在结构体中是如何书写的。0×0:链表存储区域:堆区链表不需要连续空间0×1:链表特点链表成员除了存储自身的数据之外,还需要存储下一个成员的地址,每个成员都

在ctf中的pwn中,很多堆题都是考察对链表的了解情况,有时候考察单链表,有时候考察双链表。此篇文章说明了对于单链表的分析,并分析了数据区和指针区在结构体中是如何书写的。

0×0:链表

存储区域:堆区

链表不需要连续空间

数据结构单链表思维(数据结构堆中的单链表)(1)

0×1:链表特点

链表成员除了存储自身的数据之外,还需要存储下一个成员的地址,每个成员都可以通过地址找到下一个。

链表不需要提前声明好空间大小,只要运行内存足够大,链表就会无限延伸。

0×2:链表模型组成

数据结构单链表思维(数据结构堆中的单链表)(2)

节点:链表中是由若干个个体组成的,而这些个体,我们称之为节点。

头节点:排在链表最开头的节点称之为头节点。在头节点中,数据域无效。

头节点数据域做索引。

数据域:存储自身的数据。数据域中可以存储:内置数据类型、指针、数组、结构体。

指针域:存下一个节点的地址。

如何在程序中表示一个节点?

一个节点又有数据域、同时也存在指针域,最好用结构体来表示。

例子:设计一条链表,每一个节点都是存储int类型的数据,分别存储10,20,30,把链表的实现过程写出来。

数据结构单链表思维(数据结构堆中的单链表)(3)

0×3:单链表中的尾插

数据结构单链表思维(数据结构堆中的单链表)(4)

数据结构单链表思维(数据结构堆中的单链表)(5)

数据结构单链表思维(数据结构堆中的单链表)(6)

数据结构单链表思维(数据结构堆中的单链表)(7)

数据结构单链表思维(数据结构堆中的单链表)(8)

//设计节点 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:单链表中头插

数据结构单链表思维(数据结构堆中的单链表)(9)

0×5:小结

在链表中最重要的还是指针,所以对数据结构的掌握还是非常重要的。在c语言中,指针具有无比重要的地步。

,

版权声明:xxxxxxxxx;

原文链接:http://cn.tdroid.net/cedb5Cz0HAAwCUVA.html

发表评论:

管理员

  • 内容264933
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:
注册登录
注册帐号
登录帐号

Copyright © 2022 太卓开发网 Inc. 保留所有权利。 泰达科技网易库网

页面耗时0.1021秒, 内存占用1.33 MB, 访问数据库18次