判断单链表是否为回文结构
方法一:利用栈结构判断:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100
typedef char ElemType;
typedef struct {
ElemType *base;
ElemType *top;
int stacksize;
} Stack;
void InitStack(Stack &S);
int Push(Stack &S,ElemType x); //入栈
int Pop(Stack &S,ElemType &e); //出栈
ElemType GetTop(Stack S); //获取栈内元素
int main() {
Stack S;
InitStack(S);
int n;
ElemType x[100],e;
printf("请输入字符串的长度:\n");
scanf("%d",&n);
printf("请输入字符串:\n");
getchar();
gets(x);
int length=n/2; //提高空间复杂度
for(int i=0; i<n; i++) {
Push(S,x[i]);
}
for(int i=0; i<length; i++) {
Pop(S,e);
if(e!=x[i]) {
printf("该链表不为回文结构!");
return 0;
}
}
printf("该链表为回文结构!");
return 0;
}
void InitStack(Stack &S) {
S.base=new ElemType[MAXSIZE];
if(!S.base) {
printf("栈初始化失败,程序退出!\n");
exit(0);
}
S.top=S.base;
S.stacksize=MAXSIZE;
}
int Push(Stack &S,ElemType x) {
if(!S.base) {
printf("栈为空,程序退出!");
exit(0);
}
*S.top++=x;
return 1;
}
int Pop(Stack &S,ElemType &e) {
if(S.top==S.base) {
printf("栈为空,程序退出!");
exit(0);
}
e=*--S.top;
return 1;
}