java典型数据结构实现与操作Word格式.docx
《java典型数据结构实现与操作Word格式.docx》由会员分享,可在线阅读,更多相关《java典型数据结构实现与操作Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
类似地,还可以再定义一个测试方法getInfo(Noden),并分别使用LinkedListNode及TreeNode类型对象为实参调用,以验证Java父类与子类之间的多态性机制。
;
4、编写LinkedListTool类,单向链表工具类,在该类中提供一系列static方法,实现单向链表的常规操作功能,包括但不限于:
构造一个测试用新链表、遍历链表、向链表尾部追加节点、删除链表中符合特定条件的节点(例如删除链表中value属性为某一特定值的所有节点)、链表排序、向有序链表中插入一个新节点(仍保持其有序)、有序链表合并(结果仍为有序链表),并对上述方法进行测试。
5、调试运行程序。
六.实验流程图
Permorfer
B
O
K
N
D
E
P
R
S
TreeNode
LinkedListNode
七。
实验代码
1、person
importcom、ambow、Performer;
publicclassPersonimplementsPerformer{
privateStringname;
privateintage;
publicPerson(Stringname,intage){
super();
this、name=name;
this、age=age;
}
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
publicintgetAge(){
returnage;
publicvoidsetAge(intage){
publicvoidshow(){
System、out、println("
个人信息,姓名:
"
+name+"
年龄:
+age);
}
}
2、book
publicclassBookimplementsPerformer{
privateStringid;
privatedoubleprice;
publicBook(Stringid,Stringname,doubleprice){
this、id=id;
this、price=price;
publicStringgetId(){
returnid;
publicvoidsetId(Stringid){
publicdoublegetPrice(){
returnprice;
publicvoidsetPrice(doubleprice){
图书简介,书号:
+id+"
书名:
价格:
+price);
3、Node
publicabstractclassNodeimplementsPerformer{
privateintvalue;
publicNode(){
publicNode(intvalue){
this、value=value;
publicintgetValue(){
returnvalue;
publicvoidsetValue(intvalue){
4、LinkedListNode
publicclassLinkedListNodeextendsNode{
privateLinkedListNodenext;
publicLinkedListNode(){
publicLinkedListNode(intvalue){
super(value);
publicLinkedListNode(LinkedListNodenext){
this、next=next;
publicLinkedListNode(intvalue,LinkedListNodenext){
publicLinkedListNodegetNext(){
returnnext;
publicvoidsetNext(LinkedListNodenext){
单向链表节点,value="
+this、getValue());
5、TreeNode
publicclassTreeNodeextendsNode{
privateTreeNodelchild;
privateTreeNoderchild;
publicTreeNode(){
publicTreeNode(TreeNodelchild,TreeNoderchild){
this、lchild=lchild;
this、rchild=rchild;
publicTreeNode(intvalue,TreeNodelchild,TreeNoderchild){
publicTreeNodegetLchild(){
returnlchild;
publicvoidsetLchild(TreeNodelchild){
publicTreeNodegetRchild(){
returnrchild;
publicvoidsetRchild(TreeNoderchild){
二叉树节点,value="
6、TestPerformer
publicclassTestPerformer{
publicstaticvoidmain(String[]args){
TestPerformertp=newTestPerformer();
tp、introduce(newPerson("
张三"
18));
tp、introduce(newBook("
ISBN1001"
"
Java核心技术"
38、50));
tp、introduce(newLinkedListNode(20,null));
tp、introduce(newTreeNode(33,null,null));
publicvoidintroduce(Performerp){
p、show();
7、LinkedListTool
publicclassLinkedListTool{
//创建一个单向链表
LinkedListNodehead=LinkedListTool、createLinkedList();
//遍历它
LinkedListTool、show(head);
//尾部追加节点
LinkedListNoderesult;
result=LinkedListTool、append(head,newLinkedListNode(99,null));
LinkedListTool、show(result);
head=result;
//删除其中符合特定条件的节点
result=LinkedListTool、delete(head,23);
//排序
result=LinkedListTool、sort(head);
//向有序链表中插入一个新节点
result=LinkedListTool、insert(head,newLinkedListNode(88,null));
//合并两个有序链表
LinkedListNodeh2=LinkedListTool、createLinkedList();
result=LinkedListTool、merge(head,h2);
publicstaticLinkedListNodecreateLinkedList(){
int[]a={44,23,45,23,78,33,121,34,322,-76};
intsize=a、length;
LinkedListNodehead=newLinkedListNode(a[size-1]);
for(inti=size-2;
i>
=0;
i--){
head=newLinkedListNode(a[i],head);
}
returnhead;
publicstaticvoidshow(LinkedListNodehead){
while(head!
=null){
System、out、print(head、getValue());
head=head、getNext();
if(head!
System、out、print("
->
"
);
}
}
\n---------------------------"
publicstaticLinkedListNodeappend(LinkedListNodehead,LinkedListNodenew_p){
if(head==null){
head=new_p;
}else{
//p指向当前头节点(非空的)
LinkedListNodep=head;
//n为p的后继节点(可能为空值)
LinkedListNoden=p、getNext();
while(n!
p=n;
n=p、getNext();
}
p、setNext(new_p);
publicstaticLinkedListNodedelete(LinkedListNodehead,intv){
//删除链表开头的连续多个节点
=null&
&
head、getValue()==v){
//head要保留
if(head!
=null){//删除符合条件中间节点
//p指向当前头节点(非空的)
if(n、getValue()==v){//该删除
p、setNext(n、getNext());
}else{
p=n;
}
}
publicstaticLinkedListNodesort(LinkedListNodehead){
//创建一个空的结果链表
LinkedListNodenhead=null;
//依次取出源链表中的每一个节点,并将之插入到有序的结构链表中,仍然结构链表的有序状态
LinkedListNodec=head;
c、setNext(null);
//将c这个节点插入到有序的链表nhead中
nhead=LinkedListTool、insert(nhead,c);
returnnhead;
//向有序链表中插入一个新节点,并保持其有序状态
publicstaticLinkedListNodeinsert(LinkedListNodehead,LinkedListNoden){
//如果目标链表为空链表
head=n;
}elseif(n、getValue()<
head、getValue()){
n、setNext(head);
head=n;
LinkedListNodep1=head;
LinkedListNodep2=head、getNext();
while(p2!
n、getValue()>
p2、getValue()){
p1=p2;
p2=p2、getNext();
//将n节点插入到p1与p2两个节点之间
p1、setNext(n);
n、setNext(p2);
publicstaticLinkedListNodemerge(LinkedListNodehead1,LinkedListNodehead2){
head2=LinkedListTool、sort(head2);
//依次取出head1链表中的每一个节点,并将之插入到有序的head2链表中,仍然结构链表的有序状态
while(head1!
LinkedListNodec=head1;
head1=head1、getNext();
head2=LinkedListTool、insert(head2,c);
returnhead2;
8、TreeTool
ublicclassTreeTool{
TreeNoderoot=TreeTool、createLinkedList();
TreeTool、list(root);
//构建一颗二叉树
publicstaticTreeNodecreateLinkedList(){
TreeNoden1=newTreeNode(9,null,null);
TreeNoden2=newTreeNode(12,null,null);
TreeNoden3=newTreeNode(49,n1,n2);
TreeNoden4=newTreeNode(54,null,null);
TreeNoden5=newTreeNode(37,n3,n4);
returnn5;
//遍历二叉树(中序遍历)
publicstaticvoidlist(TreeNoderoot){
if(root!
=null){
list(root、getLchild());
System、out、println(root、getValue());
list(root、getRchild());
//遍历二叉树(前序遍历)
publicstaticvoidlist2(TreeNoderoot){
list2(root、getLchild());
list2(root、getRchild());
//遍历二叉树(后序遍历)
publicstaticvoidlist3(TreeNoderoot){
list3(root、getLchild());
list3(root、getRchild());
八.实验效果图
1、输入年份
2、万年历的实现
九.结果分析:
以上程序运行结果不对,缺少符号等,存在的问题及解决方法:
由于在MyEclipse中打代码,很多细节容易忽视,因此在MyEclipse中打完代码,还需运行一次,避免错误的出现。
十.实验体会与总结:
对于代码的学习,我们应注重细节,不能忽视极小的字母与符号的顺序与格式,多敲代码,有益编程。