![]() |
#2
真的很菜2012-10-23 15:01
|

#include<stdio.h>
#define MaxSize 100
typedef struct
{//定义栈,栈1和栈2共享空间
int elements[MaxSize];
int top1; //栈1栈顶指针,初始值为“0”
int top2; //栈2栈顶指针,初始值为“MaxSize”
}BiStack;
void InitStack(BiStack *s)
{//建立空栈
s->top1 = 0;
s->top2 = MaxSize;
}
bool IsFull(BiStack s)
{//判断栈s是否为满,若为满则返回true ,否则返回false
if(s.top1 == s.top2)return true;
else return false;
}
bool IsEmpty(BiStack s)
{//判断栈s是否为空,若为空则返回true ,否则返回false
if(s.top1 == 0 && s.top2 == MaxSize)return true;
else return false ;
}
void Push(BiStack *s,int e)
{//进栈操作,元素e作为栈顶元素插入到栈中
if(!IsFull(*s))
{//判满
if(e%2 == 0)
{//如果输入的是偶数则进栈1,由共享空间的头部递增进栈
s->elements[s->top1] = e;
s->top1++;
}
else
{//如果输入的是奇数则进栈2,从共享空间的尾部递减进栈
s->top2--;
s->elements[s->top2] = e;
}
}
else printf("栈满!\n");
}
void Pop(BiStack *s,int tag)
{//出栈,用tag标记告诉s要输出的是栈1还是栈2,若tag=1,则输出的是栈1(即偶数);若tag=2 则输出栈2(即奇数)
if(!IsEmpty(*s))
{//判空
if(tag == 1)
{//tag=1,栈1出栈
s->top1--;
printf("%d\t",s->elements[s->top1]);
}
else
{//tag=2,栈2出栈
printf("%d\t",s->elements[s->top2]);
s->top2++;
}
}
else printf("栈空!\n");
}
int main()
{
BiStack *s; //定义一个BiStack 类的指针s
int e,i;
InitStack(s);//创建空栈
printf("请输入10个整数:\t");
for(i = 0;i < 10;i++)
{//输入10个整数并把值放到栈里
scanf("%d",&e);
Push(s,e);
}
printf("分类后为:");
for(i = 1;i <= 2;i++)
{//利用for循环控制输出的是偶数还是奇数,这里的i传递给Pop(BiStack *s,int tag)函数中的tag标识
if(i == 1)printf("偶数类:\t");
else printf("奇数类:\t");
while(s->top1 != 0 && s->top2 != MaxSize)
{
Pop(s,i);
}
}
return 0;
}
#define MaxSize 100
typedef struct
{//定义栈,栈1和栈2共享空间
int elements[MaxSize];
int top1; //栈1栈顶指针,初始值为“0”
int top2; //栈2栈顶指针,初始值为“MaxSize”
}BiStack;
void InitStack(BiStack *s)
{//建立空栈
s->top1 = 0;
s->top2 = MaxSize;
}
bool IsFull(BiStack s)
{//判断栈s是否为满,若为满则返回true ,否则返回false
if(s.top1 == s.top2)return true;
else return false;
}
bool IsEmpty(BiStack s)
{//判断栈s是否为空,若为空则返回true ,否则返回false
if(s.top1 == 0 && s.top2 == MaxSize)return true;
else return false ;
}
void Push(BiStack *s,int e)
{//进栈操作,元素e作为栈顶元素插入到栈中
if(!IsFull(*s))
{//判满
if(e%2 == 0)
{//如果输入的是偶数则进栈1,由共享空间的头部递增进栈
s->elements[s->top1] = e;
s->top1++;
}
else
{//如果输入的是奇数则进栈2,从共享空间的尾部递减进栈
s->top2--;
s->elements[s->top2] = e;
}
}
else printf("栈满!\n");
}
void Pop(BiStack *s,int tag)
{//出栈,用tag标记告诉s要输出的是栈1还是栈2,若tag=1,则输出的是栈1(即偶数);若tag=2 则输出栈2(即奇数)
if(!IsEmpty(*s))
{//判空
if(tag == 1)
{//tag=1,栈1出栈
s->top1--;
printf("%d\t",s->elements[s->top1]);
}
else
{//tag=2,栈2出栈
printf("%d\t",s->elements[s->top2]);
s->top2++;
}
}
else printf("栈空!\n");
}
int main()
{
BiStack *s; //定义一个BiStack 类的指针s
int e,i;
InitStack(s);//创建空栈
printf("请输入10个整数:\t");
for(i = 0;i < 10;i++)
{//输入10个整数并把值放到栈里
scanf("%d",&e);
Push(s,e);
}
printf("分类后为:");
for(i = 1;i <= 2;i++)
{//利用for循环控制输出的是偶数还是奇数,这里的i传递给Pop(BiStack *s,int tag)函数中的tag标识
if(i == 1)printf("偶数类:\t");
else printf("奇数类:\t");
while(s->top1 != 0 && s->top2 != MaxSize)
{
Pop(s,i);
}
}
return 0;
}