㈠ 数据结构(java版)
packagegame24.datastructure.list;
/**
*链表的结点
*@authorluoweifu
*
*/
classNode{
Objectdata; //数据元素
Nodenext; //后驱结点
publicNode(){
this(null);
}
publicNode(Objectdata){
this.data=data;
this.next=null;
}
}
/**
*带头结点的链式链表,下标从0开始;
*@authorAdministrator
*
*/
publicclassSinglyLinkedList<E>{
Nodehead; //头结点
intsize; //链表的大小
publicSinglyLinkedList(){
head=newNode();
size=0;
}
publicSinglyLinkedList(E[]datas){
intn=datas.length;
head=newNode();
Nodep=head;
for(inti=0;i<n;i++){
p.next=newNode(datas[i]);
p=p.next;
}
size=n;
}
publicSinglyLinkedList(SinglyLinkedListlist){
head=list.head;
size=list.size();
}
publicvoidadd(Objecte){
Nodep;
if(0==size){
p=head;
}else{
p=index(size-1);
}
p.next=newNode(e);
size++;
}
publicvoidconcat(SinglyLinkedListlist){
NodelastNode=this.index(size-1);
lastNode.next=list.index(0);
size+=list.size();
}
publicvoidclear(){
head.next=null;
size=0;
}
publicObjectget(inti){
Nodep=index(i);
returnp.data;
}
privateNodeindex(inti){
Nodep=null;
if(i>=0&&i<size){
p=head;
for(intj=0;j<=i;j++){
p=p.next;
}
}
returnp;
}
publicintindexOf(Objecte){
Nodep=head.next;
inti=0;
while(!p.data.equals(e)){
p=p.next;
i++;
}
if(i<size)
returni;
else
return-1;
}
publicvoidinsert(inti,Objecte){
Nodep=index(i);
Nodep2=newNode(e);
p2.next=p.next;
p.next=p2;
size++;
}
publicbooleanisEmpty(){
if(size==0)
returntrue;
else
returnfalse;
}
publicintlastIndexOf(Objecte){
inti=size-1;
while(!get(i).equals(e)){
i--;
}
if(i>=0)
returni;
else
return-1;
}
publicvoidremove(inti){
if(i>=0&&i<size){
Nodep=null;
if(i==0)
p=head;
else{
p=index(i-1);
}
p.next=index(i).next;
}
size--;
}
publicvoidset(inti,Objecte){
Nodep=index(i);
p.data=e;
}
publicintsize(){
returnsize;
}
@Override
publicbooleanequals(Objectobj){
SinglyLinkedListlist=(SinglyLinkedList)obj;
if(this==obj&&size==list.size){
returntrue;
}
returnfalse;
}
/**
*测试线性表
*@paramargs
*/
publicstaticvoidmain(Stringargs[]){
//Listlist=newLinkList();
//Listlist=newDoubleLinkList();
SinglyLinkedListlist1=newSinglyLinkedList();
for(inti=0;i<10;i++){
list1.add(newInteger(i));
}
Integer[]a={101,102,103,104,105,106,107,108,109,110};
SinglyLinkedListlist=newSinglyLinkedList(a);
list.remove(9);
System.out.print("size:"+list.size()+" ");
System.out.println("isEmpty:"+list.isEmpty());
System.out.print("第7个位置的元素:"+list.get(7)+" ");
list.concat(list1);
for(inti=0;i<list.size();i++){
System.out.print(list.get(i)+"");
}
list.add(21);
list.add(22);
list.insert(3,newInteger(5));
System.out.print("size:"+list.size()+" ");
System.out.print("第一次出现5的索引:"+list.indexOf(5)+" ");
System.out.print("最后一次出现5的索引:"+list.lastIndexOf(5)+" ");
list.set(0,newInteger(30));
for(inti=0;i<list.size();i++){
System.out.print(list.get(i)+"");
}
SinglyLinkedListlist2=list;
System.out.println(" isequels?"+list2.equals(list));
}
}
㈡ 用java实现数据结构
简单而又麻烦的工作 呵呵
㈢ java数据结构
package com.designpattern.facade;
public class Main2 {
public static void main(String[] args) {
Facade facade = new Facade();
/**
* 一步操作就可以完成所有的准备工作
*/
facade.open();
}
㈣ 什么地方有《数据结构-java版》的源代码及课后习题答案下载
http://www.wnetw.com/jclub/resource/download.jsp?itemid=229
你试试,不过需要先注册
㈤ Java算法与数据结构代码
第1题:我给你搭建算法框架,具体需求,你只需往里面写Code即可:
publicclassProgram{
privatestaticfinalintN=6;
publicstaticvoidmain(String[]args){
Nodehead=newNode(-1,null);//定义头指针,带头结点的单链表
for(inti=0;i<N;i++){
Nodee=newNode(i+1,null);
tailInsert(head,e);
}
//Test
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();
}
}
/**
*@paramhead实施尾插法算法的单链表头指针
*@parame所需的元素
*/
privatestaticvoidtailInsert(Nodehead,Nodee){
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();//寻访单链表,直至到达单链表末尾
}
//实施尾插法
p.setNext(e);
}
}
classNode{
privateintid;//编号
privateNodenext;//单链表后继指针
privateStringvote;//选票
publicNode(){}
publicNode(intid,Nodenext){
super();
this.id=id;
this.next=next;
}
publicNode(intid,Nodenext,Stringvote){
super();
this.id=id;
this.next=next;
this.vote=vote;
}
@Override
publicStringtoString(){
return"Node[id="+id+",next="+next+"]";
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicNodegetNext(){
returnnext;
}
publicvoidsetNext(Nodenext){
this.next=next;
}
}
第2题:参看我以前的回答:https://..com/question/431512924412893084
算法思想已经写的清楚得不能在清楚了。转成Java就是小菜一碟。
㈥ 求程序代码(java版的数据结构)
3个class,运行UI.java。
******
public class CircuitException extends Exception {public CircuitException(){}}
*****
import java.util.LinkedList;
public class GPS {
public static final int MAX = 65535;
public GPS(int maxSize){
graph = new Graph(maxSize);
}
public GPS(){
graph = new Graph();
}
public Graph graph;
public static void main(String args[]){
GPS gps = new GPS();
try {
gps.graph.addEdge("a", "b", 1);
gps.graph.addEdge("a", "c", 1);
gps.graph.addEdge("b","d" , 1);
gps.graph.addEdge("c","d" , 1);
gps.graph.addEdge("d","e" , 1);
gps.graph.addEdge("d","f" , 1);
gps.graph.addEdge("e","t" , 2);
gps.graph.addEdge("f","t" , 1);
LinkedList list = gps.graph.getPath("a", "d");
for(int i = 0 ; i < list.size() ; i++){
System.out.print(list.get(i));
}System.out.println();
} catch (CircuitException e) {
System.out.println("出现了自环!");
}
gps.graph.showGraph();
System.out.println(gps.graph.gap);
}
public class Graph{
public int Zuida = 50;
public int chang = 0;
public Jiao[] vertex;
public double gap;
public Graph(){
vertex = new Jiao[Zuida];
}
public Graph(int maxSize){
this.Zuida = maxSize;
vertex = new Jiao[maxSize];
}
public void addVertex(String name){
vertex[chang++] = new Jiao(name);
}
public void addEdge(String v1, String v2,double edge) throws CircuitException{
//先找到v1;
if(v1.equals(v2))
throw new CircuitException();
Jiao from = null;
Jiao to = null;
for(int i = 0 ; i < chang ; i++){
if(vertex[i].name.equals(v1)){
from = vertex[i];
}else if(vertex[i].name.equals(v2)){
to = vertex[i];
}
}
if(from == null){
this.addVertex(v1);
from = this.vertex[chang-1];
}
if(to == null){
this.addVertex(v2);
to = this.vertex[chang-1];
}//已经找到v1和v2;
//没有检测是否v1 v2边已经存在!
//加入边。
Jiao v1adj = new Jiao(v2);
v1adj.edge = edge;
Jiao v2adj = new Jiao(v1);
v2adj.edge = edge;
//添加联系
//检查联系是否已经存在
Jiao temp = from;
while(temp.next!=null){
Jiao temppar = temp;
temp = temp.next;
if(temp.name.equals(v1adj.name)){
temppar.next = temp.next;
}
}
v1adj.next = from.next;
from.next = v1adj;
//v2adj.next = to.next;
//to.next = v2adj;
}
//假设要找的必然存在,不用想是否不在
public LinkedList getPath(String v1 ,String v2){
int count = 0;
//System.out.println(count++);
boolean found[] = new boolean[chang];
double distance[] = new double[chang];
int to = 0;
Jiao from = null;
for(int i = 0 ; i < chang ; i++){
found[i] = false;
distance[i] = MAX;
}
for(int i = 0 ; i < chang ; i++){
if(vertex[i].name.equals(v1)){//找到始发地
from = vertex[i];
distance[i] = 0;
found[i] = true;
//System.out.println(count++);
}
if(vertex[i].name.equals(v2)){//找到目的地
to = i;
//System.out.println(count++);
}
}
//必须先准备好路径!
Jiao forCount = from;
int degree = 0;
while(forCount!=null){
degree++;
forCount=forCount.next;
}
LinkedList[] list = new LinkedList[degree];
int [] mark = new int[degree];
for(int i = 0 ; i < degree ; i++){
list[i]=new LinkedList();
mark[i]=MAX;
}
int test=0;
int count2 = 0;
int count3 = 0;
//System.out.println(count+++"xx");
while(!found[to]&&test++<100){
//System.out.println(count+++"FIRST");
//开始时from到所有都是最大值。
//找到标记了的节点
//找标记了的节点邻接的未标记的节点。
//得到最短的边,并标记。
//更新现有路径
double min = MAX;
int address = -1;
int father = -1;
for(int i = 0 ; i < chang ; i++){//对于已经找到的顶点寻找最小的往后的距离。
if(found[i]){//找到了的。
Jiao temp = vertex[i];
while(temp!=null){//vertex的邻接顶点~~
//先看temp的号码~
int tempNumber = -1;
for(int j = 0 ; j < chang ; j++){
if(vertex[j].name.equals(temp.name)){
tempNumber = j;
break;
}
}
if(!found[tempNumber]){//如果是还没有找到的~
double dist = distance[i]+temp.edge;
if(dist < min){
min = dist;
father = i;
//System.out.println(" "+min);
address = tempNumber;
}
}
temp = temp.next;
}
}
}found[address] = true;
distance[address] = min;
//添加到已有路径中去!
//知道father
for(int i = 0 ; i < degree ; i++){
if(list[i].isEmpty()||list[i].getLast().equals(vertex[father].name)){
list[i].addLast(vertex[address].name);
break;
}
}
}
for(int i = 0 ; i < degree ; i++){
if(list[i].isEmpty())
continue;
else{
if(list[i].getLast().equals(v2)){
gap=0;
//先求出gap
Jiao pre = from;
Jiao nex = null;
for(int j = 0 ; j < list[i].size() ; j++){
for(int k = 0 ; k < chang ; k++){
if(vertex[k].name.equals(list[i].get(j))){
nex = vertex[k];break;
}
}
while(pre.next!=null){//找到下一个的长度
pre = pre.next;
//System.out.println(nex.name +"nex.name");
if(pre.name.equals(nex.name)){
gap+=pre.edge;
//System.out.println(" gap2 "+gap);
}
}
pre = nex;
}
//System.out.println(gap+"gap");
return list[i];
}
}
}
return null;
}
public void showGraph(){
Jiao temp;
for(int i = 0 ; i < chang ; i++){
temp = vertex[i];
while(temp!=null){
System.out.print(temp.name+temp.edge+" ");
temp = temp.next;
}System.out.println();
}System.out.println("Show Over!");
}
}
public class Jiao{
public String name;
public Jiao next = null;
public double edge;
public Jiao(String name){
this.name = name;
}
}
}
******
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class UI extends JFrame implements ActionListener{
private JTextField textField_5;
private JTextField textField_4;
private JList list_1;
private JList list;
private JTextField textField_1;
private JTextField textField_3;
private JTextField textField_2;
private JTextField textField;
private DefaultListModel model = new DefaultListModel();
private DefaultListModel model_1 = new DefaultListModel();
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UI frame = new UI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame
*/
public UI() {
super();
setTitle("GPS寻路");
getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(11, 36, 221, 193);
getContentPane().add(scrollPane);
list = new JList(model);
scrollPane.setViewportView(list);
final JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(253, 36, 218, 193);
getContentPane().add(scrollPane_1);
list_1 = new JList(model_1);
scrollPane_1.setViewportView(list_1);
final JLabel label = new JLabel();
label.setText("从");
label.setBounds(10, 249, 24, 18);
getContentPane().add(label);
final JLabel label_1 = new JLabel();
label_1.setText("到");
label_1.setBounds(11, 273, 24, 18);
getContentPane().add(label_1);
textField = new JTextField();
textField.setBounds(50, 247, 103, 22);
getContentPane().add(textField);
textField_2 = new JTextField();
textField_2.setBounds(50, 271, 103, 22);
getContentPane().add(textField_2);
final JLabel label_2 = new JLabel();
label_2.setText("距离");
label_2.setBounds(11, 297, 37, 18);
getContentPane().add(label_2);
textField_3 = new JTextField();
textField_3.setBounds(50, 295, 103, 22);
getContentPane().add(textField_3);
final JButton button = new JButton();
button.setText("添加");
button.setBounds(155, 250, 73, 28);
getContentPane().add(button);
final JButton button_1 = new JButton();
button_1.setText("删除");
button_1.setBounds(155, 285, 73, 28);
getContentPane().add(button_1);
final JLabel label_3 = new JLabel();
label_3.setText("距离:");
label_3.setBounds(253, 297, 39, 18);
getContentPane().add(label_3);
textField_1 = new JTextField();
textField_1.setBounds(293, 295, 86, 22);
getContentPane().add(textField_1);
final JButton button_2 = new JButton();
button_2.setText("显示路径");
button_2.setBounds(385, 249, 86, 68);
getContentPane().add(button_2);
final JLabel label_4 = new JLabel();
label_4.setText("路径表示");
label_4.setBounds(11, 10, 66, 18);
getContentPane().add(label_4);
final JLabel label_5 = new JLabel();
label_5.setText("最佳路径");
label_5.setBounds(253, 12, 66, 18);
getContentPane().add(label_5);
//
button.addActionListener(this);
button_1.addActionListener(this);
button_2.addActionListener(this);
final JLabel label_6 = new JLabel();
label_6.setText("从");
label_6.setBounds(253, 249, 24, 18);
getContentPane().add(label_6);
textField_4 = new JTextField();
textField_4.setBounds(293, 247, 86, 22);
getContentPane().add(textField_4);
final JLabel label_7 = new JLabel();
label_7.setText("到");
label_7.setBounds(253, 273, 24, 18);
getContentPane().add(label_7);
textField_5 = new JTextField();
textField_5.setBounds(293, 271, 86, 22);
getContentPane().add(textField_5);
final JSeparator separator = new JSeparator();
separator.setOrientation(SwingConstants.VERTICAL);
separator.setBounds(239, 10, 8, 317);
getContentPane().add(separator);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("添加")){
try{String from = textField.getText();
String to = textField_2.getText();
if(from.equals(to)){
JOptionPane.showMessageDialog(null, "始点与终点不能相同");
return;
}
if(from.equals("")||to.equals("")){
JOptionPane.showMessageDialog(null, "添加不能为空");
return;
}for(int i = 0 ; i < model.size() ; i ++){
if(model.get(i).toString().substring(0, model.get(i).toString().indexOf(":")).equals(
from+"->"+to))
model.remove(i);
}
double length = Double.parseDouble(textField_3.getText());
model.addElement(from+"->"+to+": "+length);
}catch(Exception e1){
JOptionPane.showMessageDialog(null, "距离为数字值");
}
}
if(e.getActionCommand().equals("删除")){
for(int i = 0 ; i < model.size() ; i++){
if(list.isSelectedIndex(i))
model.remove(i);
}
}
if(e.getActionCommand().equals("显示路径")){
try{
model_1.removeAllElements();
GPS gps = new GPS();
String full,from,to;
double length;
for(int i = 0 ; i < model.size() ; i++){
full = model.get(i).toString();
from = full.substring(0,full.indexOf("-"));
to = full.substring(full.indexOf("-")+2,full.lastIndexOf(":"));
length = Double.parseDouble(full.substring(full.indexOf(":")+1, full.length()-1));
//System.out.println(from);
//System.out.println(to);
try {
gps.graph.addEdge(from, to, length);
System.out.println(from +" "+ to);
} catch (CircuitException e1) {
System.out.println("有环存在");
}
}LinkedList list = gps.graph.getPath(textField_4.getText(), textField_5.getText());
model_1.addElement(textField_4.getText());
for(int i = 0 ; i < list.size() ; i++){
model_1.addElement(list.get(i));
}//计算路径长度
textField_1.setText(""+gps.graph.gap);
}catch(Exception e1){
JOptionPane.showMessageDialog(null, "没有找到有关节点");
}
}
}
}
㈦ 关于数据结构(java)的一个代码
描述栈抽象数据类型的SStack接口的声明
public interfaceSStack<E> //栈接口
{
boolean isEmpty(); //判断是否空栈,若空栈返回true
boolean push(E element); //元素element入栈,若操作成功返回true
E pop(); //出栈,返回当前栈顶元素,若栈空返回null
E get(); //取栈顶元素值,未出栈,若栈空返回null
}
顺序栈类具体操作方法的声明:
importdataStructure.linearList.SStack;
public classSeqStack<E> implements SStack<E>
//顺序栈类
{
private Object value[]; //存储栈的数据元素
private int top; //top为栈顶元素下标
public SeqStack(int capacity) //构造指定容量的空栈
{
this.value = newObject[Math.abs(capacity)];
this.top=-1;
}
public SeqStack() //构造默认容量的空栈
{
this(10);
}
public boolean isEmpty() //判断是否空栈,若空栈返回true
{
return this.top==-1;
}
public boolean push(E element) //元素element入栈,若操作成功返回true
{
if (element==null)
return false; //空对象(null)不能入栈
if (this.top==value.length-1) //若栈满,则扩充容量
{
Object[] temp = this.value;
this.value = newObject[temp.length*2];
for (int i=0; i<temp.length;i++)
this.value[i] = temp[i];
}
this.top++;
this.value[this.top] = element;
return true;
}
public E pop() //出栈,返回当前栈顶元素,若栈空返回null
{
if (!isEmpty())
return (E)this.value[this.top--];
else
return null;
}
public E get() //取栈顶元素值,未出栈,栈顶元素未改变
{
if (!isEmpty())
return (E)this.value[this.top];
else
return null;
}
public String toString() //返回栈中各元素的字符串描述
{
String str="{";
if (this.top!=-1)
str +=this.value[this.top].toString();
for (int i=this.top-1; i>=0; i--)
str += ","+this.value[i].toString();
return str+"} ";
}
实例引用public static void main(String args[])
{
SeqStack<String> stack = newSeqStack<String>(20);
System.out.print("Push: ");
char ch='a';
for(int i=0;i<5;i++)
{
String str =(char)(ch+i)+"";
stack.push(str);
System.out.print(str+" ");
}
System.out.println("\n"+stack.toString());
System.out.print("Pop : ");
while(!stack.isEmpty()) //全部出栈
System.out.print(stack.pop().toString()+" ");
System.out.println();
}
㈧ java 数据结构
大哥,你这是数据库的问题.
你要是想用数据结构来解决的话也行,但是数据要是想长久保存的话,还是存入数据库的好。
既然学java就要有面向对象的思想。
将学生看做一个对象,建立class student.将学号,姓名,成绩做为属性。学号与姓名用String存,成绩可以用Hashtable来存,至于排序就 得把所以student对象的成绩取出来进行排序
㈨ 我需要一本数据结构的算法JAVA代码实现的书。
java数据结构和算法中文版(pdf)附源码
http://58.251.57.206/down1?cid=&t=2&fmt=&usrinput=数据结构和算法java&dt=2002000&ps=0_0&rt=0kbs&plt=0
迅雷试了下能下:http://www.winu.cn/attachment.php?aid=92883
㈩ 帮我详细解释一下这几段java数据结构的代码好么,越详细越好
PX类没有贴出来
这个类要给你解释的意思是
三种算法 每种算法的 时间与空间复杂度
也就是比较哪个算法更快 更好