基本思想:
将需要判断的字符分别压入一个空链栈和空链队列中。当字符串全部压入栈和队列后,逐个弹出字符,对链栈和链队列弹出的字符逐个进行比较是否相等,由于栈是先进后出,队列是先进先出,从而相当于对字符串首尾行进比较,从而能判断出字符串是否为回文。
代码即详细注释如下:
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
struct Node//链栈空节点
{
DataType data;
struct Node* next;
};
typedef struct Node *PNode;
typedef struct Node *LinkStack;
struct Queue
{
PNode f;//f指向链队列首元素
PNode r;//r指向链队列尾元素
};
typedef struct Queue *LinkQueue;
LinkStack SetNullStack_Link()//创建链栈头节点
{
LinkStack top = (LinkStack)malloc(sizeof(struct Node));
if (top != NULL)
top->next = NULL;//必须指定next为NULL,因为要进行头插法创建链栈
else printf("Alloc failure");
return top;
}
int IsNullStack_link(LinkStack top)//判断链栈是否为空
{
if (top->next == NULL)
return 1;
else
return 0;
}
void Push_link(LinkStack top