Update array stack.

pull/133/head
Yudong Jin 2 years ago
parent fe7564d54d
commit fa3eff81d1

@ -29,27 +29,22 @@ public:
/* 出栈 */ /* 出栈 */
int pop() { int pop() {
if(stack.empty()){ int oldTop = top();
throw out_of_range("栈为空,不能执行: pop()");
}
int oldTop = stack.back();
stack.pop_back(); stack.pop_back();
return oldTop; return oldTop;
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
int top() { int top() {
if(stack.empty()){ if(empty())
throw out_of_range("栈为空,不能执行: top()"); throw out_of_range("栈为空");
}
return stack.back(); return stack.back();
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
int get(int index) { int get(int index) {
if(stack.size() < index){ if(index >= size())
throw out_of_range("超出栈空间大小"); throw out_of_range("索引越界");
}
return stack[index]; return stack[index];
} }

@ -33,16 +33,22 @@ class ArrayStack {
/* 出栈 */ /* 出栈 */
public int pop() { public int pop() {
if (isEmpty())
throw new EmptyStackException();
return stack.remove(size() - 1); return stack.remove(size() - 1);
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
public int peek() { public int peek() {
if (isEmpty())
throw new EmptyStackException();
return stack.get(size() - 1); return stack.get(size() - 1);
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
public int get(int index) { public int get(int index) {
if (index >= size())
throw new IndexOutOfBoundsException();
return stack.get(index); return stack.get(index);
} }

@ -57,7 +57,7 @@ class LinkedListQueue {
/* 访问队首元素 */ /* 访问队首元素 */
public int peek() { public int peek() {
if (size() == 0) if (size() == 0)
throw new IndexOutOfBoundsException(); throw new EmptyStackException();
return front.val; return front.val;
} }

@ -47,7 +47,7 @@ class LinkedListStack {
/* 访问栈顶元素 */ /* 访问栈顶元素 */
public int peek() { public int peek() {
if (size() == 0) if (size() == 0)
throw new IndexOutOfBoundsException(); throw new EmptyStackException();
return stackPeek.val; return stackPeek.val;
} }

@ -28,16 +28,19 @@ class ArrayStack {
/* 出栈 */ /* 出栈 */
pop() { pop() {
if (this.empty()) throw "栈为空";
return this.stack.pop(); return this.stack.pop();
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
top() { top() {
if (this.empty()) throw "栈为空";
return this.stack[this.stack.length - 1]; return this.stack[this.stack.length - 1];
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
get(index) { get(index) {
if (index >= this.size) throw "索引越界";
return this.stack[index]; return this.stack[index];
} }

@ -27,14 +27,17 @@ class ArrayStack:
""" 出栈 """ """ 出栈 """
def pop(self): def pop(self):
assert not self.is_empty(), "栈为空"
return self.__stack.pop() return self.__stack.pop()
""" 访问栈顶元素 """ """ 访问栈顶元素 """
def peek(self): def peek(self):
assert not self.is_empty(), "栈为空"
return self.__stack[-1] return self.__stack[-1]
""" 访问索引 index 处元素 """ """ 访问索引 index 处元素 """
def get(self, index): def get(self, index):
assert index < self.size(), "索引越界"
return self.__stack[index] return self.__stack[index]
""" 返回列表用于打印 """ """ 返回列表用于打印 """

@ -11,6 +11,7 @@ class ArrayStack {
constructor() { constructor() {
this.stack = []; this.stack = [];
} }
/* 获取栈的长度 */ /* 获取栈的长度 */
get size(): number { get size(): number {
return this.stack.length; return this.stack.length;
@ -28,16 +29,19 @@ class ArrayStack {
/* 出栈 */ /* 出栈 */
pop(): number | undefined { pop(): number | undefined {
if (this.empty()) throw new Error('栈为空');
return this.stack.pop(); return this.stack.pop();
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
top(): number | undefined { top(): number | undefined {
if (this.empty()) throw new Error('栈为空');
return this.stack[this.stack.length - 1]; return this.stack[this.stack.length - 1];
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
get(index: number): number | undefined { get(index: number): number | undefined {
if (index >= this.size) throw new Error('索引越界');
return this.stack[index]; return this.stack[index];
} }
@ -83,4 +87,4 @@ console.log("栈的长度 size = " + size);
const empty = stack.empty(); const empty = stack.empty();
console.log("栈是否为空 = " + empty); console.log("栈是否为空 = " + empty);
export { }; export { };

@ -264,7 +264,7 @@ comments: true
/* 访问队首元素 */ /* 访问队首元素 */
public int peek() { public int peek() {
if (size() == 0) if (size() == 0)
throw new IndexOutOfBoundsException(); throw new EmptyStackException();
return front.val; return front.val;
} }
} }

@ -225,7 +225,6 @@ comments: true
class LinkedListStack { class LinkedListStack {
private ListNode stackPeek; // 将头结点作为栈顶 private ListNode stackPeek; // 将头结点作为栈顶
private int stkSize = 0; // 栈的长度 private int stkSize = 0; // 栈的长度
public LinkedListStack() { public LinkedListStack() {
stackPeek = null; stackPeek = null;
} }
@ -254,7 +253,7 @@ comments: true
/* 访问栈顶元素 */ /* 访问栈顶元素 */
public int peek() { public int peek() {
if (size() == 0) if (size() == 0)
throw new IndexOutOfBoundsException(); throw new EmptyStackException();
return stackPeek.val; return stackPeek.val;
} }
} }
@ -448,14 +447,20 @@ comments: true
} }
/* 出栈 */ /* 出栈 */
public int pop() { public int pop() {
if (isEmpty())
throw new EmptyStackException();
return stack.remove(size() - 1); return stack.remove(size() - 1);
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
public int peek() { public int peek() {
if (isEmpty())
throw new EmptyStackException();
return stack.get(size() - 1); return stack.get(size() - 1);
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
public int get(int index) { public int get(int index) {
if (index >= size())
throw new EmptyStackException();
return stack.get(index); return stack.get(index);
} }
} }
@ -484,16 +489,20 @@ comments: true
} }
/* 出栈 */ /* 出栈 */
int pop() { int pop() {
int oldTop = stack.back(); int oldTop = top();
stack.pop_back(); stack.pop_back();
return oldTop; return oldTop;
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
int top() { int top() {
if(empty())
throw out_of_range("栈为空");
return stack.back(); return stack.back();
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
int get(int index) { int get(int index) {
if(index >= size())
throw out_of_range("索引越界");
return stack[index]; return stack[index];
} }
}; };
@ -521,14 +530,17 @@ comments: true
""" 出栈 """ """ 出栈 """
def pop(self): def pop(self):
assert not self.is_empty(), "栈为空"
return self.__stack.pop() return self.__stack.pop()
""" 访问栈顶元素 """ """ 访问栈顶元素 """
def peek(self): def peek(self):
assert not self.is_empty(), "栈为空"
return self.__stack[-1] return self.__stack[-1]
""" 访问索引 index 处元素 """ """ 访问索引 index 处元素 """
def get(self, index): def get(self, index):
assert index < self.size(), ""
return self.__stack[index] return self.__stack[index]
``` ```
@ -539,30 +551,25 @@ comments: true
type ArrayStack struct { type ArrayStack struct {
data []int // 数据 data []int // 数据
} }
func NewArrayStack() *ArrayStack { func NewArrayStack() *ArrayStack {
return &ArrayStack{ return &ArrayStack{
// 设置栈的长度为 0容量为 16 // 设置栈的长度为 0容量为 16
data: make([]int, 0, 16), data: make([]int, 0, 16),
} }
} }
// Size 栈的长度 // Size 栈的长度
func (s *ArrayStack) Size() int { func (s *ArrayStack) Size() int {
return len(s.data) return len(s.data)
} }
// IsEmpty 栈是否为空 // IsEmpty 栈是否为空
func (s *ArrayStack) IsEmpty() bool { func (s *ArrayStack) IsEmpty() bool {
return s.Size() == 0 return s.Size() == 0
} }
// Push 入栈 // Push 入栈
func (s *ArrayStack) Push(v int) { func (s *ArrayStack) Push(v int) {
// 切片会自动扩容 // 切片会自动扩容
s.data = append(s.data, v) s.data = append(s.data, v)
} }
// Pop 出栈 // Pop 出栈
func (s *ArrayStack) Pop() any { func (s *ArrayStack) Pop() any {
// 弹出栈前,先判断是否为空 // 弹出栈前,先判断是否为空
@ -573,7 +580,6 @@ comments: true
s.data = s.data[:len(s.data)-1] s.data = s.data[:len(s.data)-1]
return val return val
} }
// Peek 获取栈顶元素 // Peek 获取栈顶元素
func (s *ArrayStack) Peek() any { func (s *ArrayStack) Peek() any {
if s.IsEmpty() { if s.IsEmpty() {
@ -597,36 +603,29 @@ comments: true
get size() { get size() {
return this.stack.length; return this.stack.length;
} }
/* 判断栈是否为空 */ /* 判断栈是否为空 */
empty() { empty() {
return this.stack.length === 0; return this.stack.length === 0;
} }
/* 入栈 */ /* 入栈 */
push(num) { push(num) {
this.stack.push(num); this.stack.push(num);
} }
/* 出栈 */ /* 出栈 */
pop() { pop() {
if (this.empty()) throw "栈为空";
return this.stack.pop(); return this.stack.pop();
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
top() { top() {
if (this.empty()) throw "栈为空";
return this.stack[this.stack.length - 1]; return this.stack[this.stack.length - 1];
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
get(index) { get(index) {
if (index >= this.size) throw "索引越界";
return this.stack[index]; return this.stack[index];
} }
/* 返回 Array */
toArray() {
return this.stack;
}
}; };
``` ```
@ -643,36 +642,29 @@ comments: true
get size(): number { get size(): number {
return this.stack.length; return this.stack.length;
} }
/* 判断栈是否为空 */ /* 判断栈是否为空 */
empty(): boolean { empty(): boolean {
return this.stack.length === 0; return this.stack.length === 0;
} }
/* 入栈 */ /* 入栈 */
push(num: number): void { push(num: number): void {
this.stack.push(num); this.stack.push(num);
} }
/* 出栈 */ /* 出栈 */
pop(): number | undefined { pop(): number | undefined {
if (empty()) throw new Error('栈为空');
return this.stack.pop(); return this.stack.pop();
} }
/* 访问栈顶元素 */ /* 访问栈顶元素 */
top(): number | undefined { top(): number | undefined {
if (empty()) throw new Error('栈为空');
return this.stack[this.stack.length - 1]; return this.stack[this.stack.length - 1];
} }
/* 访问索引 index 处元素 */ /* 访问索引 index 处元素 */
get(index: number): number | undefined { get(index: number): number | undefined {
if (index >= size()) throw new Error('索引越界');
return this.stack[index]; return this.stack[index];
} }
/* 返回 Array */
toArray() {
return this.stack;
}
}; };
``` ```

Loading…
Cancel
Save