13.P88课后习题3-13:编程序判断一个字符序列是否是回文,要求只使用堆栈,不使用队列。
头文件:SeqStack.h
#include<stdio.h>
#include<string.h>
#define MaxStackSize 100
typedef char DataType;
typedef struct
{
DataType stack[MaxStackSize];
int top;
}SeqStack;
void StackInitiate(SeqStack* S)
{
S->top = 0;
}
int StackNotEmpty(SeqStack S)
{
if (S.top <= 0)
return 0;
else
return 1;
}
int StackPush(SeqStack* S, DataType x)
{
if (S->top >= MaxStackSize)
{
printf("堆栈已满无法插入!\n");
return 0;
}
else
{
S->stack[S->top] = x;
S->top++;
return 1;
}
}
int StackPop(SeqStack* S, DataType* d)
{
if (S->top <= 0)
{
printf("堆栈已空无数据元素出栈!\n");
return 0;
}
else
{
S->top--;
*d = S->stack[S->top];
return 1;
}
}
int StackTop(SeqStack S, DataType* d)
{
if (S.top <= 0)
{
printf("堆栈已空!\n");
return 0;
}
else
{
*d = S.stack[S.top - 1];
return 1;
}
}
源文件:main.c
#include "SeqStack.h"
void HuiWen(char str[])
{
SeqStack myStack;
char x;
int i, length;
int f = 0;
length = (int)strlen(str);
StackInitiate(&myStack);
for (i = 0; i < length; i++)
{
if (i * 2 + 1 < length)
{
StackPush(&myStack, str[i]);
}
else if (i * 2 + 1 != length)
{
StackPop(&myStack, &x);
if (x != str[i])
{
printf("%s不是回文!\n", str);
return;
}
}
}
printf("%s是回文!\n", str);
}
int main(void)
{
char str1[] = "ABCDEDCBA";
char str2[] = "ABCDEDCAB";
HuiWen(str1);
HuiWen(str2);
return 0;
}