数据结构作业,简单的压栈。接着把出栈元素与字符串元素依次对比,相同则为回文字符串,否则不是。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char data;
struct Node* pNext;
}NODE,*PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
void init(PSTACK);
void push(PSTACK pS,int val);
bool pop(PSTACK pS,int *pVal);
void init(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pS->pTop)
{
printf("内存分配错误\n");
exit(-1);
}
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;
}
}
void push(PSTACK pS,char ch)
{
PNODE pNew = (PNODE)malloc(sizeof(Node));
pNew->data = ch;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
}
char pop(PSTACK pS,char *ch)
{
if(pS->pTop == pS->pBottom)
{
printf("没有元素\n");
return 0;
}
else
{
PNODE r = pS->pTop;
*ch = r->data;
pS->pTop = r->pNext;
free(r);
r = NULL;
return *ch;
}
}
int main(void)
{
STACK s;
init(&s);
char str[30];
char temp;
int flag = 1;
printf("输入字符串\n");
scanf("%s",str);
int length = strlen(str);
for(int i=0; i<length; ++i)
{
push(&s,str[i]);
}
for(int j=0; j<length; j++)
{
if(pop(&s,&temp)!=str[j])
{
flag = 0;
break;
}
}
if(flag)
printf("是回文字符串\n");
else
printf("不是回文字符串\n");
return 0;
}