博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构---单链表
阅读量:3946 次
发布时间:2019-05-24

本文共 1373 字,大约阅读时间需要 4 分钟。

单链表是用一组任意的存储单元存放线性表元素,存储单元可能不连续,可以零散分布在内存的任意位置,,不过链表不同于顺序表的区别就是其一个存储单元当中包括数据以及连接下一个元素单元的指针,整体就像铁链一样一环扣一环。

一般都会这样定义:

template <typename t>

struct Node

{

t data;

Node<t> *next;

};

这是用模板写的链表结构,这只是数据类型,而要实现链表一般要再创建一个类,书上介绍的是LInkList,其中包含first,可以有头结点也可以没有头结点,其中就是看first是不是空,若指向一个节点那么就是有头结点。

直接贴一道题吧,约瑟夫环问题单链表解决,比较简单

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

#include
#include
using namespace std;struct Node{ int data; Node *next; //单链表数据构造};class LinkList{public: LinkList(); Node *first;};LinkList::LinkList(){ first = new Node; first->next = NULL;}int main(){ int n,k,m; cin>>n>>k>>m; Node nn; nn.data=1; Node *r; LinkList ll; r=ll.first; r->data=1; for(int i=2;i<=n;++i) { Node *s=new Node; s->data=i; r->next=s; r=s; } r->next=ll.first;Node *x;x=ll.first;int sum=2;if(m==1){ if(k!=1) {for(int i=1;i
next;} else for(int i=1;i
next; while(x->next!=x) { //cout<
next->data<
next=(x->next)->next; }}else{ for(int i=1;i
next;while(x->next!=x){ if(sum==m) { //cout<
next->data<
next=(x->next)->next;sum=1; /*r=ll.first; for(int i=1;i<=n;++i) { cout<
data<
next; }*/ } else {sum++;x=x->next;}}}printf("%d\n",x->data); return 0;}

转载地址:http://domwi.baihongyu.com/

你可能感兴趣的文章
android如何编译MTK的模拟器
查看>>
android如何添加AP中要使用的第三方JAR文件
查看>>
利用sudo命令为Ubuntu分配管理权限
查看>>
Ubuntu下几个重要apt-get命令用法与加速UBUNTU
查看>>
Ubuntu中网页各种插件安装命令
查看>>
使用tar命令备份Ubuntu系统
查看>>
ubuntu flash 文字乱码解决方案
查看>>
在ubuntu中运行exe文件
查看>>
ubuntu安装命令
查看>>
和上司沟通必备8个黄金句
查看>>
联系查看两张卡的未接电话记录
查看>>
把拒接电话作为已经接电话写到call log中
查看>>
FDN号码完全匹配
查看>>
Cosmos 拨号界面保存号码时先提示选择存储位置
查看>>
换卡或不插卡时删除通话记录
查看>>
静音模式下,来闹钟能响铃。
查看>>
调整提醒的优先级
查看>>
如何添加一个提醒
查看>>
Displaying Card Flip Animations 显示卡片翻转动画
查看>>
Zooming a View 缩放视图
查看>>