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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

课程设计说明书

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

树的创建及相关操作的实现课程:数据结构与算法

院(部):计算机学院

专业:网络工程

班级:网络101

学生姓名:王天未

学号:20XX111200

指导教师:伊静

完成日期:20XX-7-6

目录

课程设计任务书1................................................ II 课程设计任务书2............................................... III 双向循环链表的创建及相关操作的实现 (4)

一、问题描述 (4)

二、数据结构 (4)

三、逻辑设计 (5)

四、编码 (6)

五、测试数据 (11)

六、测试情况 (11)

树的创建及相关操作的实现 (15)

一、问题描述 (15)

二、数据结构 (15)

三、逻辑设计 (16)

四、编码 (19)

五、测试数据 (26)

六、测试情况 (26)

结论 (28)

参考文献 (29)

课程设计指导教师评语 (30)

课程设计任务书1

指导教师(签字):教研室主任(签字)

课程设计任务书2

指导教师(签字):教研室主任(签字)

双向循环链表的创建及相关操作的实现一、问题描述

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

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

二、数据结构

针对所处理的树:

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

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

private static class Node {

AnyType data;

Node prev;

Node next;

}

三、逻辑设计

1、总体思路

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

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

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

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

class Node//节点类定义

public class DlList < AnyType>//循环链表主类

public boolean add(int idex, AnyType x)//链表插入操作

public AnyType remove(int idex )//链表删除操作

private void inverse()//链表逆置

四、编码

import java.util.Scanner;

class Node{

public AnyType data;

public Node prev;

public Node next;

public Node(){

data=null;

prev=null;

next=null;

}

public Node(AnyType d){

data=d;

prev=null;

next=null;

}

public Node(AnyType d,Node p,Node n){ data=d;

prev=p;

next=n;

}

}//节点类

public class DlList < AnyType>{

private Node headNode=new Node(); //头标记或头节点

private int theSize;//长度

public DlList(){

headNode.next=headNode;

headNode.prev=headNode;

theSize=0;

}//创建一个空表

public int size(){

return theSize;

}//设定表的长度

public boolean add(AnyType x) {

add(theSize, x);

return true;

}//链表输入操作

public boolean add(int idex, AnyType x) {

boolean flag;

if (idex < 0 || idex > theSize) {//判断插入的位置是否大于0 System.out.println("您输入的要插入元素的位置不正确!");

flag = false;

} else{

flag = true;

}

if (flag) {

Node p;

p = getNode(idex);

addBefore(p, x);

}//插入操作

return flag;

}

private void addBefore(Node p, AnyType x) { Node newNode = new Node(x, p.prev, p);

newNode.prev.next = newNode;

p.prev = newNode;

theSize++;

}//插入方法

public AnyType remove(int idex ) {

return remove(getNode(idex));

相关文档
最新文档