回文数的栈实现
思路
代码实现
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define FLAG '@'
typedef char DataType;
typedef struct
{
DataType data[MAXSIZE];
int top;
}Sqstack;
void Init_Stack(Sqstack *S);
void Enter_Stack(Sqstack *S);
void Show_Stack(Sqstack *S);
int Judge_Palindromic(Sqstack *P,Sqstack *Q);
void Delete_Stack(Sqstack *S,DataType *c);
void main()
{
Sqstack P,Q;
printf("初始化栈P、Q:\n");
Init_Stack(&P);
Init_Stack(&Q);
printf("输入回文数:\n");
Enter_Stack(&P);
printf("遍历栈P:\n");
Show_Stack(&P);
printf("判断是否是回文数:\n");
if(Judge_Palindromic(&P,&Q))
printf("输入的是回文数!\n");
else
printf("输入的不是回文数!\n");
}
void Init_Stack(Sqstack *S)
{
S->top = -1;
}
void Enter_Stack(Sqstack *S)
{
DataType c;
scanf("%c",&c);
while(c != FLAG)
{
S->top++;
S->data[S->top] = c;
scanf("%c",&c);
}
}
void Delete_Stack(Sqstack *S,DataType *c)
{
*c = S->data[S->top];
S->top--;
}
void Show_Stack(Sqstack *S)
{
int i = 0;
while(i <= S->top)
{
printf("%c ",S->data[i]);
i++;
}
printf("\n");
}
int Judge_Palindromic(Sqstack *P,Sqstack *Q)
{
DataType c;
int len = P->top + 1;
int i = 0,j = 1;
while(i < len / 2)
{
Delete_Stack(P,&c);
Q->top++;
Q->data[Q->top] = c;
i++;
}
printf("退栈后P中元素:\n");
Show_Stack(P);
printf("退栈后Q中元素:\n");
Show_Stack(Q);
if(P->top != Q->top)
{
P->top--;
}
while(i > 0)
{
if(Q->data[Q->top] == P->data[P->top])
{
Q->top--;
P->top--;
}
else
{
j = 0;
break;
}
i--;
}
return j;
}