3.1 栈的顺序存储结构

<?php
header("content-type:text/html;charset=utf-8");
/**
 * 栈的顺序存储结构的基本操作
 *
 *包括
 * 1.顺序栈的初始化 __contruct()
 * 2.销毁栈 destroyStack()
 * 3.清空栈 clearStack()
 * 4.判断栈是否为空 stackEmpty()
 * 5.获取栈顶元素 getTop()
 * 6.进栈操作 push()
 * 7.出栈操作 pop()
 * 8.遍历栈元素 traverse()
 */
class Linear_stack{
    const MAXSIZE = 20;
    private $data;
    private $top;
    //初始化
    public function __construct($data)
    {
        $this->data = $data;
        $this->top = count($data)-1;
    }
    //销毁栈
    public function destroyStack(){
        $this->top = -1;
        $this->data = null;
    }
    //清空栈
    public function clearStack(){
        $this->top = -1;
        $this->data = array();
    }
    //判断栈是否为空
    public function stackEmpty(){
        if($this->top == -1){
            echo "栈为空";
        }else{
            echo "栈非空";
        }
    }
    //获取栈顶元素
    public function getTop(){
        if($this->top!=-1){
            return $this->data[$this->top];
        }else{
            return false;
        }
    }
    //进栈操作:插入元素elem作为新的栈顶
    public function push($elem){
        if($this->top==self::MAXSIZE-1){
            echo "栈已满";
            return false;
        }else{
            $this->top++;
            $this->data[$this->top] = $elem;
        }

    }
    //出栈操作:删除栈顶元素,并用value返回
    public function pop(){
        if($this->top==-1){
            echo "栈已空";
            return false;
        }else{
            $value = $this->data[$this->top];
            unset($this->data[$this->top]);
            $this->top--;
            return $value;
        }
    }
    //遍历栈元素
    public function traverse(){
        $array = array();
        for ($i = 0;$i<=$this->top;$i++){
            array_push($array,$this->data[$i]);
        }
        return $array;
    }

}
?>

下面来实现一下这些功能

<?php
header("content-type:text/html;charset=utf-8");
include ‘linear_stack.class.php‘;
$data = array(1,2,3,4,5,6,7,8,9,10);
$stack = new Linear_stack($data);

echo "进栈元素666:";
echo "</br>";
$stack->push(666);
print_r($stack);
echo "</br>";
echo "</br>";

echo "栈顶元素出栈:";
echo "</br>";
$value = $stack->pop();
echo $value;
echo "</br>";

print_r($stack);
echo "</br>";
echo "</br>";

echo "遍历栈:";
echo "</br>";
$array = $stack->traverse();
print_r($array);
echo "</br>";
echo "</br>";

echo "获取栈顶元素:";
echo "</br>";
$top = $stack->getTop();
echo $top;
echo "</br>";
echo "</br>";

echo "判断栈是否为空:";
echo "</br>";
$stack->stackEmpty();
echo "</br>";
echo "</br>";

echo "清空栈:";
echo "</br>";
$stack->clearStack();
print_r($stack);
echo "</br>";
echo "</br>";

echo "清空栈后,再次判断栈是否为空:";
echo "</br>";
$stack->stackEmpty();
?>

最后的输出结果是:

原文地址:https://www.cnblogs.com/xlzfdddd/p/9819280.html

时间: 2024-08-04 16:43:40

3.1 栈的顺序存储结构的相关文章

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt

栈的顺序存储结构及及其实现

由于栈是线性结构的一种,所以,栈也可以通过顺序存储结构实现. 因为,线性表的顺序存储结构是通过数组实现的,所以,栈的顺序存储结构也通过数组实现.不可避免的,要设置栈的最大存储空间.因为,栈只允许在栈顶进行元素的插入与删除操作,所以需要一个指向栈顶的变量top.那么栈的存储结构: typedef int SElemType; typedef struct{     SElemType data[MAXSIZE];     int top; }SqStack; 接着,就是插入一个新的元素e,也就是进

Java数据结构系列之——栈(1):栈的顺序存储结构及操作

package Stack; /** * 栈的定义:限定只在表末尾进行增加和删除操作的线性表 * 栈的特点:先进后出FILO(First In Last Out) * 通常我们把允许插入和删除的一段称为栈顶(top),另一端 * 称为栈底,不包含任何元素的栈称为空栈 * 栈的出栈操作我们一般称为进栈或者压栈或者入栈 * 栈的删除操作我们一般称为出栈或者弹栈 * * 这里我们用数组来实现栈的顺序存储结构及各种操作 * @author wl * */ public class MyStack { p

数据结构:栈的顺序存储结构及实现

栈的定义和抽象数据类型 栈是限定仅在表尾进行插入和删除操作的线性表.所以说栈也是线性表,栈元素具有线性关系,即前驱后继关系. 其抽象数据类型: ADT 栈(Stack) Data 同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系. Operation InitStack(*S): 初始化操作,建立一个空栈S. DestroyStack(*S): 若栈存在,则销毁它. ClearStack(*S): 将栈清空. StackEmpty(S): 若栈为空,返回true,否则返回false. G

数据结构(六)栈的顺序存储结构

一.栈的定义 1.栈(stack)是限定仅在表尾进行插入和删除操作的线性表. 2.把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈.栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构. 3.栈的插入操作,叫做进栈(push),也称压栈.入栈:栈的删除操作,叫做出栈(pop),也称弹栈. 4.栈的顺序存储结构:既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化.数组下标为0的一端作为栈底,定义一个top

栈(顺序存储结构)

堆栈:具有一定操作约束的线性表,只能在一端作插入.删除 具有后入先出的特性(Last In First Out) 分顺序存储结构.链式存储结构两种形式 堆栈的顺序存储结构 通常由一个一维数组和一个栈顶元素变量组成 图解如下: 形式一:构建结构体 0.结构初始化 #define MaxSize ### struct StackNode { ElementType Data[MaxSize]; int top; }; 1.建立空栈 struct StackNode* createStack() {

栈的顺序存储结构及应用(C、Java代码)

栈的定义: 栈(stack)是限定仅在表尾进行插入和删除的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom) ,不包含任何数据元素的栈称为空栈,栈又称为先进后出的线性表,简称LIFO结构. 栈的插入操作:叫做进栈,或压栈.入栈. 栈的删除操作:叫做,出栈,或者弹栈. 栈的结构定义 1 /*栈的结构定义*/ 2 typedef int sElemType; //sElemType类型定义为int 3 typedef struct { 4 5 sElemType

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

#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<cstdio> #include<cstdlib> #include<cstring> #define MAXSIZE 100 typedef struct{ int data[MAXSIZE]; int top; }SqStack; int Push(SqStack *S,int e){ //压栈操作 if(S->top == MAXSIZE - 1) return 0; S->top++; S->