赞
踩
回文:
指正读反读均相同的字符序列,如“abba”、“abdba”、12321均是回文
解题思路:
基于栈的先进后出,后进先出的特点,可以用一个字符指针保存原来的字符串,再让待测字符串进栈,再出栈,将指针与字符串比较
代码实现:(C)
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #define MAXSIZE 100
- typedef struct Node {
- char *base;//指向栈底
- char *top;//指向栈顶
- int size;
- //size = 99;
- }*stack;
-
- stack init(){//栈的初始化
- //int n;
- stack s = (stack)malloc(sizeof(stack));
- s->base = (char*)malloc(sizeof(char)*MAXSIZE);
- if(!s->base)
- return NULL;
- //scanf("%d",&n);
- s->size = MAXSIZE;
- printf("初始化成功\n");
- s->top = s->base;
- s->size = MAXSIZE;
- return s;
- }
-
- int full_stack(stack s){//判断是否栈空
- if(s->top - s->base == MAXSIZE)
- return 1;
- else
- return 0;
- }
-
- int empty_stack(stack s){
- if(s->top == s->base)
- return 1;
- else
- return 0;
- }
-
- void push_stack(stack s,char n){//压栈
-
- if(full_stack(s) == 1){
- printf("已经栈满,无法添加!\n");
- return;
- }
- else {
- *(s->top++) = n;
- //printf("入栈成功\n");
- }
- }
-
- void pop_stack(stack s,char &e){//c++中,传入参数为&+变量名,会使传入参数的值永久改变
- if(empty_stack(s) == 1){
- printf("已经栈空!\n");
- return ;
- }
- else{
- e = *(--s->top);
- }
- }
-
- void getTop(stack s,char*e){
- if(empty_stack(s) == 1){
- printf("已经栈空!\n");
- return ;
- }
- *e = *s->top;
- }
-
-
-
-
- //具体思路:让待判断的数依次入栈再出栈,判断前后是否一致
- int main(){
- char fir[MAXSIZE];
- char *p1,*p;
-
- printf("请输入数据\n");
- //scanf("%s",p1);
- gets(fir);
- int len = strlen(fir);
- p1 = (char*)malloc(sizeof(char)*len);
- strcpy(p1,fir);
-
- len = strlen(p1);
-
- stack s = init();
- //printf("pause\n");
-
- int i;
-
- for(i=0;i<len;i++)
- {
-
- push_stack(s,fir[i]);
- p = s->top;
- printf("%c\n",*--p);
- }
-
- char temp;
- for(i=0;i<len;i++){
- pop_stack(s,temp);
- fir[i] = temp;
- printf("%c\n",fir[i]);
- }
- int bol = strcmp(p1,fir);
- if(bol == 0)
- printf("是回文\n");
- else
- printf("不是回文\n");
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。