推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx

上传人:b****5 文档编号:7542668 上传时间:2023-01-24 格式:DOCX 页数:30 大小:134.13KB
下载 相关 举报
推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx_第1页
第1页 / 共30页
推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx_第2页
第2页 / 共30页
推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx_第3页
第3页 / 共30页
推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx_第4页
第4页 / 共30页
推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx

《推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx》由会员分享,可在线阅读,更多相关《推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx(30页珍藏版)》请在冰豆网上搜索。

推荐双向循环链表的创建及相关操作的实现课程设计说明书精品.docx

推荐双向循环链表的创建及相关操作的实现课程设计说明书精品

 

山东建筑大学计算机科学与技术学院

课程设计说明书

 

题目:

双向链表的创建和操作的实现

树的创建及相关操作的实现

课程:

数据结构与算法

院(部):

计算机学院

专业:

网络工程

班级:

网络101

学生姓名:

王天未

学号:

20XX111200

指导教师:

伊静

完成日期:

20XX-7-6

 

山东建筑大学计算机科学与技术学院

课程设计任务书1

设计题目

双向循环链表的创建及相关操作的实现

已知技术参数和设计要求

1、建立一个空表

2、插入第i个结点。

3、删除第i个结点。

4、插入第1个结点。

5、插入最后一个结点。

6、逆置

设计内容与步骤

1、设计存储结构

2、设计算法

3、编写程序,进行调试

4、总结并进行演示、讲解

设计工作计划与进度安排

做双向链表创建方法

做双向链表各种操作方法

设计考核要求

1、考勤20%

2、课程设计说明书50%

3、成果展示30%

指导教师(签字):

教研室主任(签字)

 

山东建筑大学计算机科学与技术学院

课程设计任务书2

设计题目

树的创建及相关操作的实现

已知技术参数和设计要求

1、利用先序遍历和层次遍历的结果建立二叉树

2、实现二叉树的层次遍历

3、统计二叉树叶子结点的个数(递归)。

4、将二叉树左右子树相互交换(递归)

设计内容与步骤

1.建立结点类

2.构造BinaryTree()

3.建立线序遍历树

4.建立层次遍历树

5.实现树的层次遍历

6.统计叶子结点个数

7.交换左右子树

8.输出树的方法

设计工作计划与进度安排

6月13日,实验课下完成先序遍历建树,16月14日课程设计时间完成层次遍历建树

6月16日课下完成层次遍历和叶子节点个数统计

6月18日课程设计时间完成二叉树左右子树相互交换

6月19日完成测试函数及纠错

设计考核要求

1、考勤20%

2、课程设计说明书50%

3、成果展示30%

指导教师(签字):

教研室主任(签字)

双向循环链表的创建及相关操作的实现

一、问题描述

 

1、每个节点的next域构成了一个循环单链表

2、每个节点的prev域构成了另一个循环单链表

二、数据结构

针对所处理的树:

1、画出双向循环链表的存储结构

 

2、使用所选用语言的功能,描述该存储结构的实现

privatestaticclassNode{

AnyTypedata;

Nodeprev;

Nodenext;

}

三、逻辑设计

1、总体思路

对于双向循环链表,建立一个空表,然后实现双向循环链表的插入,删除操作。

为了便于逆置的操作,选择建立一个带头节点的双向循环链表,插入第一个节点和插入最后一个节点,只需要在0号位置和size()位置插入节点就行。

2、模块划分(以图示的方法给出各个函数的调用关系)

 

3、函数或类的具体定义和功能

classNode//节点类定义

publicclassDlList//循环链表主类

publicbooleanadd(intidex,AnyTypex)//链表插入操作

publicAnyTyperemove(intidex)//链表删除操作

privatevoidinverse()//链表逆置

 

四、编码

importjava.util.Scanner;

classNode{

publicAnyTypedata;

publicNodeprev;

publicNodenext;

publicNode(){

data=null;

prev=null;

next=null;

}

publicNode(AnyTyped){

data=d;

prev=null;

next=null;

}

publicNode(AnyTyped,Nodep,Noden){

data=d;

prev=p;

next=n;

}

}//节点类

publicclassDlList{

privateNodeheadNode=newNode();//头标记或头节点

privateinttheSize;//长度

publicDlList(){

headNode.next=headNode;

headNode.prev=headNode;

theSize=0;

}//创建一个空表

publicintsize(){

returntheSize;

}//设定表的长度

publicbooleanadd(AnyTypex){

add(theSize,x);

returntrue;

}//链表输入操作

publicbooleanadd(intidex,AnyTypex){

booleanflag;

if(idex<0||idex>theSize){//判断插入的位置是否大于0

System.out.println("您输入的要插入元素的位置不正确!

");

flag=false;

}else{

flag=true;

}

if(flag){

Nodep;

p=getNode(idex);

addBefore(p,x);

}//插入操作

returnflag;

}

privatevoidaddBefore(Nodep,AnyTypex){

NodenewNode=newNode(x,p.prev,p);

newNode.prev.next=newNode;

p.prev=newNode;

theSize++;

}//插入方法

publicAnyTyperemove(intidex){

returnremove(getNode(idex));

}

privateAnyTyperemove(Nodep){

p.prev.next=p.next;

p.next.prev=p.prev;

theSize--;

returnp.data;

}//删除操作

privatevoidinverse(){

Nodep,q,l;

p=headNode.next;

q=p.next;

while(p!

=headNode){

l=q.next;//空置的中转结点赋值

q.next=p;//将p、q链表的前后域置换。

q由p的后域变成前域

p.prev=q;

p=q;//置换后,将各个结点置换输出。

q=l;

}

q.next=p;

p.prev=q;//当p为头结点时,直接将前后域置换。

}//逆置

privateNodegetNode(intidex){

Nodep;

if(idex<0||idex>size())

thrownewIndexOutOfBoundsException("getNodeidex:

"+idex+";size:

"+size());

if(idex

{

p=headNode;

for(inti=0;i<=idex;i++)

p=p.next;

}

else{

p=headNode;

for(inti=size();i>idex;i--){

p=p.prev;

}

}

returnp;

}//查找结点位置

publicvoidprint(){

for(inti=0;i

System.out.print(getNode(i).data+"");

System.out.println();

}//结果输出

publicvoidchoose(){

System.out.println("1.插入第i个节点");

System.out.println("2.删除第i个节点");

System.out.println("3.插入第一个节点");

System.out.println("4.插入最后一个节点");

System.out.println("5.逆置");

}//选择操作项

publicstaticvoidmain(String[]args){

DlListdl=newDlList();

Scannersc=newScanner(System.in);

intxuanze;

System.out.println("请输入链表的元素的个数(大于0个):

");

intn=sc.nextInt();

System.out.println("请输入链表的"+n+"个元素:

");

for(inti=1;i<=n;i++){

intl=sc.nextInt();

dl.add(l);//链表元素输入

}

System.out.println("您输入的链表为:

");

dl.print();//调用print方法,提示操作。

System.out.println("请选择操作项:

");

dl.choose();//调用choose,选择操作。

while(true){

xuanze=sc.nextInt();

switch(xuanze){

case1:

System.out.println("请输入要插入的位置下标和数据:

");

intidex=sc.nextInt();

intdata=sc.nextInt();

dl.add(idex,data);

dl.print();

break;

case2:

System.out.println("请输入要删除节点的下标:

");

intidex1=sc.nextInt();

dl.remove(idex1);

dl.print();

break;

case3:

System.out.println("请输入插入第一个节点的元素:

");

intdata1=sc.nextInt();

dl.add(0,data1);

dl.print();

break;

case4:

System.out.println("请输入插入最后位置的元素:

");

intdata2=sc.nextInt();

dl.add(dl.size(),data2);

dl.print();

break;

case5:

dl.inverse();

dl.print();

break;

default:

System.out.println("你的输入有误,请重新输入!

");

break;

}

}

}

}

5、测试数据

1、对每个函数的测试数据

链表中的元素插入为1、2、3、4、5

插入第二个结点的元素为6

删除第二个节点的位置的元素6

插入第一个节点的元素为7

插入最后一个节点的元素为6

逆置链表

2、对程序整体的测试数据

输入元素为1、2、3、4、5的双向循环链表

六、测试情况

请输入链表的元素的个数(大于0个):

5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

12345

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

1

请输入要插入的位置下标和数据:

2

6

126345

 

请输入链表的元素的个数(大于0个):

5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

12345

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

2

请输入要删除的位置下标和数据:

2

6

12345

 

请输入链表的元素的个数(大于0个):

5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

12345

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

3

请输入插入第一个节点的元素:

7

712345

 

请输入链表的元素的个数(大于0个):

5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

12345

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

4

请输入插入最后位置的元素:

6

123456

 

请输入链表的元素的个数(大于0个):

5

请输入链表的5个元素:

1

2

3

4

5

您输入的链表为:

12345

请选择操作项:

1.插入第i个节点

2.删除第i个节点

3.插入第一个节点

4.插入最后一个节点

5.逆置

5

54321

 

树的创建及相关操作的实现

一、问题描述

1.先遍序遍历建树

 

2、遍历方法举例:

先序遍历:

ABDCEF

 

层次遍历:

ABCDEF

 

二、数据结构

   针对所处理的树:

   1、画出存储结构

   

   

   

2、使用所选用语言的功能,实现上述的该存储结构

   publicstaticclassBTNode{

   privateAnyTypedata;

   privateBTNodeparent;

   privateBTNodeleftNode;

   privateBTNoderightNode;

   }

三、逻辑设计

1、总体思路

首先建立节点类,然后构造BinaryTree(),再构造先序遍历建树方法,层次遍历建树方法,层次遍历树的方法,统计叶子结点个数方法,交换子树方法,再调试。

 

2、模块划分(以图示的方法给出各个函数的调用关系)

 

 

 

 

 

 

3、函数或类的具体定义和功能

BiTNode()//节点类定义

publicBiTNodecreatTree(AnyType[]a)//先序建树方法定义

privatevoidcreatPathBinaryTree(AnyType[]a)//层次遍历建树定义

publicvoidpathOrder()//层次遍历方法定义

publicintcountLeafNode()//统计叶子节点个数方法定义

四、编码

1.结点类定义

packagekcsj;

publicclassBiTNodeimplementsparable>{

AnyTypedata;

BiTNodeleft,right;

intweight;

BiTNode(){

data=null;

left=right=null;

}

BiTNode(AnyTypethedata){

data=thedata;

left=right=null;

}

BiTNode(AnyTypethedata,BiTNodelt,BiTNodert){

data=thedata;

left=lt;

right=rt;

}

publicBiTNodegetLeft(){

returnleft;

}

publicBiTNodegetRight(){

returnright;

}

publicObjectgetData(){

returndata;

}

publicdoublegetWight(){

returnweight;

}

@Override

publicintpareTo(BiTNodeo){

if(o.getWight()>this.getWight())

return1;

if(o.getWight()

return-1;

return0;

}

}

2.BinaryTree()构造

packagekcsj;

importjava.util.LinkedList;

importjava.util.Queue;

 

publicclassBinaryTree

superAnyType>>{

AnyType[]pre,in;

BiTNoderootNode=newBiTNode();

intcount=0;

 

publicBinaryTree(){

rootNode=null;

}

publicBinaryTree(AnyTyperootNodeItem){

rootNode.data=rootNodeItem;

rootNode.left=rootNode.right=null;

}

publicBinaryTree(BiTNodet){

rootNode=t;

}

//1.先序遍历建树

publicBiTNodecreatTree(AnyType[]a){

returnrootNode=creatBinaryTree(a);

}

privateBiTNodecreatBinaryTree(AnyType[]a){

BiTNodep=null;

if(count

AnyTypedata=a[count];

count++;

if(data!

=null){

p=newBiTNode((AnyType)data);

p.left=creatTree(a);

p.right=creatTree(a);

}

}

returnp;

}

//1.层次遍历排序建树

publicvoidcreatPathTree(AnyType[]a){

if(a!

=null){

creatPathBinaryTree(a);

}

}

privatevoidcreatPathBinaryTree(AnyType[]a){

Queue>q=newLinkedList>();

BiTNodenode=newBiTNode(a[0]);

rootNode=node;

q.offer(node);

inti=1;

while(i

if(a[i]!

=null){

node=newBiTNode(a[i]);

q.element().left=node;

q.offer(q.element().left);

}

if(i

if(a[++i]!

=null){

node=newBiTNode(a[i]);

q.element().right=node;

q.offer(q.element().right);

}

}

q.poll();

i++;

}

}

//2.实现二叉树的层次遍历

publicvoidpathOrder(){

if(rootNode!

=null)

pathOrder(rootNode);

}

publicvoidpathOrder(BiTNodet){

Queue>q=newLinkedList>();

q.offer(t);

while(!

q.isEmpty()){

if(q.element().left!

=null)

q.offer(q.element().left);

if(q.element().right!

=null)

q.offer(q.element().right);

System.out.print(q.poll().data+"");

}

}

//先序遍历

publicvoidpreOrder(){

if(rootNode!

=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1