c++ 链表_C/C++版数据结构之链表!

6656081938a348704c8c6830d067f3b5.png

链表主要就单链表、循环链表和双向链表3种链表进行讨论。

C/C++进阶之路​zhuanlan.zhihu.com
db554a6d31b31a04c9617d30f3d4f32d.png

一、单链表

概念:所谓单链表,是指数据结点是单向排列的。一个单链表结点,其结构类型分为两部分:

(1)数据域:用于存储数据元素的值。

(2)指针域(链域):用于存储下一个结点地址或者说指向其直接后继结点的指针。

算法:

一般声明3个指针来操作链表:

head:用来指向链表的头部。链表需要一个指针来标识链表,这就是头指针。

p1:用来指向新结点,以及用来遍历链表的每一个结点。

p2:用来指向当前结点。

(1)单链表创建算法

创建结点数目为n的链表:

#include

typedefstructnode

{

intnum;//数值域structnode *next;//指针域}stud;

stud* Create(intn)

{

stud *head,*p1,*p2;

head=p1=p2=NULL;

for(inti=0;i

{

p1=(stud*)malloc(sizeof(stud));

p1->num=i;

if(i==0)

{

head=p1;

}

else

{

p2->next=p1;

}

p2=p1;

}

p2->next=NULL;

returnhead;

}

(2)单链表的查找算法

在头指针为head的单链表中查找i:

typedefstructnode

{

intnum;

structnode *next;

}stud;

stud* Find(stud *head,inti)

{

stud *p1;//遍历链表指针p1=head;

while(p1!=NULL)

{

if(i==p1->num)

{

break;

}

else

{

p1=p1->next;

}

}

returnp1;

}

(3)单链表删除算法

在头指针为head的单链表中删除i:

#include

typedefstructnode

{

intnum;

structnode *next;

}stud;

boolDelete(stud *head,inti)

{

boolflag=false;

if(head)//不是空链表{

stud *p1,*p2;

p1=head;

while(p1->num!=i && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(p1->num==i)

{

if(p1==head)

{

head=head->next;

}

else

{

p2->next=p1->next;

}

free(p1); //释放已经脱离链表的结点内存

flag=true;

}

}

returnflag;

}

(4)单链表插入算法

在头指针为head的单链表中插入结点p:(假设这是一个由小到大排序的有序链表)

typedefstructnode

{

intnum;

structnode *next;

}stud;

stud* Insert(stud *head,stud *p)

{

stud *p1,*p2;

p1=head;

if(!head)

{

head=p;

head->next=NULL;

}

else

{

while(p->num > p1->num && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(p->num < p1->num)

{

if(head==p1)

{

head=p;

p->next=head;

}

else

{

//把p插入p2和p1之间p2->next=p;

p->next=p1;

}

}

else

{

//把p插入链表的尾部,此时p1指向尾部结点p1->next=p;

p->next=NULL;

}

}

returnhead;

}

“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。免费送给大家。这里是编程爱好者的聚集地,欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。

关注我的专栏带你遨游代码的世界!

C/C++进阶之路​zhuanlan.zhihu.com
db554a6d31b31a04c9617d30f3d4f32d.png

最后分享一张C/C++学习路线图给爱学习的小伙伴们

624b5417b66fa41ead6a2e9a1be34920.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值