数据结构java版二 自定义结构

来源:互联网 发布:淘宝客返利是什么意思 编辑:程序博客网 时间:2024/05/01 20:01

-单链表的实现_完善方案

我们在示例中给出的链表类是递归定义的。这样做的好处是链表的某个局部也是一个链表,这与链表在逻辑上的概念具有一致性。

但出于效率的考虑,经常需要引入一些辅助变量来加快操作的速度,这时,如果能给链表类型增加一个外壳就很方便后续的处理。

基本思路:

class MyList
{
private Node head;

class Node{
int data;
Node next;
}

....
}

这种方案中,MyList不是递归定义的,而内部包含的Node类代表了链表的真实结构。MyList类是一个外壳类。它通过持有head 指针来记录一个链表的头在哪里。

请试着完善这种方案。

-双向循环链表_实践应用

定义双向循环链表,解决如下的问题:

有 n 个孩子顺时针站成一圈,其编号为:1,2,3,... n

从1号孩子开始顺时针数数,每个孩子数一个数,遇到7的倍数或数字中含有7,则该孩子不出声,只拍一下手,数数的方向逆转,下一个孩子数下一个数字。

例如:1,2,3...6,拍手,则接下来,6号孩子数8,5号孩子数9 ....

请模拟该过程,如果有20个孩子,求哪个孩子要数100。

-队列与栈_栈结构的应用

栈结构很有用处,有时通过它可以轻松化解一些难题。

看如下问题:

...(.[...)...]...(..(.)..)..{..}.[.]...[[...(.).]..].

请判断一个串中的括号是否匹配
注意下列不匹配的情况:

左括号太多
右括号太多
右括号先于左括号出现 ..)...(...
挎臂情况 ....[...(....]....)....

考虑用栈

-二叉排序树_求二叉树的高度

如果定义一棵二叉树的高度就是从根到叶子的最长距离。试编码求二叉树的高度。

其实,二叉树的高度就是它的左子树和右子树中高度最大值 + 1

另外考虑: 当待排序的数据本来就是有序的情况,会发生什么?

请参考《数据结构》教材解决这个问题。

-一般树形结构_求通路长度

注意树形结构的特点:
从一个节点到另一个节点只有一条通路。

编程求a点到b点的通路长度。

-通用菜单_完善功能

为通用控制台菜单完善功能:

1. 增加“退出”功能,可以在任意位置放弃选择

2. 增加“返回到主菜单”功能,可以在任意深度回到主菜单,而不是逐级向

3. 为每个叶子节点(就是最终执行命令)增加一个整数信息,将来选择结束时返回这个整数信息,而不是返回叶子节点的字符串。因为不同路径的字符串可能会是相同的内容。

-智能数组

java提供的数组有个特点: 当数组元素的个数确定后,就不能再追加元素了。

也就是说,数组的大小在创建的时候就固定了。

现在请你来写一个智能数组类 SmartArray,它能够根据需要动态地分配空间。

实际上,它只不过是在其它位置分配新的数组,然后把旧的数据拷贝过去。

请提供数组访问方法:

int get(int idx); // 返回指定位置的元素值

void set(int idx, int value); // 对指定的下标元素设置新值。当然,如果下标超出了原来数组的大小,则自动分配新的空间。

-再谈菜单

请你采用如下的节点结构实现菜单功能。

每个菜单项有4个指针:

parent: 指向父节点
child: 指向第一个孩子节点
left: 指向本节点的“哥哥”
right: 指向本节点的“弟弟”

显示孩子节点的时候,是按从长到幼的次序。


0 0
原创粉丝点击