zoukankan      html  css  js  c++  java
  • 栈stack(1):栈的数组实现

    定义


     

      栈(stack),是一个只允许在表尾端进行删除插入操作的线性表,是一种后进先出(LIFO,last in first out)的数据结构。

      因此,对于栈来说,我们规定进行删除插入操作的表尾端称为栈顶(top),相应地表头端称为栈头(bottom)。不含元素的空表叫做空栈。

      举个例子,有一个桶,我们向其依次放入序号为2 1 3的小球,如果你想拿出2的话就必须拿出3。这个时候我们称3为栈顶元素,1为栈底元素,没有小球的桶被我们称为空栈。

         

      再者,当浏览网页时需要退回到之前的某个网页,我们需要一步步点击后退键,而不能直接回去。并且我们只能对当前网页进行操作

      

     

    实例


      运用栈解决回文字符串的判断。

      我们规定,当一个字符串正读反读均相同的话,我们称之为回文字符串。

      这里栈的实现只需要一个一维数组和一个指向栈顶的变量top即可,我们通过top来对栈进行插入与删除操作。

    算法难点:

      1.初始化栈,top=0即初始化为空栈。

      2.入栈操作是top++,s[top]=x;

      3.由于回文字符串的特殊性,不需要全入栈,定义一个标志变量mid作数据中点,规定数列为n-1,(含,总长为n),若是奇数列,则mid标志为n/2-1,若为偶数列,则mid标志为n/2

      4.定义一个next作为匹配变量,a[i]与s[top]进行比较

      5.由于进栈是top+1,出栈是top-1,所以进栈后top=mid+1,应归位为mid,出栈后为top=top-1,最后top值为-1,所以用if(s[top]==-1)判断出栈是否完毕

    代码


      

    /*************************************************************************
        > File Name:判断回文数(栈实现)
        > Author: Bw98
        > Mail: 786016746@qq.com
        > Blog: www.cnblogs.com/Bw98blogs/
        > Created Time: MON 17th Jul. 2017
     ************************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>  //调用strlen();原型
    int main()
    {
            char a[20],s[20];
            int i,top,len,mid,next;
            printf("input string:");
            gets(a);
            len=strlen(a);
            mid=len/2-1;
            //栈初始化
            top=0;
            //数据输入栈
            for(i=0;i<=mid;i++)
            {
                    s[top++]=a[i];
            }
            //栈顶top归位
            top=mid;
            //匹配下标
            if(len%2!=0)
                    next=mid+2;
            else
                    next=mid+1;
            //判断回文数
            for(i=next;i<len;i++)
            {
                    if(a[i]!=s[top--])
                            break;
            }
            //出栈判断
            if(top==-1)
                    printf("stack all out!
    ");
            else
                    printf("not all out yet.
    ");
        return 0;
    }
    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    UIButton图文上下对齐
    安装cocoapods
    mac忘记密码的解决办法
    css3圆角边框,边框阴影
    input元素的padding border margin的区别
    css font-family 字体全介绍,5b8b4f53 宋体 随笔
    mysql数据库 thinkphp连贯操作where条件的判断不正确的问题
    php获取客户端ip get_client_ip()
    php session小节
    ajax返回值中有回车换行、空格解决方法
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7192807.html
Copyright © 2011-2022 走看看