P505 链表
数组 vs 链表
数组定义简单,以连续的变量形式储存,不可以减少或添加任何变量,因此在定义时必须已知长度,可能造成数组不够长或内存浪费的情况;
链表以结构体的自引用为原理,可以在内存中以不连续的方式储存,并动态分配内存,即随时加入或删除一个变量。但链表定义比较复杂,且除头结点外每一个结点都没有名字,引用起来比较辛苦。
如果是已知所需变量数,还是数组方便些。
//单链表入门练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include<bits/stdc++.h> using namespace std; struct Node{ int No;string Na; Node *nxt; }*H,*p,*pre; int main(){ H=pre= new Node; cin>>H->No>>H->Na; for ( int i=2;i<=11;i++){ p= new Node; cin>>p->No>>p->Na; pre->nxt=p; pre=p; } p->nxt=NULL; puts ( "List1:" ); for (p=H;p!=NULL;p=p->nxt)cout<<p->No<< " " <<p->Na<<endl; puts ( "" ); //puts("【插入 在i前插入k】"); //puts("请输入:i k"); //puts("【删除 删除k】"); //puts("请输入:k"); return 0; } /* 1000 薛零 1001 刘一 1002 陈二 1003 张三 1004 李四 1005 王五 1006 赵六 1007 孙七 1008 周八 1009 吴九 1010 郑十 */ |
// 约瑟夫问题链表版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <iostream> #include <windows.h> using namespace std; struct Person{ int num; Person *next; }; int main(){ int i,n,m; Person *head,*p,*pre; head=pre= new Person; head->num=1; cin>>n>>m; for (i=2;i<=n;i++){ p= new Person; pre->next=p; p->num=i; pre=p; } p->next=head; pre= new Person; pre->next=head; while (head){ p=pre; for (i=0;i<m;i++){ pre=p; p=p->next; } cout<<p->num<< " " ; Sleep(600); if (p!=p->next) pre->next=p->next; else head=NULL; delete p; } cout<<endl; return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C# 模式匹配全解:原理、用法与易错点
· 记一次SSD性能瓶颈排查之路——寿命与性能之间的取舍
· 理解 .NET 结构体字段的内存布局
· .NET 9中的异常处理性能提升分析:为什么过去慢,未来快
· 字符集、编码的前世今生
· 记一次SSD性能瓶颈排查之路——寿命与性能之间的取舍
· 2025 年实用、全面的 VS Code 插件推荐!
· 架构师之我见(一)入门篇
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(五):使用.NET为树莓派
· C#实现Stdio通信方式的MCP Server