//10.1-2 说明如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢。注意PUSH和POP操作的时间应为O(1)
#include <stdio.h>
#include <stdlib.h>
struct Stack;
typedef struct Stack *St;
#define N 10
struct Stack
{
int Left_Top;
int Right_Top;
int size;
int *array;
};
St InitStack()
{
St S;
S=(St)malloc(sizeof(struct Stack));
if(!S)
exit(-1);
S->size=N;
S->Left_Top=0;
S->Right_Top=N;
S->array=(int*)malloc(sizeof(int)*N);
return S;
}
void Push(St S,int i,int x)
{
if(i==0)//i=0表示要在左边入栈
{
if(S->Left_Top<S->Right_Top)
{
S->Left_Top++;
S->array[S->Left_Top]=x;
}
else
{
exit(-1);
}
}
else
{
if(S->Left_Top<S->Right_Top)
{
S->Right_Top--;
S->array[S->Right_Top]=x;
}
else
{
exit(-1);
}
}
}
void POP(St S,int i)
{
if(i==0)//i=0表示将左边的栈中的元素出栈
{
if(S->Left_Top+N!=S->Right_Top)
{
S->Left_Top--;
}
else
exit(-1);
}
else
{
if(S->Left_Top+N!=S->Right_Top)
{
S->Right_Top++;
}
else
exit(-1);
}
}
void Print(St S)
{
int i;
for(i=1;i<=S->Left_Top;++i)
printf("%d ",S->array[i]);
for(i=S->Right_Top;i<N;i++)
printf("%d ",S->array[i]);
printf("\n");
}
void main()
{
St S;
S=InitStack();
Push(S,0,1);
Push(S,0,2);
Push(S,0,3);
Push(S,0,4);
Push(S,0,5);
Push(S,1,6);
Push(S,1,7);
Print(S);
POP(S,0);
POP(S,0);
POP(S,1);
POP(S,0);
Print(S);
}
算法导论10.1-2答案
最新推荐文章于 2022-11-01 13:06:27 发布