数据结构与算法-栈

一、数据结构和算法概述

 

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 机制。
数据结构就是把数据组织起来,为了更方便地使用数据我们为了解决问题,需要将数据保存下来,然后根据数据的存储方式来设计算法实现进行处理,那么数据的存储方式不同就会导致需要不同的算法进行处理。
程序 = 数据结构 + 算法

线性结构和非线性结构

线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系

线性结构有两种不同的存储结构,即顺序存储结构(数组)链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。
链式存储的线性表称为链表,链表中的存储元素不一定是连续的
线性结构常见的有:数组、队列、链表和栈
非线性结构
二维数组,多维数组,广义表,树结构,图结构。

二、栈

栈是限制插入和删除只能在一个位置上进行的线性表

栈顶允许插入和删除的一端位于表的末端,不允许插入和删除的一端为栈底。操作有push(压栈)和pop(出栈)

使用数组来模拟栈的使用

public class ArrayStack {
 /**
 栈的大小
 */
 private int maxStack;
 /**
 数组用来模拟栈
 */
 private int[] stack;
 /**
 * 表示栈顶,默认值为-1
 */
 private int top = -1;
 /**
 *
 * @param maxStack 初始化栈的大小
 */
 public ArrayStack(int maxStack){
 this.maxStack = maxStack;
 this.stack = new int[this.maxStack];
 }
 /**
 * 判断是否已经栈满
* @return
 */
 public boolean isFull(){
 return this.top==maxStack-1;
 }
 /**
 * 是否空栈
 */
 public boolean isEmpty(){
 return this.top==-1;
 }
 /**
 * 入栈
 */
 public void push(int value){
 if (isFull()){
 throw new RuntimeException("栈已满...");
 }
 top++;
 stack[top] = value;
 }
 /**
 *出栈
 */
 public int pop(){
 if (isEmpty()){
 throw new RuntimeException("空栈,没有数据");
 }
 int value = stack[top];
 top--;
 return value;
 }
 /**
 * 查看栈中数据
 */
 public void list(){
 if (isEmpty()){
 throw new RuntimeException("空栈,没有数据");
 }
 for (int i=0;i<stack.length;i++){
 System.out.printf("stack[%d]=%d\n",i,stack[i]);
 }
 }
 //栈中元素存在的个数
 public int length(){
   return this.top+1;
 }
}

 回文数据,使用栈可以轻松判断字符串是否是回文数据

public static boolean detection(String words){
//初始化栈对象
 ArrayStack arrayStack = new ArrayStack(10);
//获取字符串长度
 int length = words.length();
//拿去字符串中的每个字符,压栈至数组中
 for (int i=0;i<length;i++){
     arrayStack.push(words.charAt(i));
 }
 String newValue = "";
//随着每次pop,length的长度是会改变的,所以要把length的值固定
//for (int i=0;i<arrayStack.length();i++)
int length1=arrayStack.length()
//for (int i=0;i<length1;i++)
{
//判断是否是空栈
if (!arrayStack.isEmpty())
{
 char value =(char) arrayStack.pop();
//拼接
 newValue = newValue+value;
 }
 }
//弹栈出来的数据和压栈出去的数据比较
 if (words.equals(newValue)){
 return true;
 }
 return false;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值