顺序栈的实现

本文详细介绍了栈的数据结构概念,特别是顺序栈的实现,包括栈的基本操作如入栈、出栈、获取栈顶元素、计算元素个数等,以及栈的初始化、清空、销毁和打印方法。
摘要由CSDN通过智能技术生成

1.栈

  • 定义:只能在表尾进行删除,插入等操作(受到限制的线性表),表尾具有特殊函数称为栈顶(top),表头称作栈底,不含元素的栈称为空栈。
  • 特征:“先进后出“,即先入栈的元素后出栈

                栈的插入操作称为入栈,也称进栈、压栈;

                栈的删除操作称为出栈,也称弹栈。

2.抽象数据类型定义    

        2.1顺序栈

        2.1.1 顺序栈结构设计

/*
一般来说会设置两个常量:STACK_INIT_SIZE(存储空间初始分配量)
STACK_INCREMENT(存储空间分配增量)
只不过我们扩容方式是,当前容量*2,所以STACK_INCREMENT没用到
*/
//顺序栈的定义:
#pragma once
#define STACK_INIT_SIZE 100
#define ERROR 0
#define OK 1
typedef bool status;
typedef int ElemType;
typedef struct Stack{
ElemType* base;//用来接收malloc从堆内申请的连续内存
int top;//栈顶指针(和书上类型有区别)
int capacity;//当前容量的总大小(以元素个数为单位)保存栈的当前可使用的最大容量。
}Stack, *PStack;
void InitStack(Pstack ps);
status Push(Pstack ps,ElemType val);
ElemType Pop(PStack ps);
ElemType Top(PStack ps);
int Size(PStack ps);
void Clear(Psatck ps);
void Destory(Pstack ps);
//打印
void Show(struct LStack *pls)

        2.1.2初始化 InitStack(Pstack ps)

void InitStck(Pstack ps)
{
    assert(ps!=NULL);
    ps->base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType);
    if(ps->base==NULL) return;    //判断内存是否申请成功
    ps->top=0;
    ps->capcity=STACK_INIT_SIZE;
}

        2.1.3入栈Push()

status Push(Pstack ps,ElemType val){
assert(ps != nullptr);
if(IsFull()) return ERROR;
ps->base[ps->top++] = val;
return OK;
}

        2.1.4出栈Pop()

ElemType Pop(PStack ps){
assert(ps != nullptr);
if(IsEmpty(ps)) return ERROR;
ElemType val = ps->base[top-1];
return val;

        2.1.5获取栈顶元素Top()

ElemType Top(PStack ps){
assert(ps != nullptr);
if(IsEmpty(ps)) return ERROR;
return ps->base[ps->top-1];
}

        2.1.6计算栈中的元素个数size()

int size(Pstack ps)
{
    assert(!ps);
    return ps->top;
}

       2.1.7判空操作IsEmpty()

bool IsEmpty(Pstack ps)
{
    if(ps->top==0) return true;
    else return false;
}

        2.1.8清空栈中数据Clear()

void Clear(Pstack ps)
{
    assert(!ps);
    memset(ps,0,ps->capcity*sizeof(ElemType);
    ps->top=0;
}

        2.1.9销毁Destory()

void Destory(Pstack ps)
{
    assert(!ps);
    free(ps->base);
    ps->base=NULL:
}

        2.1.10打印Show()

void Show(Pstack ps){
assert(ps != nullptr);
int num = ps->top;
for(int i = 0;i < num;i++){
printf("%4d",ps->base[i]);
}
printf("\n");
}

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值