数据结构与算法-线性表的应用

主要内容:

1.约瑟夫环问题
2.单链表逆转
3.有序单链表的按序插入
4.一元多项式的表示及计算

一、求解约瑟夫环问题

Josephus环问题:古代某法官要判决number个犯人的死刑,将犯人站成一个圆圈,从第start个人开始数起,毎数到第distance个犯人,就拉出来处决,然后再从下一个开始数distance个,数到的人再处决,······,直到剩下最后一个犯人予以赦免。
例如:当 number=5, start=0, distance=2 时:
s=0, d=2, n=5

在这里插入图片描述
B出环后:s=1, n=4

在这里插入图片描述

D出环后:s=2, n=3
在这里插入图片描述

A出环后:s=0, n=2
在这里插入图片描述
E出环后:n=1

在这里插入图片描述
算法分析:
用顺序表存储元素(犯人)
处决犯人即是顺序表的删除操作
环形的逻辑结构设计以实现删除元素时的循环计数

算法描述:
创建顺序表对象list,用String表示线性表类泛型参数T;
对list从第start个元素开始,依次计数,每数到distance,就删除该元素。
重复第2步,直到线性表长度为1。

顺序表的环形逻辑结构设计
把数组的首尾两个存储单元看成位置相邻的单元,即允许从数组中下标最大的位置前进到下标最小的位置。(设数组长度为Max)
首尾相接

下一单元的下标:( x+1 ) % Max

采用单链表求解Josephus问题,当 number=5, start=0, distance=3 时:
在这里插入图片描述

发布了141 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42554191/article/details/103977558
今日推荐