/*在一個數組A[1..n]中實現兩個棧,使得兩個棧
元素個數之和不爲n時,兩者不會上溢*/
#include<stdio.h>
#define n 6
typedef char ElemType;
typedef int bool;
ElemType A[n];
int top1=1;//棧1的棧頂指針
int top2=n;//棧2的棧頂指針
//永遠都指向棧頂元素的下一個位置
/*
棧1的棧底是A[1],元素進棧放入的位置順序是1,2,3,...(下標)
棧2的棧底A[n],元素進棧放入的位置順序是n,n-1,n-2,...
*/
void warning(char* s)
{
puts(s);
}
bool full()//兩個棧之和是否滿
{
return top2+1==top1;
}
void push1(ElemType elem)//push到stack1
{
if(full()) warning("stack overflow!");
else{ A[top1]=elem;top1++; }
}
void push2(ElemType elem)//push到stack2
{
if(full()) warning("stack overflow!");
else{ A[top2]=elem;top2--; }
}
bool empty1()//stack1是否empty
{
return top1==1;
}
bool empty2()//stack2是否empty
{
return top2==n;
}
ElemType tops1()//stack1的棧頂元素
{
return A[top1-1];
}
ElemType tops2()//stack2的棧頂元素
{
return A[top2+1];
}
void pop1()//stack1的pop
{
if(empty1()) warning("stack underflow!");
else top1--;
}
void pop2()//stack2的pop
{
if(empty2()) warning("stack underflow!");
else top2++;
}
void traverse()
{
int i;
for(i=1;i<top1;i++)
putchar(A[i]);
putchar(' ');
for(i=n;i>top2;i--)
putchar(A[i]);
putchar('\n');
}
int main(void)
{
traverse();
pop1();
push1('a');
putchar(tops1());putchar('\n');
push1('b');
push1('c');
push1('d');
pop1();
traverse();
putchar(tops1());putchar('\n');
pop2();
push2('z');
push2('y');
push2('x');
push2('w');
traverse();
pop2();pop2();pop2();pop2();pop1();
traverse();
push1('b');push1('b');push1('b');push1('b');
traverse();
return 0;
}
10.1-2 在一個數組A[1..n]中實現兩個棧,使得兩個棧元素個數之和不爲n時,兩者不會上溢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.