课程设计链表存储方式下的数据的插入删除和搜索.docx
- 文档编号:13620801
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:44
- 大小:947.08KB
课程设计链表存储方式下的数据的插入删除和搜索.docx
《课程设计链表存储方式下的数据的插入删除和搜索.docx》由会员分享,可在线阅读,更多相关《课程设计链表存储方式下的数据的插入删除和搜索.docx(44页珍藏版)》请在冰点文库上搜索。
课程设计链表存储方式下的数据的插入删除和搜索
数据结构课程设计报告
一·课程设计题目:
链表存储方式下的数据的插入,删除和搜索。
二·课程设计内容描述:
需求以动态演示的形式向用户展示在链表存储方式下的数据记性插入,删除和搜索的实现方法和内部过程。
输入以系统自动生成的方式新建链表,可以选择有序或无序生成,在面板显示出链表,链结点以箭头连接,以带色的方框内的数字为数据,需要生成特定链表可选择数据插入在链表首。
输出在面板显示及显示三种操作(插入,查找和删除)的具体方法和流程,显示方式以指示箭头来表示对链表内容或位置的查询。
插入或删除操作则在图中画出节点增加或者减少的过程。
功能该程序可实现单向链表的插入删除和查找过程的演示,以动态的显示展示其操作过程。
测试通过输入框中用户输入的数据和七个按钮的操作选择相应的功能,可实现动态演示。
三·思想和算法:
对于演示可分为用户界面和动画演示两个部分在用户界面添加按钮,输入框,单项选择和演示区域,演示区域将使用动画演示进行展示。
在用户界面分别给按钮及输入框等添加监听器,通过调用动画演示方法以实现按钮功能。
动画演示通过创建show类实现链结点和创建showgroup类实现链结点的的动态显示。
其内部引用awt.Graphics类实现画线等功能。
对于三种操作来说,插入和删除的实现都必须依靠查找的功能,因此,在代码中有很大一部分是可以通用的,实现查找功能可分为两种:
按用户输入的数据查找和按用户输入的位置查找,判定条件分别是show类中的值和showgroup中的curIn值。
插入操作需要在已建好的链表中增加一个节点,这就需要插入点以后的节点向后移动一个位置,将插入的节点放在该位置上,而删除是将插入点以后的节点向前移动一个位置。
在showgroup类中,定义链表数据的数组以存储数据,将数组内的数据分别赋给各个节点,通过创建链表的方法创建链表。
四·使用说明
1·运行
打开eclipse,导入工程,运行后,将显示如下界面
界面中有七个按钮,一个单选项和两个输入框
连续单击“新建”,按提示操作
选择无序,出现以下界面
或者选择有序则出现以下界面
当输入有误时,则会有提示
新建功能完成
位置查找功能
连续单击“数据查找”,按提示操作
数据查找功能
输入位置或数据不存在时
删除操作
按位置删除
其他操作不再赘述。
五·调试说明
导入工程后,打开所有代码,主程序在link.linklist,运行即可。
六·代码
Linklist类
packagelink;
importjava.applet.Applet;
importjava.awt.*;
importjava.awt.event.*;
importjava.text.NumberFormat;
importjava.util.EventObject;
publicclasslinklistextendsAppletimplementsRunnable,ActionListener,
ItemListener{
publicvoidinit(){
//添加panel
setLayout(newFlowLayout());
Panelpanel=newPanel();
add(panel);
panel.setLayout(newFlowLayout());
Panelpanel1=newPanel();
panel.add(panel1);
panel1.setLayout(newFlowLayout(0));
newButton=newButton("新建");
panel1.add(newButton);
newButton.addActionListener(this);
//插入按钮设置
insposbutton=newButton("位置插入");
panel1.add(insposbutton);
insposbutton.addActionListener(this);
insdatabutton=newButton("数据插入");
panel1.add(insdatabutton);
insdatabutton.addActionListener(this);
//查找按钮设置
finddatabutton=newButton("数据查找");
panel1.add(finddatabutton);
finddatabutton.addActionListener(this);
findposbutton=newButton("位置查找");
panel1.add(findposbutton);
findposbutton.addActionListener(this);
//删除按钮设置
deldatabutton=newButton("数据删除");
panel1.add(deldatabutton);
deldatabutton.addActionListener(this);
delposbutton=newButton("位置删除");
panel1.add(delposbutton);
delposbutton.addActionListener(this);
Panelpanel2=newPanel();
panel.add(panel2);
panel2.setLayout(newGridLayout(2,1));
CheckboxGroupcheckboxgroup=newCheckboxGroup();
nosort=newCheckbox("无序",true,checkboxgroup);
panel2.add(nosort);
nosort.addItemListener(this);
sort=newCheckbox("有序",false,checkboxgroup);
panel2.add(sort);
sort.addItemListener(this);
Panelpanel3=newPanel();
panel.add(panel3);
panel3.setLayout(newFlowLayout
(2));
panel3.add(newLabel("输入数字:
"));
panel3.add(tf);
Panelpanel4=newPanel();
panel.add(panel4);
panel4.setLayout(newFlowLayout(4));
panel4.add(newLabel(""));
panel4.add(pf);
//panel3.add(newLabel("shur"));
//panel3.add(pf);
theshowgroup=newshowGroup();
theshowgroup.doFill(13);
repaint();
}
publicvoidstart(){
if(runner==null){
runner=newThread(this);
runner.start();
}
}
@SuppressWarnings("deprecation")
publicvoidstop(){
if(runner!
=null){
runner.stop();
runner=null;
}
}
publicvoidpaint(Graphicsg){
theshowgroup.draw(g);
}
publicvoidupdate(Graphicsg){
paint(g);
}
//监听按钮及输入框
publicvoidactionPerformed(ActionEventactionevent){
isNumber=true;
Strings1=tf.getText();
Strings2=pf.getText();
if(s2==null)s2="1";
try{
GPNumber=Integer.parseInt(s1);
gpnumber=Integer.parseInt(s2);
}catch(NumberFormatException_ex){
GPNumber=0;
gpnumber=0;
isNumber=false;
}
//监听按钮
//各个按钮的监听,输入数据和调用相应的方法
if(actionevent.getSource()==newButton)
theshowgroup.newList(isNumber,GPNumber);
elseif(actionevent.getSource()==insdatabutton)
theshowgroup.datainsert(isNumber,GPNumber);
elseif(actionevent.getSource()==insposbutton)
theshowgroup.posinsert(isNumber,GPNumber,gpnumber);
elseif(actionevent.getSource()==finddatabutton)
theshowgroup.datafind(isNumber,GPNumber);
elseif(actionevent.getSource()==findposbutton)
theshowgroup.posfind(isNumber,GPNumber);
elseif(actionevent.getSource()==deldatabutton)
theshowgroup.datadelete(isNumber,GPNumber);
elseif(actionevent.getSource()==delposbutton)
theshowgroup.posdelete(isNumber,GPNumber);
repaint();
try{
Thread.sleep(10L);
return;
}catch(InterruptedException_ex){
return;
}
}
publicvoiditemStateChanged(ItemEventitemevent){
booleanflag=itemevent.getSource()==nosort;
booleanflag1=theshowgroup.getSortStatus();
booleanflag2=theshowgroup.getChangeStatus();
theshowgroup.setSortStatus(flag);
if(flag&&flag2&&!
flag1||!
flag&&!
flag2&&flag1){
nosort.setState(true);
sort.setState(false);
}
if(!
flag&&flag2&&flag1||flag&&!
flag2&&!
flag1){
nosort.setState(false);
sort.setState(true);
}
}
publicvoidrun(){
do
;while(true);
}
publiclinklist(){
GPNumber=-1;
isNumber=false;
tf=newTextField("",4);
pf=newTextField("",4);
}
privateThreadrunner;
privateshowGrouptheshowgroup;
privateintGPNumber,gpnumber;
privatebooleanisNumber;
privateTextFieldtf,pf;
privateCheckboxnosort;
privateCheckboxsort;
privateButtonnewButton;
privateButtoninsdatabutton,insposbutton;
privateButtonfinddatabutton,findposbutton;
privateButtondeldatabutton,delposbutton;
}
Showgroup类
packagelink;
importjava.awt.Color;
importjava.awt.Graphics;
classshowGroup{
publicshowGroup(){
linkArray=newlink[28];
totalLinks=0;
curIn=oldCurIn=0;
codePart=1;
//codePart2=1;
drawMode=2;
note="按任意键";
notSorted=true;
isOKChangeSort=false;
areInserting=false;
//insPKeynow=0;
}
//创建节点
privateshowmakeshow(inti){
intj=100+(int)(Math.random()*154D);
intk=100+(int)(Math.random()*154D);
intl=100+(int)(Math.random()*154D);
Colorcolor=newColor(j,k,l);
returnnewshow(i,color);
}
//获取有序或无序链表
publicbooleangetSortStatus(){
returnnotSorted;
}
//获取选择改变值
publicbooleangetChangeStatus(){
returnisOKChangeSort;
}
publicvoidsetSortStatus(booleanflag){
if(isOKChangeSort&&flag!
=notSorted)
notSorted=flag;
if(!
isOKChangeSort)
note="改变顺序";
drawMode=1;
}
//新建链表,int为链表长度
publicvoidnewList(booleanflag,inti){
//判断按钮
areInserting=false;
areDeleting=false;
if(opMode!
=1){
opMode=1;
codePart=1;
}
switch(codePart){
case1:
//'\001'
note="输入链表长度,第一个输入框为长度,第二个输入0";
drawMode=1;
codePart=2;
oldCurIn=curIn;
curIn=0;
return;
case2:
//'\002'
if(!
flag||i<0||i>28){
note="长度值有误:
(0_"+28+")";
codePart=1;
}else{
note="即将创建长度为"+i+"的链表";
codePart=3;
}
drawMode=1;
return;
case3:
//'\003'
note="选择有序或者无序链表";
isOKChangeSort=true;
drawMode=1;
codePart=4;
return;
case4:
//'\004'
if(notSorted)
note="你选择了数据无序";
else
note="您选择了数据有序";
isOKChangeSort=false;
totalLinks=0;
drawMode=2;
codePart=5;
return;
case5:
//'\005'
totalLinks=i;
doFill(totalLinks);
note="链表创建完成;链表长度="+totalLinks;
oldCurIn=curIn;
curIn=0;
drawMode=2;
codePart=6;
return;
case6:
//'\006'
note="单击任意按钮";
drawMode=1;
codePart=1;
return;
}
}
//建立数组存储
publicvoiddoFill(inti){
totalLinks=i;
for(intj=0;j<28;j++)
linkArray[j]=null;
oldCurIn=curIn;
curIn=0;
codePart=1;
if(notSorted){
for(intk=0;k //随机数生成,存入数组 inti1=(int)(Math.random()*999D); tempPers=makeshow(i1); linkArray[k]=newlink(tempPers); } return; } intk1=0; inti2=0; for(intl=0;l intl1=(int)((999F-(float)i2)/((float)totalLinks-(float)l)); intj1=(int)(Math.random()*(double)l1); k1+=j1; i2=k1; tempPers=makeshow(k1); linkArray[l]=newlink(tempPers); } } //按输入的数据插入 publicvoiddatainsert(booleanflag,inti) { //位置插入算法 areDeleting=false; if(opMode! =3){ opMode=3; codePart=1; } switch(codePart){ case1: //'\001' oldCurIn=curIn; curIn=0; insertAtEnd=false; note="输入要插入的数据"; drawMode=1; codePart=2; return; case2: //'\002' if(! flag||i<0||i>999){ note="无法插入: 数值在0-"+999; codePart=1; }elseif(totalLinks>=28){ note="无法插入: 数据已满"; codePart=6; }else{ insKey=i; tempPers=makeshow(insKey); if(notSorted){ note="即将插入这个数据"+insKey; codePart=4; }else{ note="即将寻找插入点"; codePart=3; } } drawMode=1; return; case3: //'\003' if(curIn==totalLinks-1 &&insKey>linkArray[curIn].persData.getHeight()){ note="Foundinsertionpointatendoflist"; insertAtEnd=true; codePart=5; }elseif(insKey>linkArray[curIn].persData.getHeight()){ note="正寻找位置"; oldCurIn=curIn++; codePart=3; }else{ note="已找到位置"; codePart=4; } drawMode=1; return; case4: //'\004' areInserting=true; if(notSorted) insDex=0; else insDex=curIn; note="数据插入,链表复位"; drawMode=1; codePart=5; return; case5: //'\
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 存储 方式 数据 插入 删除 搜索