(2)进栈push(e)1/元素e进栈public void push(E e)//顺序栈空间满时倍增容量(if(top==capacity-1)updatecapacity(2*(top+1))//栈顶指针增1top++;data[top]=e;16/101
public void push(E e) //元素e进栈 { if (top==capacity-1) //顺序栈空间满时倍增容量 updatecapacity(2*(top+1)); top++; //栈顶指针增1 data[top]=e; } 16/101
(3)出栈pop()//出栈操作public Epop()(if(empty())throw new IllegalArgumentException("栈空");Ee=(E)data[top];top--;if(top+1>initcapacity &&top+1==capacity/4)//满足条件容量减半updatecapacity(capacity/2);return e;17/101
public E pop() //出栈操作 { if (empty()) throw new IllegalArgumentException("栈空"); E e=(E)data[top]; top-; if (top+1>initcapacity && top+1==capacity/4) //满足条件容量减半 updatecapacity(capacity/2); return e; } 17/101
4取栈顶元素peek()//取栈顶元素操作public E peek(){if (empty())throw new IllegalArgumentException("栈空");return(E)data[top];18/101
public E peek() //取栈顶元素操作 { if (empty()) throw new IllegalArgumentException("栈空"); return (E)data[top]; } 18/101
?顺序栈的几个问题问题1:若采用数组data[1..ml存放栈元素,回答以下问题:(1)只能以data[1]端作为栈底吗?(2)为什么不能以data数组的中间位置作为栈底?答:(1)也可以将data[m]端作为栈底。m一栈元素(2)栈中元素是从栈底向栈顶方向生长的,如果以data数组的中间位置作为栈底,那么栈顶方向的另外一端空间就不能使用,造成空间浪费,所以不能以data数组的中间位置作为栈底。19/101
? 顺序栈的几个问题 问题1:若采用数组data[1.m]存放栈元素,回答以下问题: (1)只能以data[1]端作为栈底吗? (2)为什么不能以data数组的中间位置作为栈底? 答:(1)也可以将data[m]端作为栈底。 (2)栈中元素是从栈底向栈顶方向生长的,如果以data数组的 中间位置作为栈底,那么栈顶方向的另外一端空间就不能使用,造成 空间浪费,所以不能以data数组的中间位置作为栈底。 ←栈元素 1 . . m 19/101
问题2:若一个栈用数组data1..nl存储,初始栈顶指针top为n+1,则以下元素x进栈的正确操作是()A.top++; data[top]=x;B.data[top]=x; top++;C.top--; data[top]=x;D.data[top]=x;top--;答:初始栈顶指针top为n+1,说明data[n]端作为栈底,在进栈时top应递减,由于不存在data[n+1]的元素,所以在进栈时应先将top递减,再将x放在top处(top指向栈顶元素)。答案为C。一栈元素top20/101
若一个栈用数组data[1.n]存储,初始栈顶指针top为n+1,则以下 元素x进栈的正确操作是( )。 A.top++; data[top]=x; B.data[top]=x; top++; C.top-; data[top]=x; D.data[top]=x; top-; 答:初始栈顶指针top为n+1,说明data[n]端作为栈底,在进栈时 top应递减,由于不存在data[n+1]的元素,所以在进栈时应先将top递 减,再将x放在top处(top指向栈顶元素)。答案为C。 问题2: ←栈元素 1 . . n top 20/101