* [java-Data-structure-and-algorithm](#java-data-structure-and-algorithm)
* [java数据结构和算法实现练习](#java数据结构和算法实现练习)
* [list线性表](#list线性表)
* [线性表接口](#线性表接口)
* [数组型线性表实现](#数组型线性表实现)
* [链表型线性表的实现](#链表型线性表的实现)
* [头节点](#头节点)
* [链表](#链表)
* [静态链表的实现](#静态链表的实现)
* [节点](#节点)
* [静态链表](#静态链表)
* [双向链表的实现](#双向链表的实现)
* [头节点](#头节点-1)
* [双向链表](#双向链表)
* [循环链表的实现](#循环链表的实现)
* [链表的应用之一元多项式相加](#链表的应用之一元多项式相加)
* [stack栈](#stack栈)
* [栈应用之行编辑器](#栈应用之行编辑器)
* [迷宫求解](#迷宫求解)
* [表达式求值](#表达式求值)
* [汉诺塔问题](#汉诺塔问题)
* [队列的接口和元素节点](#队列的接口和元素节点)
* [java队列的链表实现](#java队列的链表实现)
* [java数组队列的实现](#java数组队列的实现)
* [java循环队列的实现](#java循环队列的实现)
* [队列应用之离散事件模拟](#队列应用之离散事件模拟)
* [String 串](#string-串)
* [串的接口定义](#串的接口定义)
* [串的数组实现](#串的数组实现)
* [串的三种存储结构分析](#串的三种存储结构分析)
* [定长顺序存储](#定长顺序存储)
* [堆分配存储表示](#堆分配存储表示)
* [串的块链存储表示](#串的块链存储表示)
* [串的匹配算法](#串的匹配算法)
* [遍历算法](#遍历算法)
* [tree 树](#tree--树)
* [diagram 图](#diagram-图)
* [sorting 排序查找](#sorting-排序查找)
# java-Data-structure-and-algorithm
# java数据结构和算法实现练习
## `list`线性表
### 线性表接口
```
package IntefaceList;
public interface IList<T> {
/**
* 构造一个空的线性表 进行初始化
*/
void InitList();
/**
* 销毁线性表
*/
IList DestroyList();
/**
* 将线性表重置为空表
*/
IList ClearList();
/**
* 判断线性表是否为空
*/
Boolean ListEmpty();
/**
* 返回线性表中元素的个数
*/
Integer ListLength();
/**
* 获取线性表中第i个元素
*/
T GetElem(Integer i);
/**
* 根据元素获取它的位序,如果有多个符合,则返回第一个,如果没有则返回0
*/
Integer LocateElem(T e);
/**
* 获取该元素的上一个元素
*/
T PriorElem(T e);
/**
*获取该元素的下一个元素
*/
T NextElem(T e);
/**
* 在指定位置插入元素
*/
IList ListInsert(Integer i, T e);
/**
*删除指定位置的元素
*/
IList ListDelete(Integer i);
/**
* 遍历所有的元素
*/
void ListTraverse();
/**
* 合并两个线性表 合并不重复的元素
*/
IList Union(IList list);
/**
* 按照递增顺序合并两个线性表
*/
IList MergeList(IList list);
/**
* 在尾部新增元素
*/
void add(T e);
}
```
#### 数组型线性表实现
```$xslt
package Impl;
import IntefaceList.IList;
public class SequenceList<T> implements IList {
private T[] arr;
//数组当前容量(里面实际包含的元素个素)
private Integer size = 0;
//数组当前大小
private Integer Length = 4;
@Override
public void InitList() {
this.arr = (T[]) new Object[Length];
}
@Override
public IList DestroyList() {
arr = null;
size=0;
return this; //这里应该直接让list对象为null
}
@Override
public IList ClearList() {
this.arr = (T[]) new Object[Length];
size=0;
return this;
}
@Override
public Boolean ListEmpty() {
if (size > 0) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
@Override
public Integer ListLength() {
return size;
}
@Override
public Object GetElem(Integer i) {
if (i > size) {
return null;
}
return arr[i - 1];
}
@Override
public Integer LocateElem(Object e) {
for (int i = 0; i < arr.length; i++) {
if (e.equals(arr[i])) {
return i + 1;
}
}
return -1;
}
@Override
public Object PriorElem(Object e) {
for (int i = 0; i < arr.length; i++) {
if (e.equals(arr[i])) {
return arr[i - 1];
}
}
return -1;
}
@Override
public Object NextElem(Object e) {
for (int i = 0; i < arr.length; i++) {
if (e.equals(arr[i])) {
return arr[i + 1];
}
}
return -1;
}
@Override
public IList ListInsert(Integer i, Object e) {
if (i>size){
return null;
}
size++;
addsize();
for (int j = i-1; j <this.size; j++) {
arr[size-j]=arr[size-j-1];
}
arr[i - 1] = (T) e;
return this;
}
@Override
public IList ListDelete(Integer i) {
size--;
for (int i1 = i - 1; i1 + 1 < arr.length; i1++) {
arr[i1] = arr[i1 + 1];
}
return this;
}
@Override
public void ListTraverse() {
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null) {
System.out.print(arr[i]);
System.out.print(",");
}
}
System.out.println();
}
/**
* 合并不重复的元素
*
* @param list
* @return
*/
@Override
public IList Union(IList list) {
for (int i = 1; i <= list.ListLength(); i++) {
if (this.LocateElem(list.GetElem(i)) == -1) {
this.add(list.GetElem(i));
}
}
return this;
}
/**
* 合并两个列表 从小到大
*
* @param list
* @return
*/
@Override
public IList MergeList(IList list) {
//已知两个表都是递增的顺序
//借助新的第三张表
T[] NewArr = (T[]) new Object[Length + list.ListLength()];
int pa = 1;
int pb = 1;
int pc = 0;
while (pa <= list.ListLength() && pb <= this.ListLength()) {
if ((int) list.GetElem(pa) <= (int) this.GetElem(pb)) {
NewArr[pc] = (T) list.GetElem(pa);
pc++;
pa++;
} else {
NewArr[pc] = (T) this.GetElem(pb);
pc++;
pb++;
}
}
while (pa<=list.ListLength()){
NewArr[pc] = (T) list.GetElem(pa);
pc++;
pa++;
}
while (pb<=this.ListLength()){
NewArr[pc] = (T) this.GetElem(pb);
pc++;
pb++;
}
this.arr=NewArr;
size=size+ list.ListLength();
return this;
}
@Override
public void add(Object e) {
arr[size] = (T) e;
size++;
addsize();
}
/**
* 数组扩容
*/
private void addsize() {
if (size / (float) arr.length > 0.75) {
Length = (int) (size * 1.5);
T[] Newarr = (T[]) new Object[(Length)];
for (int a = 0; a < arr.length; a++) {
Newarr[a] = arr[a];
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
算法与数据结构涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。
资源推荐
资源详情
资源评论
收起资源包目录
java数据结构和算法实现.zip (96个子文件)
open_suanfayushujujiegouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxxxxxxxcxvcvcv
JsonParser
pom.xml 652B
src
test
java
TokenizerTest.java 953B
main
java
com
lxx
JsonParser
JsonObject.java 1KB
Parser.java 8KB
JsonArray.java 1KB
enums
TokenType.java 529B
exception
JsonParseException.java 210B
JsonTypeException.java 208B
tokenParser
CharReader.java 1KB
Tokenizer.java 8KB
Token.java 759B
TokenList.java 777B
tree
src
main
java
PriorityQueue.java 4KB
TreeDemo.java 7KB
Heap.java 6KB
tree.iml 432B
Diagram
Diagram.iml 335B
array
pom.xml 420B
src
main
java
impl
ArrayImpl.java 306B
inteface
IArray.java 2KB
out
production
Sorting
Sorting.iml 418B
list
IntefaceList
IList.class 1010B
Impl
SequenceList.class 4KB
CircLinkedList.class 4KB
DuLinkedList.class 4KB
StaticLinkedLIst.class 5KB
test
DuLinkedTest.class 1KB
CircLinkedListTest.class 905B
SequenceTest.class 1KB
demo.class 500B
StaticLinkedListTest.class 993B
testObejct.class 2KB
Node
SNode.class 955B
LNode.class 1KB
DuLNode.class 1KB
Sorting
src
merge_sort
merge_sort.java 2KB
insert_sort
straight_insertion_Sort
straight_insert_sort.java 1KB
shell_sort
shellSort.java 3KB
swap_sort
Bubble_sort
bubble_sort.java 1KB
Cocktail_sort.java 2KB
Quick_sort
quick_sort.java 5KB
Selection_sort
select_sort
selectionSort.java 1KB
heap_sort
heap_sort.java 118B
Sorting.iml 418B
list
src
IntefaceList
IList.java 1KB
Impl
DuLinkedList.java 4KB
StaticLinkedLIst.java 5KB
SequenceList.java 5KB
CircLinkedList.java 4KB
LinkedList.java 7KB
demo
term.java 487B
PolynomialTest.java 863B
Polynomial.java 2KB
test
CircLinkedListTest.java 521B
testObejct.java 890B
demo.java 197B
StaticLinkedListTest.java 910B
LinkedTest.java 2KB
DuLinkedTest.java 835B
testJava.java 605B
SequenceTest.java 1KB
Node
SNode.java 406B
DuLNode.java 567B
LNode.java 393B
list.iml 471B
.idea
java-Data-structure-and-algorithm.iml 361B
uiDesigner.xml 9KB
inspectionProfiles
Project_Default.xml 1KB
stack
src
stack
LinkedStack.java 2KB
LinkNode.java 347B
demo
MazePathStack.java 5KB
conversion.java 1KB
EvaluateExpression.java 5KB
Hanoi.java 2KB
LineEdit.java 1KB
MazePath.java 7KB
ParenthesisMathing.java 1KB
Stack.java 3KB
test
Stacktest.java 456B
LinkedStackTest.java 485B
stack.iml 423B
String
pom.xml 421B
src
main
java
demo
KMP.java 4KB
StringKMP.java 4KB
StringIndex.java 9KB
Interface
IString.java 3KB
impl
ArrayString.java 9KB
queue
pom.xml 420B
src
main
java
demo
Simulation.java 8KB
Interface
IQueue.java 1KB
LNode.java 465B
impl
CycQueue.java 3KB
ArrayQueue.java 3KB
LinkedQueue.java 3KB
.gitignore 14B
README.md 83KB
共 96 条
- 1
资源评论
极致人生-010
- 粉丝: 2903
- 资源: 2822
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功