1、栈的顺序存储结构,构造一个空栈; 2、入栈操作和出栈操作; 3、获取栈顶元素; 4、判断栈空; 5、求当前栈的长度; 6、利用上面栈的基本操作,编写出实现十进制正整数转换为对应的二进制、八进制和十六进制数的程序。
时间: 2024-11-12 17:31:42 浏览: 5
1. 栈的顺序存储结构通常采用数组或链表实现。构造一个空栈,如果是数组,可以初始化一个大小为0的数组表示为空;如果是链表,创建一个头节点,指向None。
```python
# 使用列表模拟栈(数组)
stack = []
```
2. 入栈(push)操作是在栈顶添加元素,如果用数组表示,就将元素加到数组末尾;链表则指向新节点并更新头节点指向。
```python
def push(stack, item):
stack.append(item)
```
3. 出栈(pop)操作是从栈顶移除并返回元素,数组中就是删除最后一个元素并返回,链表中则是解引用头节点然后返回值。
```python
def pop(stack):
if not is_empty(stack): # 判断是否为空
return stack.pop()
else:
raise Exception("Stack is empty")
```
4. 判定栈是否为空(is_empty),数组通过检查栈顶索引是否等于0,链表则直接比较头节点是否为None。
```python
def is_empty(stack):
return len(stack) == 0 or (type(stack) == list and stack[0] is None)
```
5. 获取栈的当前长度,即元素的数量。对于数组和链表都是O(1)时间复杂度,因为它们都有现成的方法计算长度。
```python
def get_length(stack):
return len(stack)
```
6. 要将十进制正整数转换为二进制、八进制和十六进制,可以设计一个递归函数,先处理栈的顶部元素,然后依次处理剩余元素。这里仅展示转换为二进制的过程,其他进制类似:
```python
def decimal_to_binary(n, base=2):
if n == 0:
return '0'
elif n < base:
return str(n) + decimal_to_binary(n // base, base)
else:
return decimal_to_binary(n // base, base) + str(n % base)
# 示例:转换输入数字
number = 10
binary = decimal_to_binary(number)
print(f"{number} in binary: {binary}")
```
阅读全文