大话数据结构(九)——栈

1、栈的定义

栈(stack)是限定仅在表尾进行插入和删除操作的线性表。

允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈,栈又称后进先出(Last In First Out)的线性表,简称LIFO结构。

注意:

1)栈是个线性表,栈元素具有线性关系,即前驱后继的关系。

2)它是一种特殊的线性表,只在表尾进行插入和删除,表尾指的是栈顶。

3)栈底是固定的,最先进栈的只能在栈底。

2、栈的操作

栈的插入操作,叫做进栈,也称压栈,入栈。

栈的删除操作,也做出栈,也叫弹栈。

3、栈的顺序存储结构及实现

栈的顺序存储结构一般用数组实现,下标为0的一端为栈底比较好,因为首元素都存在栈底,变化最小。所以让它作为栈底。

当栈存一个元素,top==0,因此通常把空栈的判定条件定为top=-1.

4、栈的顺序结构中进栈操作及出栈操作代码如下

public class Stack<E> {
   private ArrayList<E> list = new ArrayList<E>();
   private int size;
   /*
    * 进栈操作
    */
   public void push(E e){
       list.add(e);
       size++;
   }
   /*
    * 出站操作
    */
   public E pop(){
       E e = list.get(size-1);
       size--;
       return e;
   }
   public static void main(String args[]){
       Stack<Object> stack = new Stack<Object>();
       stack.push("lllll");
       stack.push("222222");
       for(int i=0;i<=stack.size;i++){
           System.out.println(stack.pop());
       }
       }
}

5、栈的链式存储结构实现

package com.aclie.dataStructe4.stack;

public class LinkStack {

	Node1 top;//栈顶
	Node1 cur;//栈顶后面一个结点
	int count;
	public void add(Object obj){
		if(top == null){//空栈
		top = new Node1(obj);//栈顶为新结点
		top.next1 = cur;//修改栈顶的后继
		count++;
		}else{
			Node1 s =new Node1(obj);//要插入的新结点
			s.next1 = top;//插入的结点的后继
			cur = s.next1;//修改栈顶的后继
			top = s;//栈顶结点
			count++;
		}
	}
	public void delete(Object obj){
		if(top == null){
			System.out.println("无删除 的结点,此表为控栈");
		}
		if(count == 1){
			top = null;
			System.out.println("现在为空栈");
			count--;
		}
		if(count>=2){
			top = cur;
			cur = cur.next1;
			count--;
		}
	}
	public void print(Node1 node1){
		if(node1 == null){
			System.out.println("没有可打印的元素");
		}else{
			Node1 cur1 = node1;
			while(cur1 != null){
				System.out.println(cur1.data1);
				cur1 = cur1.next1;
			}
		}
	}
	public static void main(String args[]){
		LinkStack seqStack = new LinkStack();
		seqStack.add("oooooo");
		seqStack.print(seqStack.top);
		seqStack.add("wwwww");
		seqStack.add("eeeeee");
		seqStack.delete(seqStack.top);
		seqStack.print(seqStack.top);
		}

}
class Node1{
	Object data1;
	Node1 next1;
	public Node1(Object d1){
		this.data1 = d1;

	}
}

  

时间: 2024-11-09 06:31:06

大话数据结构(九)——栈的相关文章

大话数据结构——使用栈实现简单的四则运算

最近在读<大话数据结构>,里面有个例子是使用栈实现四则运算,现在我用java把这个功能实现试试 代码如下: package com.datastruct; import java.util.ArrayList; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StackPractice { private static ArrayList&l

大话数据结构之栈的链式存储结构

#include<iostream> //#include<time.h> //#include <stdlib.h> using namespace std; #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 typedef int status;//返回的状态值 typedef int elemtype;//节点里数据的类型 //每一个节点的数据结构 typedef struct stacknod

大话数据结构之栈的顺序存储结构

#include<iostream> //#include<time.h> //#include <stdlib.h> using namespace std; #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define MAXSIZE 100//数组的最大大小 typedef int status;//返回的状态值 typedef int elemtype;//节点里数据的类型 typedef

大话数据结构之栈的链的应用--递归值菲涅数列

#include<iostream> using namespace std; #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 typedef int status;//返回的状态值 //波斐数列,某项的值为它的前两项的和 int fbi(int n) { if(n<2) { if(n==0) return 0; else return 1; } return fbi(n-1)+fbi(n-2); } int mai

(源代码见大话数据结构)栈的顺序存储结构——进栈&amp;出栈

#include <stdio.h>#include <time.h>#include <stdlib.h>#define MAXSIZE 1000#define OK 1#define ERROR 0#define TRUE 1#define FALS 0typedef int SElemType;typedef int Status;typedef struct{    SElemType data[MAXSIZE];    int top;}SqStack;Sta

9、蛤蟆的数据结构笔记之九栈的应用之行编辑实现

9.蛤蟆的数据结构笔记之九栈的应用之行编辑实现 本篇名言:"人生照例是一场值得一搏的争衡,然而它的奖品是拼斗." 继续栈结构的应用,行编辑. 欢迎转载,转载请标明出处: 1.  行编辑 行编辑的功能是接受用户从终端输入的程序或数据.每接受一个字符即存入用户数据区的做法不是最恰当的.好的做法是建立一个缓存区,允许洪湖输入出错,并在发现有无时可以及时更正.用栈来实现这个输入缓冲区是非常适合的. 每当从终端接受了一个字符后先作判别,如果不是退格符也不是退行符,则将该字符压入栈顶:如果是退格符

链栈--(大话数据结构97页)

//链栈的实现 --大话数据结构99页 #include <iostream> using namespace std; //链节点定义 typedef struct stacknode { int data; struct stacknode * next; }StackNode, *LinkStackptr; //定义链栈,头指针 和 长度 struct LinkStack{ LinkStackptr top; int count; }; //初始化void InitStack(LinkS

【Java】 大话数据结构(6) 线性表之栈

本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所示.   1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针).一个长度为5的栈的示意图如下: 实现程序: /** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * @author Yongh * */ public class SqStac

数据结构之栈与队列

数据结构的有一个重要结构栈,栈这种数据结构就是满足先进后出的这种规则的数据结构就是栈,引用<大话数据结构>中的一个形象例子就是,子弹的弹夹,最先压入弹夹的子弹最后一个出弹夹,正好往一个栈里添加一个元素叫压栈.入栈,从栈里出来一个元素叫弹栈,出栈.指示器就叫栈帧. 栈图 现在就贴上代码: 栈的几个基本操作: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node{

图的基础算法(大话数据结构笔记)

概述 线性表的每个元素有线性关系,每个数据元素只有一个直接前去和一个直接后继.树的数据元素之间有着明细那的层次关系,并且每层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关.这和一对父母可以有很多孩子,但每个孩子却只能有一对父母是一个道理.可现实中,人与人之间关系复杂,不是简单一对一,一对多的关系.这种复杂关系更适合用图来表示.在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关.如下图所示:无向边:Edge (vi,vj)有向边:也叫弧,Arc. <v