• 栈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;
    }
    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    Windows使用SCHTASKS 命令执行定时任务
    window10设置定时任务
    uiautomator2+python自动化测试1-环境准备
    uiautomator2+python自动化测试2-查看app页面元素利器weditor
    APPIUM 自带的webdriveragent
    使用 mitmproxy + python 做拦截代理
    mitmproxy 实战
    深入学习mitmproxy
    将博客搬至CSDN
    CS231N Assignment5 图像分类练习
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7192807.html
Copyright © 2020-2023  润新知