顺序栈

北有孤鹜 北有孤鹜     2022-09-23     664

关键词:

/*
  Name: 顺序栈的实现
  Copyright:
  Author:
  Date:
  Description:
*/

#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED

#include "ds.h" //for Status,OK ...

#ifndef ElemType
#define ElemType int /* 数据元素类型默认为 int */
#define ELEMTYPE_TAG
#endif

#define SElemType ElemType

///////////////////////////////////////////////////////////
//顺序栈的存储结构定义
#define STACK_INIT_SIZE 100 /* 存储空间初始分配容量 */
#define STACKINCREMENT 10 /* 存储空间分配的增量 */
typedef struct {
    ElemType *base; //在构造栈之前和销毁栈之后,base为NULL
    ElemType *top; //栈顶指针
    int stacksize; //当前已分配的存储空间(元素个数)
} SqStack;

///////////////////////////////////////////////////////////
//顺序栈的基本操作声明

//构造一个空栈S
Status InitStack(SqStack &S);
//销毁栈S
Status DestroyStack(SqStack &S);
//将栈S清空
Status ClearStack(SqStack &S);
//若栈S为空返回TRUE,否则FALSE
Status StackEmpty(SqStack S);
//返回栈S中的元素个数
int    StackLength(SqStack S);
//用e返回栈顶元素
//    前提:栈S存在且不空
Status GetTop(SqStack S, ElemType &e);
//元素e入栈S
Status Push(SqStack &S, ElemType e);
//S出栈用e返回出栈元素
//    前提:栈S存在且不空
Status Pop(SqStack &S, ElemType &e);

///////////////////////////////////////////////////////////
//顺序栈的基本操作的实现

//构造一个空栈S
Status InitStack(SqStack &S)
{    S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
      if(!S.base) return ERROR;
      S.stacksize=STACK_INIT_SIZE;
      S.top=S.base;
      return OK;
    // TODO (#1#): 构造一个空栈S
    //-------------------------------------
}

//销毁栈S
Status DestroyStack(SqStack &S)
{
    // TODO (#1#):销毁栈S,相当于清空栈
    return ERROR;
    //-------------------------------------
}

//将栈S清空
Status ClearStack(SqStack &S)
{    S.top=S.base;
    // TODO (#1#): 将栈S清空,释放所有结点
    return OK;
    //-------------------------------------
}

//若栈S为空返回TRUE,否则FALSE
Status StackEmpty(SqStack S)
{   if(S.base==S.top) return true;
       else return false;
    // TODO (#1#): 若栈S为空返回TRUE,否则FALSE
}

//返回栈S中的元素个数
int    StackLength(SqStack S)
{    int i=0;
while(S.top!=S.base) {
     S.top--;
     i++;
}
    return i;
    // TODO (#1#): 返回栈S中的元素个数
    //-------------------------------------
}

//用e返回栈顶元素
//    前提:栈S存在且不空
Status GetTop(SqStack S, ElemType &e)
{    if(!S.base&&S.base==S.top) return ERROR;
        else e=*(S.top-1);
        return OK;
    // TODO (#1#):若栈S不空,则用e返回栈顶元素
    //-------------------------------------
}

//元素e入栈S
Status Push(SqStack &S, ElemType e)
{  if(S.top-S.base>=S.stacksize)
    // S.base=(SElemType) realloc(S.base,(STACKINCREMENT+S.stacksize)*sizeof(SElemType));默认不满
    return ERROR;
     *(S.top++)=e;
     return OK;
   // TODO (#1#): 插入元素e作为新的栈顶

    //-------------------------------------
}

//S出栈用e返回出栈元素
//    前提:栈S存在且不空
Status Pop(SqStack &S, ElemType &e)
{   if(S.base==S.top)    return ERROR;
     e=*(S.top-1);
     S.top--;
     return OK;
    // TODO (#1#):若栈S不空,则删除栈顶元素用e返回
    //-------------------------------------
}


#ifdef ELEMTYPE_TAG
#undef ElemType
#undef ELEMTYPE_TAG
#endif

#endif


数据结构与算法栈与队列c语言版(代码片段)

...3.2栈、队列与一般线性表的区别3.3栈的表示和操作的实现顺序栈与顺序表=================顺序栈的表示顺序栈初始化判断顺序栈是否为空求顺序栈的长度清空顺序栈销毁顺序栈顺... 查看详情

数据结构学习笔记——顺序存储结构实现栈(代码片段)

目录一、栈的相关知识二、顺序栈的定义三、顺序栈的初始化四、判断顺序栈是否为空栈五、判断顺序栈是否为满栈六、进栈(插入操作)七、出栈(删除操作)八、读取顺序栈顶元素九、顺序栈的建立一个简单... 查看详情

数据结构第七章:链栈顺序栈

   查看详情

java实现栈(顺序栈,链栈)(代码片段)

顺序栈:packageSeqStack;publicclassStackprivateinttop;privateintbase[];privateintstackSize;publicStack()stackSize=100;base=newint[stackSize];top=-1;publicStack(intn)stackSize=n; 查看详情

顺序栈

...先出的线性表。由于栈本身是一个线性表,所以线性表的顺序存储结构和链式存储结构对于栈来说,同样是适用的。2.栈的顺序存储结构栈的顺序存储结构又称为顺序栈,线性表是用数组来实现的,而栈也是线性表,所以我们使... 查看详情

顺序栈

/* Name:顺序栈的实现 Copyright: Author: Date: Description:*/#ifndefSTACK_H_INCLUDED#defineSTACK_H_INCLUDED#include"ds.h"//forStatus,OK...#ifndefElemType#defineElemTypeint/*数据元素类型默认为 查看详情

数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)(代码片段)

...列(三)共享栈(四)栈的常见应用二、顺序栈的定义三、顺序栈的初始化四、判断顺序栈是否为空栈五、判断顺序栈是否为满栈六、进栈(插入操作)七、出栈(删除操作)八、读取顺序栈顶元... 查看详情

顺序栈-使用顺序栈实现十进制转换二进制(代码片段)

1#include"stdio.h"2#defineMaxSize503typedefintDataType;4typedefstruct5DataTypeelem[MaxSize];6inttop;7SeqStack;8voidinitStack(SeqStack&s)910s.top=-1;1112intpush(SeqStack&s,DataTypex)1314if 查看详情

顺序栈

...借住栈<?php/***PHP实现栈*2017/9/23*/classStack{private$stack=[];//顺序栈private$top=-1;//栈顶指针publicfunction__construct(){$t 查看详情

栈基本操作(顺序栈)

#include<iostream>#include<cstdlib>usingnamespacestd;//定义初始化长度和每次增加的长度constintSTACK_INIT_SIZE=10;constintSTACK_INCREAMENT=2;structStack{int*base;//栈底int*top;//栈顶intstacksize;//已分配栈的大小};//函 查看详情

括号匹配问题(顺序栈实现)

...上传一个吧。那个有时间我再传上来~本周的要求:1.给出顺序栈的存储结构定义。2.完成顺序栈的基本操作函数。1)     初始化顺序栈2)     实现入栈和出栈操作3)     实现取... 查看详情

顺序栈链栈双端栈(代码片段)

...称为后进先出表(LastInFirstOut,简称LIFO)。栈的存储结构一:顺序存储    栈的顺序存储结构同样需要使用一个数组和一个整型变量来实现,利用数组来顺序存储栈中的所有元素,利用整型变量来存储栈顶元 查看详情

顺序栈

...须为这个结构体分配动态内存 否则无法使用  顺序栈:利用一组连续的存储单元依次存放自栈底到栈顶的数据元素;由于栈顶元素是经常变动的,所以附设top指示栈顶元素在顺序表中的位置  基本操作  1 查看详情

顺序栈stackc语言(代码片段)

顺序栈Stack【C语言】/*Byyangbocsu顺序栈Stack2021.07.21*/#include<stdio.h>#include"stdlib.h"/*预定义常量和类型*//*函数结果状态码*/#defineTRUE 1#defineFALSE 0#defineOK 1#defineERROR0 查看详情

顺序栈的基本操作

...始条件#include<stdlib.h>#include<stdio.h>#defineMAXSIZE100顺序栈的存储结构:须有一个一维数组去存放栈中的基本元素,还要栈顶指针,用来存放栈顶元素的下标typedefstructSqStack{ intelem; inttop;}SqStack,*stack_type; 接着开始栈的初始... 查看详情

栈(顺序存储结构)

...一端作插入、删除具有后入先出的特性(LastInFirstOut)分顺序存储结构、链式存储结构两种形式堆栈的顺序存储结构通常由一个一维数组和一个栈顶元素变量组成图解如下:形式一:构建结构体0、结构初始化#defineMaxSize###structStac... 查看详情

王道3.1顺序栈以及链式栈(代码片段)

顺序栈以及链式栈一、的基本概念二、栈的储存三、顺序栈的基本操作四、链式栈的基本操作一、的基本概念1.栈只允许在一段进行删除或插入操作的线性表2.三个术语①栈顶top:线性表允许进行插入删除的那一端②栈底bottom... 查看详情

数据结构(c语言版)严蔚敏->顺序栈的定义利用顺序栈解决有效的括号(代码片段)

头文件SqStack.h#ifndefSQSTACK_H_INCLUDED#defineSQSTACK_H_INCLUDED//顺序栈#defineMax_Stack_Size50typedefcharElemType;typedefstructElemTypedata[Max_Stack_Size];//存放栈中的元素inttop;//栈顶指针SqStack;voidInitSqStack(Sq 查看详情