栈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,(含\0,总长为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[],s[];
int i,top,len,mid,next;
printf("input string:");
gets(a);
len=strlen(a);
mid=len/-;
//栈初始化
top=;
//数据输入栈
for(i=;i<=mid;i++)
{
s[top++]=a[i];
}
//栈顶top归位
top=mid;
//匹配下标
if(len%!=)
next=mid+;
else
next=mid+;
//判断回文数
for(i=next;i<len;i++)
{
if(a[i]!=s[top--])
break;
}
//出栈判断
if(top==-)
printf("stack all out!\n");
else
printf("not all out yet.\n");
return ;
}
栈stack(1):栈的数组实现的更多相关文章
- BSS段 data段 text段 堆heap 和 栈stack
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数 ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 数据结构笔记--栈的总结及java数组实现简单栈结构
杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...
- 堆heap和栈Stack(百科)
堆heap和栈Stack 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈 ...
- 堆(heap)和栈(stack)的区别
转: 一.预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中 ...
- Java再学习——栈(stack)和堆(heap)
一.内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们 ...
- lintcode 中等题:Min stack 最小栈
题目 带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 解题 可以定义 ...
- 转:堆(heap)和栈(stack)有什么区别??
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 预备知识—程序的 ...
随机推荐
- java多线程系列(九)---ArrayBlockingQueue源码分析
java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 j ...
- NuGet的使用、部署、搭建私有服务
NuGet的使用.部署.搭建私有服务 前言 什么是NuGet? 为什么要使用NuGet NuGet的优点 使用 Get-Help NuGet Install-Package Get-Package U ...
- sharePreference
源码分析请看:http://blog.csdn.net/yanbober/article/details/47866369 一. SharePreferences是用来存储一些简单配置信息的一种机制 ...
- web离线应用--dom storage
web离线应用--dom storage dom storage是html5添加的新功能,其实也不是什么新的应用,只不过是cookie的放大版本,由于cookie的大小只有4kb,而且在每次请求一个新 ...
- Python之登录接口
要求 1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 思路 没有数据库,这里使用本地文件,一共需要两个文件: 黑名单的文件:黑名单里检测,不让登录 用户信息文件:将 ...
- 2712:细菌繁殖-poj
2712:细菌繁殖 总时间限制: 1000ms 内存限制: 65536kB 描述 一种细菌的繁殖速度是每天成倍增长.例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,… ...
- Java 将两个有序数组合成为一个有序数组
基本思路 1.如果其中一个数组的元素均大于另一个数组的元素,则可以直接组合,不用拆分. 即:其中一个数组的第一个元素大于或者小于另一个数组的最后一个元素 2.若不满足1中的情况,则表明数组需要拆分,拆 ...
- 浏览器输入URL加载的全过程都发生了什么事情,你知道?
什么是URL: 统一资源定位符(URL,英文 Uniform / Universal Reaource Locator 的缩写) 标准的URL由服务类型(协议).存放资源的主机域名(可以是域名或者ip ...
- shell,bash,zsh,console,terminal到底是什么意思,它们之间又是什么关系?
原文链接 终端(terminal,或者叫物理终端):是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端.虚拟终端:屏幕和键盘只是一个终端,可能不 ...
- 将后面的m个数移到前面
#include<iostream> #include<algorithm> #include<stdio.h> #include<numeric> u ...