用代码编写分别在顺序栈和链栈中完成如下功能: ○1.以学号作为入栈数据,按顺序连续入栈及出栈,观察出栈结果,并分析原因。 ○2.以学号作为入栈数据,实现出栈数据为学号。
时间: 2023-06-05 08:08:24 浏览: 63
好的,我明白了。以下是您所提出的问题的回答:
我可以为您提供顺序栈和链栈的代码,实现如下功能:
1.顺序栈实现:
```python
class SeqStack:
def __init__(self, size):
self.size = size
self.top = -1
self.data = [None] * self.size
def is_empty(self):
return self.top == -1
def is_full(self):
return self.top == self.size - 1
def push(self, elem):
if self.is_full():
print("Stack is full")
return
self.top += 1
self.data[self.top] = elem
print("Pushed: ", elem)
def pop(self):
if self.is_empty():
print("Stack is empty")
return
elem = self.data[self.top]
self.top -= 1
print("Popped: ", elem)
return elem
if __name__ == '__main__':
stack = SeqStack(10)
for i in range(10):
stack.push(i)
for i in range(10):
stack.pop()
```
2.链栈实现:
```python
class Node:
def __init__(self, elem):
self.elem = elem
self.next = None
class LinkStack:
def __init__(self):
self.top = None
def is_empty(self):
return self.top == None
def push(self, elem):
node = Node(elem)
node.next = self.top
self.top = node
print("Pushed: ", elem)
def pop(self):
if self.top == None:
print("Stack is empty")
return
elem = self.top.elem
self.top = self.top.next
print("Popped: ", elem)
return elem
if __name__ == '__main__':
stack = LinkStack()
for i in range(10):
stack.push(i)
for i in range(10):
stack.pop()
```
当我们按顺序连续入栈和出栈时,顺序栈和链栈的出栈结果应该是倒序的。这是因为顺序栈和链栈都是先进后出的数据结构,所以后入栈的元素先出栈。
如果我们要以学号作为入栈数据,并实现出栈数据为学号的功能,只需修改push和pop方法即可。
顺序栈实现:
```python
class SeqStack:
def __init__(self, size):
self.size = size
self.top = -1
self.data = [None] * self.size
def is_empty(self):
return self.top == -1
def is_full(self):
return self.top == self.size - 1
def push(self, student_num):
if self.is_full():
print("Stack is full")
return
self.top += 1
self.data[self.top] = student_num
print("Pushed: ", student_num)
def pop(self):
if self.is_empty():
print("Stack is empty")
return
student_num = self.data[self.top]
self.top -= 1
print("Popped: ", student_num)
return student_num
if __name__ == '__main__':
stack = SeqStack(10)
for i in range(1, 11):
stack.push("2021" + str(i).zfill(3))
for i in range(10):
print(stack.pop())
```
链栈实现:
```python
class Node:
def __init__(self, student_num):
self.student_num = student_num
self.next = None
class LinkStack:
def __init__(self):
self.top = None
def is_empty(self):
return self.top == None
def push(self, student_num):
node = Node(student_num)
node.next = self.top
self.top = node
print("Pushed: ", student_num)
def pop(self):
if self.top == None:
print("Stack is empty")
return
student_num = self.top.student_num
self.top = self.top.next
print("Popped: ", student_num)
return student_num
if __name__ == '__main__':
stack = LinkStack()
for i in range(1, 11):
stack.push("2021" + str(i).zfill(3))
for i in range(10):
print(stack.pop())
```
希望这些代码能够帮助到您。如果您有任何其他问题,请随时与我交流。