判断串是否中心对称
- 格式:doc
- 大小:33.50 KB
- 文档页数:4
设单链表中存放n个字符,试设计一个算法,使用栈判断该字符串是否中心对称,如xyzzyx即为中心对称字符串。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define Null 0
#define MaxSize 50
typedef char SElemType;
typedef int ElemType;
typedef int Status;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitStack(SqStack &S){
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status InitList_L(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L->next=Null;
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e){
ElemType j=0;
LinkList p=L,s;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status DispList_L(LinkList &L){
LinkList p=L->next;
while(p){
printf("%c ",p->data);
p=p->next;
}
return OK;
}
Status ListLength_L(LinkList L){
LinkList p=L->next;
ElemType i=0;
while(p){
p=p->next;
i++;
}
return(i);
}
Status ListGetElem_L(LinkList &L,int i,ElemType &e){
LinkList p;
ElemType j=1;
p=L->next;
while(p&&j<i){
p=p->next;++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}
Status Push(SqStack &S,SElemType e1){
if(S.top-S.base>=S.stacksize){
S.base=(SElemType *)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e1;
return OK;
}
Status Pop(SqStack &S,SElemType &e1){ if(S.top==S.base)return ERROR;
e1=*--S.top;
return OK;
}
Status StackEmpty(SqStack S){
if(S.top==S.base)return TRUE;
else return FALSE;
}
int main(){
LinkList L,P;
int flag=0;
int i=1;
int j=1;
char t;
ElemType e;
SqStack S;
SElemType e1;
InitList_L(L);
ListInsert_L(L,1,'a');
ListInsert_L(L,2,'b');
ListInsert_L(L,3,'c');
ListInsert_L(L,4,'b');
ListInsert_L(L,5,'a');
printf("表为: ");
DispList_L(L);
InitStack(S);
while(i<=ListLength_L(L)){
ListGetElem_L(L,i,e);
Push(S,e);
i++;
}
printf("\n");
printf("判断是否中心对称:");
while(j<=ListLength_L(L)){
ListGetElem_L(L,j,e);
Pop(S,e1);
if(e1==e);
else {
flag=1;
break;
}
j++;
}
if(flag==1)printf("不对称\n");
else printf("对称\n") ;
}。