题一:某堆栈里有n个数字,也许有零,请把非零数字按次序排列放在堆栈前面,零放后面。题二:n个人围坐一圆桌边,从第s(s>=1)个人开始数,数到m的人离开,接在其后的人从1开始数,数到m的人离开,如此循环,直到最后一人,请用程序表示离开人的次序。诸位大侠,不吝赐教,多谢多谢!!!

解决方案 »

  1.   

    第一个问题去看看起泡排序法的伪码,自己用java实现
      

  2.   

    呵呵
    第一个问题就不说了
    第二个问题用循环双向链表
    简单写一下,共两个类,抛砖引玉1,链表结点Person.java
    ===================================================================
    package com.monipc.csdn;
    public class Person {
    private String name;
    private Person pre;
    private Person next;
    public void setName(String name){this.name=name;}
    public void setPre(Person pre){this.pre = pre;}
    public void setNext(Person next){this.next = next;}
    public String getName(){return this.name;}
    public Person getPre(){return this.pre;}
    public Person getNext(){return this.next;}
    public String toString(){return this.getName();}
    }
    ===================================================================
    2,测试类Test.java
    ===================================================================
    package com.monipc.csdn;public class Test {

    private int n=10;//共n个人
    private int m=3;//数到m
    private int s=21;//从第s个人数起
    private Person [] duLinkList = new Person[n];//循环双向链表

    /**
     * 初始化双向循环链表
     */
    public void initDuLinkList(){
    /*第一步:先将只有数据域的person加入列表*/
    for(int i=0;i<n;i++){
    Person person = new Person();
    person.setName("Person-"+i);
    this.duLinkList[i]=person;
    }
    /*第二步:再初始化前驱和后继*/
    for(int i=0;i<n;i++){
    int h = i-1;
    int j = i+1;
    h= h==-1 ? n-1 : h;
    j= j==n ? 0 : j;
    Person pre = (Person)this.duLinkList[h];
    Person cur = (Person)this.duLinkList[i];
    Person next = (Person)this.duLinkList[j];
    cur.setPre(pre);
    cur.setNext(next);
    }
    }
    /**
     * 开始数
     */
    public void start(){
    int j = s;
    j= j>=n ? j%n : j;
    Person start = (Person)this.duLinkList[j-1];
    Person cur = start;
    System.out.println("离开顺序:");
    for(int a=0;a<n;a++){
    for(int i=0;i<m;i++,j++){
    Person pre = cur.getPre();
    Person next = cur.getNext();
    if(i==m-1) {
    System.out.println(cur);
    pre.setNext(next);
    next.setPre(pre);
    start = next;
    }
    cur = cur.getNext();
    }
    }
    }
    public static void main(String args []){
    Test test = new Test();
    test.initDuLinkList();
    test.start();
    }
    }
    ===================================================================
    大家感觉这个能用的话,支持一下本人的论坛:bbs.monipc.com,谢谢