[数据结构]之栈

[数据结构]之栈
##1 描述
栈:后进先出的数据结构。栈是封底的,只能从一个方向写入读出。栈的实现有两种,基于顺序表方式和基于链表方式。栈的场景:比如浏览器的返回场景。顺序表实现:1)在顺序表的基础上创建栈。2)使用arr[0]作为栈底,arr[MAXSIZE]为栈顶。Top当栈顶元素位置标志,从0-MAXSIZE之间。3)局限:分配的空间固定。链表实现:1)链表的基础上创建栈。2)使用末尾节点作为栈底,头节点为栈顶。Top为栈顶元素位置标志。##2 数据结构
*	顺序表实现:1)属性元素数组	elemets 栈顶元素位置	top元素个数	length(值为top+1)2)操作
NewStack	初始化,建立空栈Push		压栈Pop 		出栈*	链表实现
1 属性栈顶节点 	top元素个数	length2 操作
NewStack	初始化,建立空栈Push		压栈Pop 		出栈##3 go语言实现1 顺序表实现:package mainimport ("fmt")const CAP = 20type Stack struct {elements [CAP]stringtop      int `栈顶位置`length   int `元素个数`}func NewStack() *Stack {return &Stack{top: -1, length: 0}}/** 压栈*/func (list *Stack) Push(elem string) error {if list.top == CAP-1 {return fmt.Errorf("the list is full")}//插入到栈顶元素上list.top++list.length++list.elements[list.top] = elemreturn nil}/**	出栈*/func (list *Stack) Pop() (string, error) {if list.top == -1 {return "", fmt.Errorf("the list is empty")}//获取需要出栈的元素elem := list.elements[list.top]list.top--list.length--return elem, nil}func main() {list := NewStack()list.Push("AAAAA")list.Push("BBBBB")list.Push("CCCCC")list.Push("DDDDD")for list.length > 0 {elem, _ := list.Pop()fmt.Println("elem:", elem)}}2 链表实现package mainimport ("fmt")/**	定义节点*/type Node struct {Data stringNext *Node}/**	定义栈*/type Stack struct {Top    *NodeLength int}func NewStack() *Stack {return &Stack{Top: nil, Length: 0}}/** 压栈*/func (list *Stack) Push(data string) error {node := &Node{Data: data, Next: list.Top}list.Top = nodelist.Length++return nil}/**	出栈*/func (list *Stack) Pop() (string, error) {if list.Length == 0 {return "", fmt.Errorf("the list is empty")}node := list.Toplist.Top = node.Nextlist.Length--return node.Data, nil}func main() {list := NewStack()list.Push("AAAAA")list.Push("BBBBB")list.Push("CCCCC")list.Push("DDDDD")list.Push("EEEEE")for list.Length > 0 {elem, _ := list.Pop()fmt.Println("elem:", elem)}}

转载于:https://www.cnblogs.com/sxt102400/archive/2013/04/17/3026678.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口(定义,使用方法)

/* 接口: 1.定义:当一个抽象类,里面全是抽象方法时,叫做接口 2.定义方式:interface 3.成员变量定义方式:public static final 数据类型 变量名 值;------变成常量public abstract 返回值类型 方…

内部类的使用方法

/* 内部类: 1.内部类定义 2.内部类的三种格式: 1.内部类是非静态修饰,内部类方法是非静态修饰 外部类名.内部类名 变量名 new 外部类对象. new 内部类对象(); 变量名.内部类方法()…

TFS集群数据对比

TFS没有采用目前流行的3副本策略,而是使用集群内配置2个副本,并把数据同步到一个辅集群,辅集群同样配置2个副本;这种方式对于实现异地机房容灾很方便,辅集群的数据同步是由主集群的数据服务器在后台发起的;…

匿名类接口对象

interface MyInter1{public abstract void show();public abstract void show1(); } class OUter{public void outer(){//接口引用指向自己的实现类对象,多态调用MyInter1 M new MyInter1(){public void show(){System.out.println("匿名类对象show");}p…

Sesame 2.7.0 发布,Java 的 RDF 开发包

Sesame 2.7.0 开始使用 Maven Central,要求至少 Java 6 支持,SailConnection.begin() 指示事务开始,新的 Model 接口扩展了 Graph,OpenRDF Workbench 支持基本的 HTTP AUTHN,查询结果分页和保存查询结果,支…

(JAVA)Object类之toString()和equals()

Object类:存储于java.lang包中,有构造方法,无super 一.toString():返回该对象的字符串表示-----String类型,输出类型中,默认调用toString()1.public String toString() {return getClass().getName() "" I…

“四方定理”--蓝桥杯

欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1366349160.html 题目描述 标题:四方定理 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。 我们可以通过…

(JAVA)Object类之Scanner

/* Scanner类&#xff1a;使用正则表达式解析基本类型和字符串的简单文本扫描器 一.源代码&#xff1a;public final class Scanner implements Iterator<String>, Closeable {...}1.不允许继承2.使用时必须导入包 import java.util.Scanner&#xff1b; jdk1.5以上版本才…

序列化 小复习

想要序列化一个对象则需要使其继承serializable或者externalizable接口 一下是一个实例小程序&#xff1a; ser_test 1 import java.io.*;2 3 public class ser_test{4 public static void main(String[] args) throws Exception{5 person p1 new person(1,1.2,&q…

windows设备坐标和逻辑坐标的转换

设备坐标通俗的讲就是我们看到的我们的视图坐标&#xff0c;它包含屏幕坐标、窗体坐标和客户区坐标&#xff0c;他们都是以窗体的左上角为准的坐标&#xff0c;并且是从左到右&#xff0c;从上到下的坐标 简单总结一下他的特点&#xff1a;x坐标是从左到右&#xff0c;y坐标是从…

(JAVA)Object类之String类

/* 字符串&#xff1a; 一、概述&#xff1a;1.字符串在JAVA中&#xff0c;使用""表示2.java.lang.String类3.只要写""就是字符串对象。不需要new二、空参构造器new Sting();private final char value[];public String() {this.value "".value;…

HADOOP__PIG安装与配置

PIG安装与配置 前提 已成功安装好Hadoop集群。 详见&#xff1a;http://www.cnblogs.com/freeideas/archive/2013/04/16/3023287.html 以下只在一个结点做&#xff0c;PIG可以直接调用整个集群。此处我选择了独立于其他节点的Server(CentOS)节点。 安装要求&#xff1a; Server…

(JAVA)String类之比较方法

/* 字符串&#xff1a; 一、概述&#xff1a;1.字符串在JAVA中&#xff0c;使用""表示2.java.lang.String类3.只要写""就是字符串对象。不需要new二、空参构造器new Sting();private final char value[];public String() {this.value "".value;…