导航:首页 > 编程语言 > java代码抓数据结构

java代码抓数据结构

发布时间:2023-11-30 02:34:57

『壹』 java 处理数据结构集

1,声明两个list或者verctor和一个计数器
2,获取rs的行数. 求出 row/2的结果,并加1
3,遍历rs,当计数器小于等于(row/2+1)的时候,结果放到第一个list里面,否则放到第二个list里面即可.

『贰』 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抓取网页上指定部分的内容

1. 你可以选择用Java代码来找到整个网页的html代码,如下
(注意在处理网页方面的内容时,需要导入htmlparser包来支持)

import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;
import org.htmlparser.Parser;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.util.NodeList;

public class htmlmover {
public static void main(String[] args){
NodeList rt= getNodeList("http://forex.hexun.com/rmbhl/");
System.out.println(rt.toHtml());
}
public static NodeList getNodeList(String url){
Parser parser = null;
HtmlPage visitor = null;
try {
parser = new Parser(url);
parser.setEncoding("GBK");
visitor = new HtmlPage(parser);
parser.visitAllNodesWith(visitor);
} catch (ParserException e) {
e.printStackTrace();
}
NodeList nodeList = visitor.getBody();
return nodeList;
}
}

以上代码,public static NodeList getNodeList(String url) 为主体
传入需要分析网页的 url(String类型),返回值是网页Html节点List(Nodelist类型)
这个方法我没有什么要说的,刚开始的时候没看懂(没接触过),后来用了几次也懂点皮毛了
注意: parser.setEncoding("GBK"); 可能你的工程编码格式是UTF-8,有错误的话需要改动

运行该程序

2.通过浏览器工具直接查看 IE是按F12 (刚开始没发现这个方法,于是傻乎乎地找上面的代码)

分析你所获得的html代码让人眼花缭乱,不要紧,找到自己需要趴取的内容,找到它上下文有特征的节点

<!--中行牌价 开始-->
<div id="sw01_con1">
<table width="655" border="0" cellspacing="0" cellpadding="0" class="hgtab">
<thead>
<tr>
<th width="85" align="center" class="th_l">交易币种</th>
<th width="80" align="center">交易单位</th>
<th width="130" align="center">现价(人民币)</th>
<th width="80" align="center">卖出价</th>
<th width="100" align="center">现汇买入价</th>
<th width="95" align="center">现钞买入价</th>
</tr>
</thead>
<tbody>
<tr align="center">
<td> 英镑</td>
<td>100</td>
<td>992.7</td>
<td>1001.24</td>
<td>993.26</td>
<td class="no">962.6</td>
</tr>
<tr align="center" bgcolor="#f2f3f4">
<td> 港币</td>
<td>100</td>
<td>81.54</td>
<td>82.13</td>
<td>81.81</td>
<td class="no">81.16</td>
</tr>
<tr align="center">
<td> 美元</td>
<td>100</td>
<td>635.49</td>
<td>639.35</td>
<td>636.8</td>
<td class="no">631.69</td>
</tr>
<tr align="center" bgcolor="#f2f3f4">
<td> 瑞士法郎</td>
<td>100</td>
<td>710.89</td>
<td>707.78</td>
<td>702.14</td>
<td class="no">680.46</td>
</tr>
<tr align="center">
<td> 新加坡元</td>
<td>100</td>
<td>492.45</td>
<td>490.17</td>
<td>486.27</td>
<td class="no">471.25</td>
</tr>
<tr align="center" bgcolor="#f2f3f4">
<td> 瑞典克朗</td>
<td>100</td>
<td>93.66</td>
<td>93.79</td>
<td>93.04</td>
<td class="no">90.17</td>
</tr>
<tr align="center">
<td> 丹麦克朗</td>
<td>100</td>
<td>116.43</td>
<td>115.59</td>
<td>114.67</td>
<td class="no">111.13</td>
</tr>
<tr align="center" bgcolor="#f2f3f4">
<td> 挪威克朗</td>
<td>100</td>
<td>110.01</td>
<td>109.6</td>
<td>108.73</td>
<td class="no">105.37</td>
</tr>
<!--{2011-10-01 23:16:00}-->
</tbody>
</table>
</div>
<!--中行牌价 结束-->

大家可以看到这是一段很有规律,书写非常规范的Html代码(这只是第一部分,中行牌价,可以想像,接下来还会有并列的 相似的3部分)

大家想截取这些节点中的数据
以下代码仍需导入htmlparser Java支持包
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class Currencyrate {
public static void main(String[] args){
String url="http://forex.hexun.com/rmbhl/";
ArrayList<String> rt= getNodeList(url);
for (int i = 0; i < rt.size(); i++){
System.out.println(rt.get(i));
}
}

public static ArrayList<String> getNodeList(String url){
final ArrayList<String> result=new ArrayList<String>();
Parser parser = null;
NodeList nodeList=null;
try {
parser = new Parser(url);
parser.setEncoding("GBK");

nodeList = parser.parse(
new NodeFilter(){
@Override
public boolean accept(Node node){
Node need=node;
if(getStringsByRegex(node.getText())){
for(int i=0;i<6;i++){
result.add(need.toPlainTextString()); need=need.getPreviousSibling().getPreviousSibling();
}
return true;
}
return false;
}
}
);
}catch (ParserException e) {
e.printStackTrace();
}
return result;
}

public static boolean getStringsByRegex(String txt) {
String regex="td class=\"no\"";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(txt);
if (m.find()){
return true;
}
return false;
}
}

废话不多说,
public static ArrayList<String> getNodeList(String url) 主要方法
parser.setEncoding("GBK"); 需要注意,代码编码格式

nodeList = parser.parse(
new NodeFilter(){
@Override
public boolean accept(Node node){
}

);
nodelist是html节点的列表,现在使用NodeFilter ( 节点过滤器 )实例, 重载NodeFilter类中的accept()方法
在parser这个Parser类访问整个html页面的时候,每遇到一个html节点,就会访问这个
accept()方法,返回True的话就会将这个节点 放进nodelist中,否则就不会将这个节点放进去。这个就是NodeFilter功能。
代码段一获取整个html页面时候 parser.visitAllNodesWith(visitor); 就是获取所有节点

所以现在我们要趴取网页上的内容,只要告诉accept()这个方法,哪些节点要放进nodelist去,即 遇到哪些节点需要返回true。
于是
public boolean accept(Node node){
Node need=node;
if(getStringsByRegex(node.getText())){
for(int i=0;i<6;i++){
result.add(need.toPlainTextString()); need=need.getPreviousSibling().getPreviousSibling();
}
return true;
}
return false;
}
Parser类在遇到节点,就把这个节点拿过去问accept(),于是accept()方法分析,如果满足getStringsByRegex(node.getText())就要了

接下来分析getStringsByRegex(),只剩下最后一步了,大家坚持啊!

String regex="td class=\"no\"";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(txt);
if (m.find()){
return true;
}
return false;
}
大家可以发现我们索要的每一段都是
<tr align="center">
<td> 英镑</td>
<td>100</td>
<td>992.7</td>
<td>1001.24</td>
<td>993.26</td>
<td class="no">962.6</td>
</tr>
所以只要找到<td class="no">这个节点就行了,我们用正则表达式去比较
String regex="td class=\"no\""; 这个是比较标准(正则表达式 td class=”no” 其中两个引号需要作为转义字符来表示 成\“ )
变量txt是我们传过去的需要比较的节点的node.getText(),如果符合的话m.find就是true,于是getStringsByRegex()返回true,说明这个节点就是我们所需要的哪些节点,于是
for(int i=0;i<6;i++){
result.add(need.toPlainTextString()); need=need.getPreviousSibling().getPreviousSibling();
}
每一段html,6个为一组,先是962.6,然后是993.26,1001.24,992.7,100,英镑分别被add进result这个ArrayList<String>中去,返回,这个ArrayList装的就是我们需要抓取的数据

大家可以把我们所获得的String数据数出来试试看,是不是我们需要的顺序,main()函数获得ArrayList<String>,就可以显示到我们所需要的Java widget上去了

『肆』 JAVA数据结构有哪几种

JAVA数据结构有以下几种:

1、List:

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。

2、Vector:

基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。

另外很重要的一点就是Vector是线程同步的(sychronized)的,这也是Vector和ArrayList 的一个的重要区别。

3、ArrayList:

同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

4、LinkedList:

LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。 它每一个节点(Node)都包含两方面的内容:节点本身的数据(data),下一个节点的信息(nextNode)。

所以当对LinkedList做添加,删除动作的时候就不用像基于数组的ArrayList一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了,这是LinkedList的优势。

5、HashSet:

虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。

但是Set则是在 HashMap的基础上来实现的,这就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。

6、HashMap:

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

7、HashTable:

Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。

Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为nul

『伍』 数据结构(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数据结构

B.push(A.pop());
A.pop();

解释:
A.pop() 去掉A的最后一个,即4, 变成1,2,3。而且返回这个4
A.pop() 去掉3
B.push() 接受一个值,放在最后。
因为push接受的是A.pop()返回的4,所以,B就变成 5,6,7,8,4

『柒』 用java实现一个数据结构!

import java.io.IOException;
import java.util.Scanner;

public class LinkList {
private static Scanner san = new Scanner(System.in);

public static void main(String[] args) throws IOException {
List list = new List();
for (int i = 1; i <= 10; i++) {
System.out.print("请输入第" + i + "个数: ");
list.add(san.nextInt());
list.print();
}
System.out.println("输入的数据如下: ");
list.print();
}
}

class node {
int data;
node next = this; // 指向自己
}

class List {
private node header = new node();

// 循环链表的尾部添加数据
public node add(int data) {
node current = new node();
node temp = header;
while (temp.next != header)
temp = temp.next;
current.data = data;
current.next = temp.next;
temp.next = current;
return current;
}

// 查询某个数字的位置 如果不在 返回-1;
public int search(int data) {
node temp = header;

int n = 0;
while (temp.next != header) {
temp = temp.next;
n++;
if (temp.data == data)
break;
}
if (temp.data == data)
return n;
else
return -1;
}

// 打印出整个链表
public void print() {
node temp = header;
while (temp.next != header) {

temp = temp.next;
System.out.print(temp.data + " ");
}
System.out.println();
}

// 插入数据
public node Insert(int pos, int data) {
node temp = header;
node current = new node();
for (int i = 0; i < pos - 1; i++) {
if (temp.next != header) {
temp = temp.next;
} else
return null;
}
current.data = data;
if (temp.next != header) {
current.next = temp.next;
}
temp.next = current;
return current;
}

// 删除某个数据
public node del(int data) {
node temp = header;
node oldtemp = null;
node current = null;
while (temp.next != header) {
oldtemp = temp;
temp = temp.next;
if (temp.data == data) {
current = temp;
break;
}
}
if (current == header)
return null;
oldtemp.next = current.next;
return current;
}
}

『捌』 求程序代码(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代码抓数据结构相关的资料

热点内容
u盘文件传输 浏览:593
飞行棋教程视频 浏览:629
程序员下载网站 浏览:303
苹果5为什么不显示4g网络 浏览:741
怎么做好互联网公司的微信公众号 浏览:135
ipad与iphone取消同步 浏览:697
nodejs标准输出 浏览:204
jsp会话跟踪是什么 浏览:595
搜狐hd安卓缓存路径 浏览:726
u盘里所有word文件打开是空的 浏览:911
怎么把桌面ex表格失效文件打开 浏览:63
苹果手表标准版拆箱视频 浏览:896
win10的无线怎么连接路由器怎么设置 浏览:862
钉钉如何查看培训考核数据 浏览:524
华为压缩文件怎么设置密码 浏览:238
电脑win10总是死机怎么办 浏览:484
3dsmax8的表情控制教程 浏览:446
两个苹果手机如何迁移数据最快 浏览:335
ai是什么数据格式 浏览:823
文件打印页面边距多少 浏览:503

友情链接