表、栈和队列

*表、栈和队列

抽象类数据类型(ADT)是带有一组操作的一些对象的集合。

表ADT

可以有空表
对于任何表,我们说Ai后继Ai-1,并称Ai-1前驱Ai

表的简单数组实现

int  [] arr = new int[] {34,12,52,16,12};

给数组扩容

int[] newArr = new int[arr.length*2];
int i=0;
for (int a : arr){
	newArr[i] = arr[i];
	i++;
}
arr = newArr;

java Collection API中的表
ListADT有两种实现方式:
1.ArrayList类提拱了List ADT的一种可增长数组的实现。优点:get()和set()比较简单。缺点:add()和remove()代价较大。

//定义表
ArrayList<Integer> array1 = new ArrayList<Integer>();
// 在末尾添加元素
array1.add(34);
array1.add(12);
array1.add(52);
array1.add(16);
array1.add(12);
// 遍历数组元素
System.out.println("遍历数组:");
for (int i=0;i<array1.size();i++) {
System.out.print(array1.get(i));
}
// size()
System.out.println("数组大小:"+array1.size());

// 在指定位置添加元素,并输出结果
System.out.println("在array1首部添加元素:8");
array1.add(0,8);
System.out.println("添加后的结果:");
for (int i=0;i<array1.size();i++) {
System.out.print(array1.get(i));
}
// 删除指定位子元素(删除d)
System.out.println("删除index为3的元素");
array1.remove(3);
System.out.println("删除第三个后的数组:");
for (int i=0;i<array1.size();i++) {
System.out.print(array1.get(i));
}
// set()和get()
System.out.println("修改array1的第一个元素为18");
array1.set(0, 18);
System.out.println("获取第一个元素" + array1.get(0));

2.LinkedList类提供了List ADT的双链表实现。优点:add()和remove()开销较小(假设变动项位置可知)。缺点:不容易做索引。

//定义表
LinkedList<Integer> array2 = new LinkedList<Integer>();
// 在末尾添加元素
array2.add(8);
array2.add(56);
array2.add(16);
// 遍历数组元素
System.out.println("遍历数组:");
for (int i=0;i<array2.size();i++) {
	System.out.print(array2.get(i));
}
// size()
System.out.println("数组大小:"+array2.size());
 
// 在指定位置添加元素,并输出结果
System.out.println("在array2首部添加元素:8");
array2.add(0,8);
System.out.println("添加后的结果:");
for (int i=0;i<array2.size();i++) {
	System.out.print(array2.get(i));
}
// 删除指定位子元素(删除d)
System.out.println("删除index为1的元素");
array2.remove(1);
System.out.println("删除第二个后的数组:");
for (int i=0;i<array2.size();i++) {
	System.out.print(array2.get(i));
}
// set()和get()
System.out.println("修改array2的第一个元素为18");
array2.set(0, 18);
System.out.println("获取第一个元素" + array2.get(0));

注:1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
2.代码块整体缩进:选中要缩进的代码,按Tab键,这样就可以实现整体缩进了。(Shift+Tab是向前缩进)。

栈ADT

栈的实现方式:
由于栈也是表的实现方法也同样可以实现栈。如ArrayList和ListedList都支持栈操作。
https://blog.csdn.net/qq_41974391/article/details/81276357
1.链表实现
使用单链表,通过表的顶端插入来实现push,通过删除表顶端元素实现pop。top操作只考查顶端元素并返回它的值,有时pop和top操作合二为一。
源码可查看: https://blog.csdn.net/weixin_36605200/article/details/88857675
2.数组实现
由于模仿了ArrayList的add操作,较为简单。与每个栈相关联的操作是theArray和topOfStack,对于空栈它是-1,为将某个元素x推入栈中,使topOfStack+1,然后置theArray[topOfStack]=x。为了弹出栈元素,置返回值为theArray[topOfStack],然后topOfStack-1。
具体的实现方法可以在ArrayList和ListedList基础上进行添加,
1)比如进栈push:是add()操作;
2)出栈pop:先将最后一个值得到,然后把数组或链表中的这个值remove();
3)判断是否为空栈isStackEmpty:list.isEmpty()?true:false;
4)获取栈的元素个数getLength:size()即可得到

队列ADT

队列是一种先进先出的表。所以ArrayList和ListedList同样支持队列操作。
具体的实现方法可以在ArrayList和ListedList基础上进行添加,
1)比如进队列enqueue:是add()操作;
2)出队列pop:先将第一个值得到,然后把数组或链表中的这个值remove();
3)判断是否为空队列isStackEmpty:list.isEmpty()?true:false;
4)获取队列的元素个数getLength:size()即可得到
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

注:各数据结构调用API 实现所需数据结构https://www.cnblogs.com/star-missw/p/11409110.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值