精华内容
下载资源
问答
  • printf("空\n"); return; } else { s.data[s.top]=x; s.top; } } char chuzhan(node &s) { if(s.top==0) { printf("空\n"); return '0'; } else ...
  • 队列和栈判断回文——实验报告+C语言代码 赫夫曼数——实验报告+C语言代码 双向链表——实验报告+C语言代码 内部排序(8种)——实验报告+C语言代码
  • 判断回文C语言用栈来解决)

    千次阅读 2018-10-21 20:14:19
    #include #include<stdlib.h> #include<string.h&...typedef struct{ //顺序的数据类型 ElemType *base; ElemType *top; int sta
    • 回文:从左读=从右读
    • 用C语言写出栈的功能
    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    using namespace std;
    
    #define MAXSIZE 100
    typedef char ElemType;
    typedef struct{ 	//顺序栈的数据类型
    	ElemType *base;
    	ElemType *top;
    	int stacksize;	
    }Stack;
    
    //初始化栈
    int Init(Stack &S){
    	S.base = new ElemType[MAXSIZE];
    	if(!S.base) exit(-2);
    	S.top = S.base;
    	S.stacksize = MAXSIZE;
    	return 1;
    }
    
    //入栈
    int Push(Stack &S, ElemType x){
    	if(S.top - S.base == S.stacksize){
    		cout<<"栈空间已满!";
    		return 0;
    	}
    	*S.top++ = x;
    	return 1;
    }
    
    //出栈
    int Pop(Stack &S, ElemType &e){
    	if(S.base == S.top){
    		cout<<"栈空!";
    		return 0;
    	}
    	e = *--S.top;
    	return 1;
    }
    
    //获取栈顶元素
    ElemType GetTop(Stack S){
    	if(S.base != S.top){
    		return *(S.top - 1);
    	}
    }
    
    int main(){
    	Stack A;
    	ElemType x[100], e; //数组x的大小给一个比较大的就好,我这里给100
    	int length, n;
    	cout<<"将输入字符串的长度:";
    	cin>>n;
    	
    	cout<<"请输入一串字符串:"<<endl;
    	cin>>x;
    		
    	length = n/2; //需要出栈的长度 
    	Init(A);
    	for(int i = 0; i < n; i++){
    		Push(A, x[i]);
    	}
    	for(int i = 0; i < length; i++){
    		Pop(A, e); 
    		if(e != x[i]){
    			cout<<"不是回文!";
    			return 0;
    		}	
    	}
    	cout<<"是回文!"; 
    	return 0;
    }	
    

    参考资料:
    《数据结构 C语言版 第2版》严蔚敏 李冬梅 吴伟民

    展开全文
  • 首先我们需要确定思路,如何用栈判断字符串是否为回文。 1.栈是先进后出 2.回文是指正读反读均相同的字符序列 从这两点很容易就可以联想到一个方法,我们先将字符串全部存进去栈中,再将它全部出栈,进行对比,...

    首先我们需要确定思路,如何用栈来判断字符串是否为回文。
    1.栈是先进后出
    2.回文是指正读反读均相同的字符序列
    从这两点很容易就可以联想到一个方法,我们先将字符串全部存进去栈中,再将它全部出栈,进行对比,如果完全相同则为回文,这是一个简单并且直接的方法,但是还有没有方法可以优化呢?
    我们可以可以通过回文的性质联想到先将一般的字符串存进去,出栈后再与剩下的一般进行比较,完全相同则为回文,这样的算法比起刚才的效率高了一倍。
    明确了思路就可以开始写算法了

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define StackSize 100 //假定预分配的栈空间最多为100个元素
    typedef char DataType;//假定栈元素的数据类型为字符
    
    typedef struct
    {
    	DataType data[StackSize];
    	int top;
    }SeqStack;
    
    void Init(SeqStack *&s)
    {
        s=(SeqStack *)malloc(sizeof(SeqStack));
        s->top=-1;
    }
    //初始化栈
    void push(SeqStack *s,DataType e)
    {
    	if( s->top == StackSize )
    	{
    		printf("栈满\n");
    	}
    	else
    	{
    		s->top++;
            s->data[s->top]=e;
    	}
    }
    //入栈 
    DataType pop(SeqStack *s)
    {
    	if( s->top == -1 )
    	{
    		printf("栈空\n");
    		return  '\0';
    	}	
    	return (s->data[s->top--]);
    }
    //出栈 
    int main()
    {
    	SeqStack *s;
    	int i=0,length,mid,flag=1;
    	char str[StackSize],y,z;
    	printf("请输入需要判断回文的字符串:\n");
    	gets(str);
    	length = strlen(str);
    	mid = length/2-1;
    //mid为字符串中间字符的下标
    	Init(s);
    	
    	for( i=0; i<length/2; i++)
    	{
    		push(s,str[i]);
    	}
    //入栈	
    	if( length%2 != 0 )
    		mid += 1;
    //判断字符串长度是奇数还是偶数,当为奇数时从中间下一个开始比较 
    	for( i=1; i<=length/2; i++)
    	{
    		if( str[mid+i] == pop(s) )
    		{
    			flag = 1;
    		}
    		else
    		{
    			flag = 0;
    			break;
    		}
    	} 
    	if( flag == 1 )
    		printf("该字符串为回文\n"); 
    	else
    		printf("该字符串不是回文");
    
    	return 0;
    }
    

    因为我们先存进去一半的字符串,但如果字符串长度为奇数,既有一个字符仅仅出现过一次时,我们可以跳过它,与出栈数据与它后边的字符进行比较,当完全相同时,即为回文

    展开全文
  • c语言实现判断字符串是不是回文

    千次阅读 2017-08-22 12:46:11
    用栈判断字符串是不是回文

    #include <stdio.h>
    #include <string.h>

    #define BUFSIZE     100

    typedef struct stack{
        int top;
        char arry[];
    }Stack;

    int main(void)
    {
        char str[BUFSIZE];
        Stack s;
        int mid,i,len;
        int next;

        printf("输入要判断的字符串\n");
        scanf("%s",str);

        len = strlen(str);
        mid = len / 2;
        s.top = 0;//将栈顶设为0
        if(len / 2 == 0){//如果为偶数个元素
            next=mid    ;
            }else{//奇数个元素
                next = mid+1;
                }
    //压栈
        for(i = 0;i < mid;i++){
            s.arry[i] = str[i];
            s.top++;
        }
    //出栈
        while(s.top != 0){
            if(s.arry[s.top-1] ==str[next]){
                s.top--;
                next++;
            }  
            else
                break;
        }
        if(s.top == 0)
            printf("yes\n");
        else
            printf("no\n");
           
        return 0;

    }
     

    展开全文
  • 判断回文(的应用)

    2020-10-11 19:30:10
    下面我们来编写一个程序来判断一个字符串是不是回文,这次我们数据结构中的来实现。下面是c语言代码实现。 #include <stdio.h> #include <stdlib.h> typedef char ElemType; #define STACK_INIT_...

    在生活中我们称正读和反读都相同的字符序列为“回文”,例如,’abba’和’abcba’是回文,’abcde’和’ababab’则不是回文。下面我们来编写一个程序来判断一个字符串是不是回文,这次我们用数据结构中的栈来实现。下面是c语言代码实现。

    #include <stdio.h>
    #include <stdlib.h> 
    typedef char ElemType;
    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT 10
    typedef struct
    {	ElemType *base;  //基指针 
    	ElemType *top;  //栈顶指针 
    	int stacksize; //当前空间 
     }SqStack;
     int InitStack(SqStack &s)  //栈的初始化 
     {
     	s.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
     	if(!s.base) return 0;
     	s.top=s.base;
     	s.stacksize=STACK_INIT_SIZE;
     	return 1;
      } 
    int Push(SqStack &s,ElemType e) //栈的插入 
    {
    	if(s.top-s.base>=s.stacksize)
    	{s.base=(ElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(ElemType));
    	if(!s.base) return 0;
    	s.top=s.base+s.stacksize;
    	s.stacksize+=STACKINCREMENT;
    	 } 
    	*s.top++=e;
    	return 1;
    }
    int Pop(SqStack &s,ElemType &e) //栈的删除 
    {
    	if(s.top==s.base) return 0;
    	e=*--s.top;
    }
    int Sqlength(SqStack s)//求栈的长度 
    { ElemType *p;
      int length=0;
      p=s.base;
      while(p!=s.top)
      { p++;
        length++;
      }
      return length;
    }
    int main()
    { char c;
      int i,flag=1; //flag为标志变量 
      SqStack S;
      InitStack(S);
      printf("输入一个字符串(按@结束):\n");c=getchar();
     do
      { Push(S,c);
        c=getchar();
      }while(c!='@'); //用字符'@'来表示输入结束 
      for(i=0;i<Sqlength(S)/2-1;i++)
      { if((*S.base++)!=(*--S.top)) //如果栈顶指针跟栈底指针不相等 
        flag=0;
      	
      }
    	if(flag==0)
    	printf("不是回文!");
    	else
    	printf("是回文!"); 
    	return 0;
    }
    

    下面是运行结果图
    在这里插入图片描述

    展开全文
  • 判断回文序列 思路

    2020-01-29 20:34:26
    在学c语言数据结构的时候写过一篇文章队列与栈相结合进行...队列与栈判断回文数 现有另一种方式更便捷的去判断 一个回文数对折是重叠的,设该回文数中有n个元素组成 那么第1个元素的值 value(1) = value(n) val...
  • 12321,你是不是你,这样的东西叫回文,由于队列和的存储方式不同,是LIFO,last in first out ,盘子一个一个堆,堆完后从上面开始拿;队列是FIFO,first in first out, 就像现实的排队。将数字存进这两种结构中...
  • 队列判断回文数需要一个作为中间量,把一串数字分别进栈和入队,按照先进后出和队列先进先出的原则,如果栈顶元素跟队头元素相等,则栈顶元素出栈同时队头元素出队,接着往下比较,知道必到该串数字的长度的...
  • 【啊哈!算法】系列文章目录 目录【啊哈!算法】系列文章目录需求介绍思路分析C语言代码C++ STL 库中的Stacks1. 整体应用2. C++ 解决需求 需求介绍   判断一个字符串是否为回文
  • c语言经典案例

    2014-10-30 08:06:57
    实例211 用栈及递归计算多项式 313 实例212 链队列 315 实例213 循环缓冲区问题 318 实例214 简单的文本编辑器 321 第13章 位运算操作符 326 实例215 使二进制数特定位翻转 327 实例216 将输入的数左移两位并输出 ...
  • C语言学习实例220例

    2015-06-16 23:47:59
    019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 ...
  • C语言常用算法

    2012-03-28 10:48:37
    070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 ...
  • C语言实例解析精粹 PDF

    热门讨论 2010-08-17 00:20:25
    实例19 判断回文数 实例20 求数组前n个元素之和 实例21 求解钢材切割的最佳订单 实例22 通过指针比较整数大小 实例23 指向数组的指针 实例24 寻找指定元素的指针 实例25 寻找相同元素的指针 实例26 阿拉伯数字转换为...
  • (21)教材第12章编程题第2题:编写函数读入用户输入的一条消息,检测是否是回文,分别数组、指针来解决。 说明:本题可以体会到数组与指针的特点,利用指针的便利。 (22)利用指针编写程序,实现从键盘键入字符...
  • 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 ...
  • C语言实例解析精粹

    2014-03-14 21:57:05
    070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 ...
  • 5.6 判断回文数字 5.7 填数字游戏求解 5.8 新郎和新娘 5.9 爱因斯坦的阶梯问题 5.10 寻找水仙花数 5.11 猴子吃桃问题 5.12 兔子产仔问题 5.13 分解质因数 5.14 常胜将军 5.15 求兀的近似值 5.16 魔幻方阵 5.17 移...
  • 函数习题:函数实现判断一个整数是否能被n整除 68%(469/690) 34% 2020-4-23 1087 1091 结构体习题:通过学生学号查询学生 结构体习题:通过职工信息输出高于平均工资的职工信息及高于平均工资的职工人数
  • 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 ...
  • 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 ...
  • 实例19 判断回文数 实例20 求数组前n个元素之和 实例21 求解钢材切割的最佳订单 实例22 通过指针比较整数大小 实例23 指向数组的指针 实例24 寻找指定元素的指针 实例25 寻找相同元素的指针 实例26 阿拉伯...
  • C语言源代码实例.rar

    2009-08-27 20:17:58
    070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 ...
  • C语言实例解析精粹源代码

    热门讨论 2009-09-20 03:39:01
    070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 ...
  • 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒...
  • 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 ...
  • 使用栈判断回文串中知识小点 else if ( *(array + index) != *(array + arraySize - 1 - index) ) array 是字符串数组这里指针形式, index是每次判断时增加的量 可以看到指针可以直接增加int形式的量,代表下一个...
  •  实例70 用栈设置密码   实例71 魔王语言翻译   实例72 火车车厢重排   实例73 队列实例   实例74 k阶斐波那契序列  第三部分 数值计算与趣味数学篇  实例75 绘制余弦曲线和直线的叠加  ...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

c语言用栈判断回文

c语言 订阅