• [数据结构]之栈


    [数据结构]之栈
    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

    元素个数 length


    2 操作
    NewStack 初始化,建立空栈

    Push 压栈

    Pop 出栈


    3 go语言实现

    1 顺序表实现:

    package main

    import (
    "fmt"
    )

    const CAP = 20

    type Stack struct {
    elements [CAP]string
    top 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] = elem
    return 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 链表实现

  • 相关阅读:
    离散数学--第十章 群,环,域
    离散数学--十一章 格与布尔代数
    matplotlib 基础|笔记
    CF Round #632 div2
    Codeforces Round#630 div2
    PVZ 2--攻略合集?
    【POJ
    【POJ
    【Aizu
    【Aizu
  • 原文地址:https://www.cnblogs.com/sxt102400/p/3234247.html
Copyright © 2020-2023  润新知