常见数据结构及算法分析

上传人:仙*** 文档编号:145202983 上传时间:2022-08-29 格式:DOC 页数:11 大小:113.50KB
收藏 版权申诉 举报 下载
常见数据结构及算法分析_第1页
第1页 / 共11页
常见数据结构及算法分析_第2页
第2页 / 共11页
常见数据结构及算法分析_第3页
第3页 / 共11页
资源描述:

《常见数据结构及算法分析》由会员分享,可在线阅读,更多相关《常见数据结构及算法分析(11页珍藏版)》请在装配图网上搜索。

1、第11章 常见数据结构及算法分析【1】设有一数列:a1=3,a2=8,an=2an-1+2an-2,使用堆栈结构输出an的若干项。解答:代码如下,运行程序时需要输入一个参数,指出想要输出数列的前多少项import java.util.Stack;public class StackShow public static void main(String args) Stack st = new Stack(); int count = Integer.valueOf(args0).intValue(); int temp; Integer first = new Integer(3); Inte

2、ger second = new Integer(8); st.add(first); st.add(second); for (int i = 0; i = 0 ; i-) System.out.print(st.pop() + ); wanghang+; if(wanghang % 5 = 0) System.out.println(n); 输入13时的运行结果如下:【2】编写一程序,用哈希表实现学生成绩单的存储与查询。解答:学生类Student,代码如下:class Student private String no; private String name; private Integ

3、er score; public String getNo() return no; public void setNo(String no) this.no = no; public String getName() return name; public void setName(String name) this.name = name; public Integer getScore() return score; public void setScore(Integer score) this.score = score; public String toString() retur

4、n 学号: + no + 姓名: + name + 成绩: + score; 主类HashTest,代码如下:import javax.swing.*;import java.util.Vector;import java.util.Hashtable;import java.awt.*;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;public class HashTest extends JFrame JLabel lblsearchbyidorname; JTextField txfidorn

5、ame; JButton btnsearchbyidorname; JTable reader; JButton btnadd; JButton btndelete; Hashtable ht; Vector colnames; JLabel lblno; JLabel lblname; JLabel lblscore; JTextField addno; JTextField addname; JTextField addscore; Vector data; public HashTest() throws HeadlessException super(学生成绩管理); ht = new

6、 Hashtable(); lblsearchbyidorname = new JLabel(学号:); txfidorname = new JTextField(20); lblno = new JLabel(学号); lblname = new JLabel(姓名); lblscore = new JLabel(分数); addno = new JTextField(10); addname = new JTextField(12); addscore = new JTextField(10); btnsearchbyidorname = new JButton(查找-); btnadd

7、= new JButton(新增); btndelete = new JButton(删除); colnames = new Vector(); colnames.add(学号); colnames.add(姓名); colnames.add(成绩); data = new Vector(); reader = new JTable(new ReaderTableModel(data,colnames); reader.setPreferredSize(new Dimension(700,260); JPanel pnlsearch = new JPanel(); pnlsearch.add(

8、lblsearchbyidorname); pnlsearch.add(txfidorname); pnlsearch.add(btnsearchbyidorname); pnlsearch.add(btndelete); JScrollPane scptable = new JScrollPane(reader, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); JPanel pnladd = new JPanel(); pnladd.add(

9、lblno); pnladd.add(addno); pnladd.add(lblname); pnladd.add(addname); pnladd.add(lblscore); pnladd.add(addscore); pnladd.add(btnadd); reader.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ScoreHandler sh = new ScoreHandler(); btnadd.addActionListener(sh); btndelete.addActionListener(sh); btns

10、earchbyidorname.addActionListener(sh); Container c = getContentPane(); c.add(pnlsearch,BorderLayout.NORTH); c.add(scptable,BorderLayout.CENTER); c.add(pnladd,BorderLayout.SOUTH); setSize(600,400); setVisible(true); public static void main(String args) new HashTest(); class ScoreHandler implements Ac

11、tionListener public void actionPerformed(ActionEvent e) JButton btn = (JButton)e.getSource(); if(btn = btnsearchbyidorname) Object obj = ht.get(txfidorname.getText().trim(); if(obj = null) JOptionPane.showMessageDialog(null,没有找到!); else JOptionPane.showMessageDialog(null,查询结果如下:n + obj.toString(); e

12、lse if(btn = btnadd) Student stu = new Student(); stu.setName(addname.getText().trim(); stu.setNo(addno.getText().trim(); stu.setScore(Integer.valueOf(addscore.getText().trim(); ht.put(stu.getNo(),stu); addDataToTable(stu); addname.setText(); addno.setText(); addscore.setText(); else if(btn = btndel

13、ete) int index = reader.getSelectedRow(); if (index = -1) JOptionPane.showMessageDialog(null,你没有选择学生!); else String no = (String)reader.getValueAt(index,0); Student stu = (Student)ht.remove(no); JOptionPane.showMessageDialog(null,学生成绩删除!n + stu.toString(); data.remove(index); reader.repaint(); publi

14、c void addDataToTable(Student stu) Vector temp = new Vector(); temp.add(stu.getNo(); temp.add(stu.getName(); temp.add(stu.getScore(); data.add(temp); reader.repaint(); 运行效果如下:查找:【3】(走迷宫)下列由符号和点组成的图形代表一个迷宫,用一个双下标数组存放。其中,代表迷宫的墙,点代表路径,只有数组中含有点的地方才能走。解答:对于用如下二维数组表示的迷宫1,1,0,1,1,1,1,1, 1,0,0,1,0,0,0,1, 1,

15、1,0,0,0,1,1,1, 1,0,0,1,0,0,0,1, 1,1,1,1,0,1,1,1, 1,0,0,0,0,0,0,1, 1,0,1,0,1,0,0,1, 1,1,1,0,1,1,1,1为了简化算法,假设入口是(0,2),出口是(7,3),程序如下:类Position用来描述点在数组中的位置和该点旁边四个点是否可以通过的状态,程序如下:class Position private int px; private int py; private boolean forwardFlag; private boolean backFlag; private boolean leftFlag

16、; private boolean rightFlag; public Position(int px,int py,int allData) this.px = px; this.py = py; int row = allData.length; int col = allData0.length; int forward = px + 1; int back = px - 1; int left = py + 1; int right = py - 1; if(forward = row | allDataforwardpy = 1) forwardFlag = false; else

17、forwardFlag = true; if(back = -1 | allDatabackpy = 1) backFlag = false; else backFlag = true; if(left = col | allDatapxleft = 1) leftFlag = false; else leftFlag = true; if(right = -1 | allDatapxright = 1) rightFlag = false; else rightFlag = true; public boolean isForwardFlag() return forwardFlag; pu

18、blic void setForwardFlag(boolean forwardFlag) this.forwardFlag = forwardFlag; public boolean isBackFlag() return backFlag; public void setBackFlag(boolean backFlag) this.backFlag = backFlag; public boolean isLeftFlag() return leftFlag; public void setLeftFlag(boolean leftFlag) this.leftFlag = leftFl

19、ag; public boolean isRightFlag() return rightFlag; public void setRightFlag(boolean rightFlag) this.rightFlag = rightFlag; public int getPx() return px; public void setPx(int px) this.px = px; public int getPy() return py; public void setPy(int py) this.py = py; public String toString() return ( + p

20、x + , + py + ); 主类:import java.util.Stack;import java.util.Enumeration;import java.util.Iterator;public class PassMaze int maze = 1,1,0,1,1,1,1,1, 1,0,0,1,0,0,0,1, 1,1,0,0,0,1,1,1, 1,0,0,1,0,0,0,1, 1,1,1,1,0,1,1,1, 1,0,0,0,0,0,0,1, 1,0,1,0,1,0,0,1, 1,1,1,0,1,1,1,1; private Stack st; public PassMaze(

21、) direct = new Stack(); st = new Stack(); Position current = new Position(0,2,maze); st.push(current); while(!isSuccessful(current) boolean status = calPassWay(current); if(!status) st.pop(); if(st.empty() break; setFlag(Position)st.peek(),(String)direct.pop(); current = (Position)st.peek(); if(st.e

22、mpty() System.out.println(迷宫没有出路!); else System.out.println(迷宫的出路如下:); Iterator it = st.iterator(); while(it.hasNext() System.out.println(it.next().toString(); private boolean calPassWay(Position pos) boolean result = false; if(pos.isBackFlag() Position temp = new Position(pos.getPx() - 1,pos.getPy(

23、),maze); temp.setForwardFlag(false); if(contains(temp) pos.setBackFlag(false); else st.push(temp); direct.push(Back); result = true; else if(pos.isForwardFlag() Position temp = new Position(pos.getPx() + 1,pos.getPy(),maze); temp.setBackFlag(false); if(contains(temp) pos.setForwardFlag(false); else

24、st.push(temp); direct.push(Forward); result = true; else if(pos.isLeftFlag() Position temp = new Position(pos.getPx(),pos.getPy() + 1,maze); temp.setRightFlag(false); if(contains(temp) pos.setLeftFlag(false); else st.push(temp); direct.push(Left); result = true; else if(pos.isRightFlag() Position te

25、mp = new Position(pos.getPx(),pos.getPy() - 1,maze); temp.setLeftFlag(false); if(contains(temp) pos.setRightFlag(false); else st.push(temp); direct.push(Right); result = true; return result; private boolean contains(Position p) boolean result = false; Iterator it = st.iterator(); while(it.hasNext()

26、Position temp = (Position)it.next(); if(p.getPx() = temp.getPx() & p.getPy() = temp.getPy() result = true; break; return result; private void setFlag(Position current,String dirction) if(Back.equals(dirction) current.setBackFlag(false); else if(Forward.equals(dirction) current.setForwardFlag(false); else if(Left.equals(dirction) current.setLeftFlag(false); else if(Right.equals(dirction) current.setRightFlag(false); private boolean isSuccessful(Position pt) return pt.getPx() = 7 & pt.getPy() = 3; public static void main(String args) new PassMaze(); 11

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!