一、栈
1.基本概念
1.1定义:堆栈是一种特殊的线性表,它的操作被限制在某一端,即栈顶。习惯上称插入结点为入栈(压栈,进栈),删除结点成为出栈(弹栈),有先进后出的特点。
1.2基本操作
2.栈的顺序存储结构
2.1出栈和入栈变化
2.2 *base指针始终指向栈底位置,取值保持不变,若base==null,则说明栈结构不存在;*top为栈顶指针,其初始值指向栈底,删除栈顶元素时top-1,插入新的元素时top+1,因此,非空栈的栈顶指针始终指向当前栈顶元素的下一个位置。
二、队列
1.队列也是一种特殊类型的线性表,按照先进先出的原则对其中的元素进行操作。排在队首的先出队,然后后面的元素依次前移。进入队列必须在队尾进行,删除必须在队首进行。
2.基本操作
3.队列的顺序存储结构
问题:队列不可再继续插入新的队尾元素,但是队列实际可用空间并未占满,如上图(d)所示。
方案:将顺序队列打造成为一个环状的空间。利用的技术:取余,将地址连续的存储单元首尾相连,形成一个环路,同时为了区分空队和满队,空出一个单元不用。
4.java自定义队列实现增删查改(crud)
public class MyList {
private int size = 0;// 长度
private int[] ages = new int[size];
public int getSize() {
return size;
}
//增加 (Create);在最后增加
-------------------
public boolean add(int age) {
try {
// 新开辟一个空间
int[] ages_new = new int[size + 1];
// 拷贝原始数据
for (int i = 0; i < size; i++) {
ages_new[i] = ages[i];
}
// 赋值新数据
ages_new[size] = age;
// 长度加1
size++;
// 指向新开的空间
ages = ages_new;
return true;
} catch (Exception e) {
return false;
}
}
//在指针位置添加
public boolean insert(int index, int age) {
// 新开辟一个空间
int[] ages_new = new int[size + 1];
// 拷贝原始数据
for (int i = 0; i < index; i++) {
ages_new[i] = ages[i];
}
// 拷贝后面的数据
for (int i = index + 1; i < size + 1; i++) {
ages_new[i] = ages[i - 1];
}
// 赋值新数据
ages_new[index] = age;
// 长度加1
size++;
// 指向新开的空间
ages = ages_new;
return true;
}
//删除 (Delete)
-------------
public boolean delete(int index) {
// 新开辟一个空间
int[] ages_new = new int[size - 1];
// 拷贝前面的数据
for (int i = 0; i < index; i++) {
ages_new[i] = ages[i];
}
// 拷贝后面的数据
for (int i = index + 1; i < size; i++) {
ages_new[i - 1] = ages[i];
}
// 长度--
size--;
// 指向新开的空间
ages = ages_new;
return true;
}
//查询 (Retrieve) (重新得到数据)
------------------------
public int get(int index) {
return ages[index];
}
//更新 (Update)
-------------
public boolean update(int index, int age) {
try {
ages[index] = age;
return true;
} catch (Exception e) {
return false;
}
}
}
5.由实现方法易知队列是基于数组实现的;
好处:长度可变,提供插入的功能;
缺点:插入比较麻烦。
三、数组
1.优点:查询(访问)快:index 索引,角标;
2.缺点:长度死-》不能插入
3. 一维数组定义的语法格式:
1.类型名[] 数组名 = new 类型名[数组长度];
2.类型名[] 数组名 = new 类型名[数组长度]{数据元素值};
int[] ages = { 19 };
int[] ages2 = new int[8];
int[] ages3 = new int[] { 21 };
4.二维数组:
4.1.二维数组实际上是一个二维表。
4. 2.二维数组可以看作是有多个一维数组构成的。
4. 3.二维数组有行和列之分。
4. 4.二维数组定义的语法格式:
型名[][] 数组名 = new 类型名[行数][列数];