📄 zhan4.cpp
字号:
//用栈判断是否回文
#include <stdio.h>
#include<stdlib.h>
#define True 1
#define False 0
#define LEN sizeof(ElemType)
#define Stack_InitSize 100
#define Stack_Increment 30
typedef char ElemType;
struct SqStack
{
ElemType *base;
ElemType *top;
int stacksize;
};
/*构造一个空栈*/
SqStack* InitStack(struct SqStack *S)
{
S=(SqStack*)malloc(sizeof(SqStack));
S->base = (ElemType *)malloc(Stack_InitSize*LEN);
if(!S->base)
return S ;
S->top = S->base;
S->stacksize = Stack_InitSize;
return S;
}
/*销毁一个栈*/
void DestroyStack(struct SqStack *S)
{
while(S->top!=S->base)
S->top--;
free(S->base);
free(S);
}
/*将栈里面的元素清空*/
void ClearStack(struct SqStack *S)
{
while(S->top!=S->base)
S->top--;
}
/*判断是否为空栈*/
int IsEmpty(struct SqStack *S)
{
if(S->top==S->base)
return 1;
else
return 0;
}
/*按出栈顺序打印这个栈*/
void Print(struct SqStack *S)
{
ElemType *p;
p = S->top;
while(p!=S->base)
{
p--;
printf("%d ",*p);
}
printf("\n");
p=NULL;
}
/*向栈里压入数据e*/
void Push(struct SqStack *S,ElemType e)
{
if(S->top - S->base >= S->stacksize) /*栈满,重新分配更大的空间*/
{
S->base = (ElemType *)realloc(S->base,(S->stacksize+Stack_Increment)*LEN);
S->top = S->base + S->stacksize;
S->stacksize += Stack_Increment;
}
*S->top = e;
S->top++;
return;
}
/*弹出栈顶元素*/
void Pop(struct SqStack *S)
{
if(S->top==S->base)
return ;
S->top--;
}
/*返回栈顶元素*/
char GetTop(struct SqStack *S)
{
ElemType *p = S->top;
if(S->top==S->base)
{
//printf("The stack is empty!");
return False;
}
return *(--p);
}
void main()
{
SqStack *a;
SqStack *c;
char b;
int i=0;
a=InitStack(a);
printf("Please put your datas into this stack!\n");
scanf("%c",&b);
while(b!='#')
{
Push(a,b);
i++;
scanf("%c",&b);
}
c=InitStack(c);
int j=0;
while(j<i/2)
{
Push(c,GetTop(a));
Pop(a);
j++;
}
if(i%2!=0) Pop(a);
while(!IsEmpty(a) && !IsEmpty(c))
if(GetTop(a)!=GetTop(c))
{printf("This is not a reversion!\n");
break;}
else
{
Pop(a);
Pop(c);
}
if(IsEmpty(a) && IsEmpty(c))
printf("This stack is a reversion!\n");
ClearStack(a);
ClearStack(c);
DestroyStack(a);
DestroyStack(c);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -