Skip to content

Commit

Permalink
Merge pull request krahets#133 from tao363/master
Browse files Browse the repository at this point in the history
Update array stack
  • Loading branch information
krahets authored Dec 20, 2022
2 parents 9c0bef3 + fa3eff8 commit 1c4ba59
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 34 deletions.
6 changes: 5 additions & 1 deletion codes/cpp/chapter_stack_and_queue/array_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,22 @@ class ArrayStack {

/* 出栈 */
int pop() {
int oldTop = stack.back();
int oldTop = top();
stack.pop_back();
return oldTop;
}

/* 访问栈顶元素 */
int top() {
if(empty())
throw out_of_range("栈为空");
return stack.back();
}

/* 访问索引 index 处元素 */
int get(int index) {
if(index >= size())
throw out_of_range("索引越界");
return stack[index];
}

Expand Down
6 changes: 6 additions & 0 deletions codes/java/chapter_stack_and_queue/array_stack.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,22 @@ public void push(int num) {

/* 出栈 */
public int pop() {
if (isEmpty())
throw new EmptyStackException();
return stack.remove(size() - 1);
}

/* 访问栈顶元素 */
public int peek() {
if (isEmpty())
throw new EmptyStackException();
return stack.get(size() - 1);
}

/* 访问索引 index 处元素 */
public int get(int index) {
if (index >= size())
throw new IndexOutOfBoundsException();
return stack.get(index);
}

Expand Down
2 changes: 1 addition & 1 deletion codes/java/chapter_stack_and_queue/linkedlist_queue.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public int poll() {
/* 访问队首元素 */
public int peek() {
if (size() == 0)
throw new IndexOutOfBoundsException();
throw new EmptyStackException();
return front.val;
}

Expand Down
2 changes: 1 addition & 1 deletion codes/java/chapter_stack_and_queue/linkedlist_stack.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public int pop() {
/* 访问栈顶元素 */
public int peek() {
if (size() == 0)
throw new IndexOutOfBoundsException();
throw new EmptyStackException();
return stackPeek.val;
}

Expand Down
3 changes: 3 additions & 0 deletions codes/javascript/chapter_stack_and_queue/array_stack.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,19 @@ class ArrayStack {

/* 出栈 */
pop() {
if (this.empty()) throw "栈为空";
return this.stack.pop();
}

/* 访问栈顶元素 */
top() {
if (this.empty()) throw "栈为空";
return this.stack[this.stack.length - 1];
}

/* 访问索引 index 处元素 */
get(index) {
if (index >= this.size) throw "索引越界";
return this.stack[index];
}

Expand Down
3 changes: 3 additions & 0 deletions codes/python/chapter_stack_and_queue/array_stack.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,17 @@ def push(self, item):

""" 出栈 """
def pop(self):
assert not self.is_empty(), "栈为空"
return self.__stack.pop()

""" 访问栈顶元素 """
def peek(self):
assert not self.is_empty(), "栈为空"
return self.__stack[-1]

""" 访问索引 index 处元素 """
def get(self, index):
assert index < self.size(), "索引越界"
return self.__stack[index]

""" 返回列表用于打印 """
Expand Down
6 changes: 5 additions & 1 deletion codes/typescript/chapter_stack_and_queue/array_stack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class ArrayStack {
constructor() {
this.stack = [];
}

/* 获取栈的长度 */
get size(): number {
return this.stack.length;
Expand All @@ -28,16 +29,19 @@ class ArrayStack {

/* 出栈 */
pop(): number | undefined {
if (this.empty()) throw new Error('栈为空');
return this.stack.pop();
}

/* 访问栈顶元素 */
top(): number | undefined {
if (this.empty()) throw new Error('栈为空');
return this.stack[this.stack.length - 1];
}

/* 访问索引 index 处元素 */
get(index: number): number | undefined {
if (index >= this.size) throw new Error('索引越界');
return this.stack[index];
}

Expand Down Expand Up @@ -83,4 +87,4 @@ console.log("栈的长度 size = " + size);
const empty = stack.empty();
console.log("栈是否为空 = " + empty);

export { };
export { };
2 changes: 1 addition & 1 deletion docs/chapter_stack_and_queue/queue.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ comments: true
/* 访问队首元素 */
public int peek() {
if (size() == 0)
throw new IndexOutOfBoundsException();
throw new EmptyStackException();
return front.val;
}
}
Expand Down
50 changes: 21 additions & 29 deletions docs/chapter_stack_and_queue/stack.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,6 @@ comments: true
class LinkedListStack {
private ListNode stackPeek; // 将头结点作为栈顶
private int stkSize = 0; // 栈的长度
public LinkedListStack() {
stackPeek = null;
}
Expand Down Expand Up @@ -254,7 +253,7 @@ comments: true
/* 访问栈顶元素 */
public int peek() {
if (size() == 0)
throw new IndexOutOfBoundsException();
throw new EmptyStackException();
return stackPeek.val;
}
}
Expand Down Expand Up @@ -448,14 +447,20 @@ comments: true
}
/* 出栈 */
public int pop() {
if (isEmpty())
throw new EmptyStackException();
return stack.remove(size() - 1);
}
/* 访问栈顶元素 */
public int peek() {
if (isEmpty())
throw new EmptyStackException();
return stack.get(size() - 1);
}
/* 访问索引 index 处元素 */
public int get(int index) {
if (index >= size())
throw new EmptyStackException();
return stack.get(index);
}
}
Expand Down Expand Up @@ -484,16 +489,20 @@ comments: true
}
/* 出栈 */
int pop() {
int oldTop = stack.back();
int oldTop = top();
stack.pop_back();
return oldTop;
}
/* 访问栈顶元素 */
int top() {
if(empty())
throw out_of_range("栈为空");
return stack.back();
}
/* 访问索引 index 处元素 */
int get(int index) {
if(index >= size())
throw out_of_range("索引越界");
return stack[index];
}
};
Expand Down Expand Up @@ -521,14 +530,17 @@ comments: true

""" 出栈 """
def pop(self):
assert not self.is_empty(), "栈为空"
return self.__stack.pop()

""" 访问栈顶元素 """
def peek(self):
assert not self.is_empty(), "栈为空"
return self.__stack[-1]

""" 访问索引 index 处元素 """
def get(self, index):
assert index < self.size(), "索引越界"
return self.__stack[index]
```

Expand All @@ -539,30 +551,25 @@ comments: true
type ArrayStack struct {
data []int // 数据
}

func NewArrayStack() *ArrayStack {
return &ArrayStack{
// 设置栈的长度为 0,容量为 16
data: make([]int, 0, 16),
}
}

// Size 栈的长度
func (s *ArrayStack) Size() int {
return len(s.data)
}

// IsEmpty 栈是否为空
func (s *ArrayStack) IsEmpty() bool {
return s.Size() == 0
}

// Push 入栈
func (s *ArrayStack) Push(v int) {
// 切片会自动扩容
s.data = append(s.data, v)
}

// Pop 出栈
func (s *ArrayStack) Pop() any {
// 弹出栈前,先判断是否为空
Expand All @@ -573,7 +580,6 @@ comments: true
s.data = s.data[:len(s.data)-1]
return val
}

// Peek 获取栈顶元素
func (s *ArrayStack) Peek() any {
if s.IsEmpty() {
Expand All @@ -597,36 +603,29 @@ comments: true
get size() {
return this.stack.length;
}

/* 判断栈是否为空 */
empty() {
return this.stack.length === 0;
}

/* 入栈 */
push(num) {
this.stack.push(num);
}

/* 出栈 */
pop() {
if (this.empty()) throw "栈为空";
return this.stack.pop();
}

/* 访问栈顶元素 */
top() {
if (this.empty()) throw "栈为空";
return this.stack[this.stack.length - 1];
}

/* 访问索引 index 处元素 */
get(index) {
if (index >= this.size) throw "索引越界";
return this.stack[index];
}

/* 返回 Array */
toArray() {
return this.stack;
}
};
```

Expand All @@ -643,36 +642,29 @@ comments: true
get size(): number {
return this.stack.length;
}

/* 判断栈是否为空 */
empty(): boolean {
return this.stack.length === 0;
}

/* 入栈 */
push(num: number): void {
this.stack.push(num);
}

/* 出栈 */
pop(): number | undefined {
if (empty()) throw new Error('栈为空');
return this.stack.pop();
}

/* 访问栈顶元素 */
top(): number | undefined {
if (empty()) throw new Error('栈为空');
return this.stack[this.stack.length - 1];
}

/* 访问索引 index 处元素 */
get(index: number): number | undefined {
if (index >= size()) throw new Error('索引越界');
return this.stack[index];
}

/* 返回 Array */
toArray() {
return this.stack;
}
};
```

Expand Down

0 comments on commit 1c4ba59

Please sign in to comment.