自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 栈的两种实现方法

栈是一种特殊的线性表,采用后进先出的模式。数组方法定义一个固定长度的数组,每次push前判断top是否等于size,当等于时说明数组内部已经填满,应进行扩充,否则直接将数据填入到top位置,top++。代码如下:class stack1{ //采用数组方式 Object[] stack; int top; int size; public void init_stack1(){ //初始化栈的大小 size=10;

2021-01-21 16:36:08 577 1

原创 双向循环链表(关于123456输出456123问题的改进)

双向循环链表的实例关于123456输出456123的改进:在第一篇博客中,使用了数组的方法,在过程中,通过创建一个中间变量来覆盖每个数组位置的值,来达到数据的更新,但这种大的变动在使用中,会很繁琐,每输出一种形式就需要重新改变数据,而这很明显是一个输出的问题,而不应该改变数据本身的值。因此在循环链表中可以很好的解决这种问题。循环链表中,,每个结点的数据不需要改变,而通过让改变标记第一个输出数据的位置,即可完成按一定顺序输出。代码如下:链表初始化,使得26个英文字母存入链表,并使得最后一结点连向头结

2021-01-20 19:11:37 603

原创 双向链表

双向链表在单链表的基础上增加了头指针,可以指向前驱结点,所存储过程中便利很多,可以访问上一个结点。在使用过程中,插入结点的操作为:首先先通过遍历结点,找到其位置的前结点pnode.next,然后再进行连接,大致与单链表相同,但最好按照这样的顺序: dNode.next=pnode.next.next; dNode.pre=pnode.next; pnode.next.next=dNode; pnode.next.next.p

2021-01-19 16:03:46 101

原创 魔术师发牌问题

魔术师发牌问题问题描述:手中有同色扑克十三张(1~13),背面朝上,翻开第一张为1,将其放在桌面,对于剩下的12张牌,将第一张放在牌底,第二张翻开为2,将2放在桌面,对于手中剩下的11张牌,第一张放在牌底,第二张放在牌底,第三张翻开为3,依次类推,求牌的排列顺序。解决思路:需要求排列顺序,链表初始数据肯定为空,需要向链表中填写数据,那么填写了数据的结点就应被翻开,并置于桌面,说明这些结点不参与循环,因此可以得知,参与循环的只是空结点。那么就可以将判定条件设置为判断该结点是否为空,如果为空,则计数

2021-01-17 19:02:25 167

原创 判断单链表中是否有环

判断单链表中是否有环单链表中的循环链表尾结点不一定指向头结点,也可以指向任意中间结点。此时若想判断单链表中是否有环,就不能只是简单的根据尾结点的next是不是头结点来判断,在此我提供三种方法:方法一:创建两个指针p和q,其中p用来遍历指针,每次只走一步,并记录从根节点出发所走的步数,而q则是每次从根节点出发,到达p此时所在的位置,并记录步数,判断二者的步数是否相同来判断链表中是否有回环。如图所示,6的下个结点是3,此时p从6到3,走了7步,而q从头结点走到3只需要3步,步数不相同,则说明有回环

2021-01-16 22:45:42 1032

原创 约瑟夫环问题

约瑟夫环问题约瑟夫环:1、一群人围在一起坐成环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,4、一直循环,直到所有人出列,解决此问题,通过使用循环链表来解决,需要注意的是,循环过程中不需要头结点的参与,因此在数据添加完成后,应使最后一个结点指向头结点的next结点即本应是:现在是:让头结点不参与循环。才能使得数据正常输出,代码如下:package List;public class yuesefu { Node root;

2021-01-15 20:01:19 279

原创 循环链表的初始化,插入与删除

循环链表的初始化,插入与删除循环链表与普通链表相比,区别在于尾结点的next指向头结点,当链表为空时,头结点的next指向自身代码如下:链表的初始化:package List;public class circleLinklist { public Node root; public Node rnode; public void initcircleLinklist(circleLinklist circleLinklist){ root=new

2021-01-14 17:05:17 395

原创 查找未知链表长度的中间结点

查找未知链表长度的中间结点众所周知,链表是不知道长度的,如果想知道长度只能通过遍历一遍链表才可得知,因此对于查找未知链表长度的中间结点可以有很多方法。最简单的方法就是通过遍历一边链表得到长度L,再通过遍历L/2的链表得到中间结点,此时时间复杂度就是o(L+L/2).而另一种更简便方法则为通过建立两个指针,第一个指针为第二个指针速度的两倍,那么当第一个指针到达链表末尾的时候,就可以得知此时第二个指针在中间结点。代码如下:注:initLink为初始化链表,即添加根节点,添加结点的方法为尾插法,在其他文

2021-01-13 16:09:12 337

原创 静态链表

静态链表的创建及其插入删除静态链表是指创建一个固定长度的对象数组,用来模拟链表进行使用,既能够实现数组的按照索引快速访问,也能实现链表的碎片式插入与删除。(图表截取小甲鱼教学视频)静态链表含有三个元素,游标cur,数据data,以及下标静态链表中下标为0和下标为Maxsize-1的位置不存放数据,其中下标为0的cur用来标记第一个空位置的下标,Maxsize-1的cur用来标记第一个元素的下标,便于插入删除时使用,例如新插入元素的位置就是第一个空位置的下标,而如果要进行遍历,则需要从第一个元素开始遍

2021-01-12 23:24:23 502 1

原创 链表的尾插法及整表删除

链表的尾插法头插法:将新节点永远插在头结点的后方,虽然简便,但在遍历时会时顺序颠倒,尾插法很好的解决了这个问题。在使用尾插法时,需要定义插入结点的前结点,或者将其定义为尾巴结点,使用方法先时先判断,如果链表为空,即根节点的后继结点为空时,直接插入即可,与头插法相同,而当不为空时,说明有后继结点,此时需遍历找到尾巴结点,当pnode的next==null时,说明为最后一个结点,将想插入的结点插入即可。代码如下: public void insertForTail(Object data){

2021-01-12 16:41:29 391

原创 数组与链表的比较,链表的创建及其插入删除

数组与链表的区别数组与链表均为线性表,即一个元素的前继或后驱只有一个元素,为数据结构的基础。其中数组与链表相比,数组具有按索引查询方便的特点,其查询的时间复杂度为o(1),而链表查询时最坏情况时,所查元素位于链表末端,需查询n次,时间复杂度为o(n)。链表则具有插入删除方便的特点,无论在什么位置插入,只需将将其next指针改变即可,不需要改变其他元素的位置,而对于数组,则需将其后继元素全部向后移动一个单位,再将元素填入。链表的创建及其插入删除链表在创建前,需要定义node的结构体,设置其get、s

2021-01-11 18:15:26 837

原创 关于数组的插入与删除

关于数组的插入与删除注:关于数组定义,若 int[] A=new int [5];A= new int[]{1,2,3};则会将5覆盖,因此只能挨个赋值。插入在数组进行插入时,应注意对于整数型数组未填写数据时,默认为0,故只需判断需插入位置是否为0,若为0,说明该位置无数据,直接覆盖即可,若有数据,则判断数组最后一位是否为0,若为0,则说明还有存储空间,只需将n-1处及以后的元素挨个后移即可,否则说明无存储空间。代码如下:public void testInsert(int []A,i

2021-01-11 00:26:41 3052

原创 关于数组交并集问题

关于数组交并集问题(有什么不对或者更好的方案,希望给予指正,共同学习进步)今天学习数据结构线性表示,想到了关于数组的交并集问题,交集很好解决,利用两层循环进行比较,将相同的元素存入链表即可,(因为不知道具体创建多大的数组,因此采用数组链表,ArrayList)。代码如下:public void jiao(int[] A,int[] B){ List list=new ArrayList(); for(int i=0;i<A.length;i++){ for(

2021-01-10 16:39:29 488

原创 给定一个数组一个数,将其截取重新排序,例如A[]={1,2,3,4,5,6} ,n=3,输出为4,5,6,1,2,3

方法一:新建一个数组,将A.length-n个数据存入新数组,随后依次向后挪一个位置,由于后面数据还要用,因此new两个temp用来存数据,代码如下: public void jiequ(int[] A,int n){ int[]B=new int[n]; for(int i=0;i<n;i++){ B[i]=A[A.length+i-n]; } int temp1=A[0]; int temp2=0; for(int i=0;i&

2021-01-08 15:52:55 413

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除