设计一个算法,利用顺序栈的基本运算删除栈st中所有值为e的元素(这样的元素可能有多个),并且保持其他元素次序不变
时间: 2024-05-11 19:16:19 浏览: 93
删除顺序表中的元素
3星 · 编辑精心推荐
好的,针对你的问题,我可以给出如下算法:
1. 定义一个临时栈temp,用来存储不等于e的元素
2. 遍历顺序栈st的所有元素,若当前元素不等于e,则将其压入temp中
3. 遍历完成后,清空原来的栈st,再将temp的所有元素依次压入st中,这样保持了元素的次序不变
下面是具体的实现代码(注:以下代码仅作示例参考,具体实现还需根据不同编程语言进行相应修改):
```
void deleteAllElems(SeqStack &st, ElemType e){
SeqStack temp; // 定义一个临时栈
InitStack(temp); // 初始化临时栈
// 遍历原来的栈st
while(st.top > -1){
ElemType elem = st.data[st.top]; // 取出当前栈顶元素
if(elem != e){ // 当前元素不是e,压入临时栈temp中
Push(temp, elem);
}
Pop(st); // 取出当前栈顶元素
}
// 清空原来的栈st
ClearStack(st);
// 将临时栈temp的元素依次压入栈st中
while(temp.top > -1){
ElemType elem = temp.data[temp.top];
Push(st, elem);
Pop(temp);
}
}
```
阅读全文