|
#define MAXSIZE 100
#define OK 1
#define NO 0
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *base;
ElemType *top;
int length;
}Stack;
Status InitStack(Stack *s1,Stack *s2)
{
ElemType array[MAXSIZE];
array[99]=99;
s1->base=array;
s1->length=0;
s1->top=s1->base;
s2->length=0;
s2->base=&array[MAXSIZE-1];
printf("----%d----",*(s2->base));
s2->top=s2->base;
printf("----%d----",*(s2->top));
return OK;
}
int StackLength(Stack *s)
{
return s->length;
}
Status IsFull(Stack *s1,Stack *s2)
{
if(s1->length+s2->length==MAXSIZE)
return OK;
return NO;
}
Status EnStack(Stack *s1,ElemType e,Stack *s2)
{
int flag;
printf("--zhijie--%d----",*(s2->top));
flag=IsFull(s1,s2);
if(flag==1)//数组满了
return NO;
else
{
if(s1->base<s2->base)
{
printf("-r-%d",*(s1->base));
printf("-r-%d",*(s2->base));
*(s1->top)=e;
s1->top++;
s1->length++;
return OK;
}
else
{
printf("-rr-%d",*(s2->base));
printf("--%d",*(s1->base));
printf("--%d",*(s1->top));
printf("s2");
*(s1->top)=e;
printf("s2s");
printf("%d",*(s1->top));
(s1->top)--;
printf("s2");
s1->length++;
printf("s2");
printf("--%d",*(s1->base));
return OK;
}
}
}
Status DeStack(Stack *s1,ElemType *e,Stack *s2)
{
if(s1->length==0)
{
printf("此为空栈!\n");
return NO;
}
if(s1->base<s2->base)//s1
{
s1->top--;
*e=*(s1->top);
s1->length--;
return OK;
}
else//s2
{
s1->top++;
*e=*(s1->top);
s1->length--;
return OK;
}
}
void PrintStack(Stack *s1,Stack *s2)
{
int i;
ElemType *temp;
if(s1->length==0)
{
printf("此为空队列!\n");
return;
}
temp=s1->base;
printf("shuchu");
if(s1->base<s2->base)
{
for(i=0;i<s1->length;i++)
{
printf("%d\t",*temp);
temp++;
}
}
else
{
for(i=0;i<s1->length;i++)
{
printf("%d\t",*temp);
temp--;
}
}
printf("\n");
}
main()
{
Stack s1,s2;
ElemType temp,*e,x;
e=&temp;
x=5;
InitStack(&s1,&s2);
printf("ya%dya",*(s2.base));//这里的指针都还是对的
PrintStack(&s1,&s2);
PrintStack(&s2,&s1);
printf("ya%dya",*(s2.base));//为什么这里的指针都出问题了
EnStack(&s1,x,&s2);
printf("ya%dya",*(s2.base));
EnStack(&s1,x+1,&s2);
printf("ya%dya",*(s2.base));
EnStack(&s1,x+2,&s2);
printf("ya%dya",*(s2.base));
EnStack(&s1,x+3,&s2);
printf("ya%dya",*(s2.base));
EnStack(&s1,x+4,&s2);
printf("ya%dya",*(s2.base));
PrintStack(&s1,&s2);
printf("3");
EnStack(&s2,x+10,&s1);
//PrintStack(&s2,&s1);
printf("0\t");
//PrintStack(&s2,&s1);
/* EnStack(&s2,x+11,&s1);
EnStack(&s2,x+12,&s1);
EnStack(&s2,x+13,&s1);
EnStack(&s2,x+14,&s1);*/
printf("01\t");
//PrintStack(&s1,&s2);
//PrintStack(&s2,&s1);
/*
x=StackLength(&s1);
printf("s1长度为%d\n",x);
DeStack(&s1,e,&s2);
printf("s1删除的数:%d\n",temp);
PrintStack(&s1,&s2);
x=StackLength(&s1);
printf("s1长度为%d\n",x);
DeStack(&s2,e,&s2);
printf("s2删除的数:%d\n",temp);
DeStack(&s2,e,&s2);
printf("s2删除的数:%d\n",temp);
PrintStack(&s2,&s1);
x=StackLength(&s2);
printf("s2长度为%d\n",x);
*/
getch();
} |
|