栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈——顺序栈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈——顺序栈

栈:

限定在表尾进行插入和删除的线性表(受到限制的线性表),是一种先进后出,后进先出的数据结构

1 顺序栈:

和链表中的顺序表类似,不过栈是在尾部进行操作,少了头部和中间的几个函数,这里我直接实现一下代码。

stack.h

typedef int ELEM_TYPE
#define INIT_SIZE 10
sturct Stack
{
  ELEM_TYPE *base; //接受malloc从堆内存申请的连续存储单元  
  int top;         //保存有效数据长度
  int stacksize;
}Stack,*PStack 

初始化
void Init_Stack(PStack ps);

入栈
bool Push(PStack ps,ELEM_TYPE val);

出栈
bool Pop(PStack ps,ELEM_TYPE *rtval); //rtval是输出参数,返回出栈的值。

获取栈顶元素
bool Top(PStack ps,ELEM_TYPE *rtval);

获取有效数据个数
int Get_length(PStack ps);

判空
bool IsEmpty(PStack ps);

判满
bool IsFull(PStack ps);

扩容函数  //两倍扩容
void Inc(PStack ps);

清空
void Clear(PStack ps);

销毁
void Destroy(PStack ps);

stack .cpp

#include "stack.h"
#inclide 
#include 
#include 

void Init_Stack(PStack ps)   初始化
{
  ps->base=(ELEM_TYPE*)malloc(INIT_SIZE * sizeof(ELEM_TYPE));
  assert(ps->base!=NULL);
  ps->top=0;
  ps->stacksize=>INIT_SIZE;
}

bool Push(PStack ps,ELEM_TYPE val)   入栈
{
   assert(ps!=NULL); 
   if(IsFull(ps))    //判满,如果满了需扩容。
   {
    Inc(ps);
   }
   ps->base[ps->top] = val;
   ps->top++;
   return ture;
}

bool IsFull(PStack ps)  判满
{
  return ps->top==ps->stacksize;
}

void Inc(PStack ps)   扩容
{
    ps->base= (ELEM_TYPE*)realloc(ps->base,iszeof(ELEM_TYPE)*ps->stacksize*2);
    assery(ps->base!=NULL);
    ps->stacksize*=2;
}

bool Pop(PStack ps,ELEM_TYPE *rtval)    出栈
{
   if(IsEmpty(ps))
   return false;
   *rtval=ps->pase[--ps->top];    //把出栈的值给rtval,再让有效个数减一
   return ture;
}

bool Top(PStack ps,ELEM_TYPE *rtval)    获取栈顶元素
{
   if(IsEmpty(ps))
   return false;
   *rtval =ps->base[ps->top-1];
   return true;
}

bool IsEmpty(PStack os)   判空
{
  return PStack->ps==0;
}

void Clear(PStack ps)     清空
{
  ps->top=0;      //只要认为里面空间的元素值都是无效值就可以
}

void Destroy(PStack ps)    销毁
{
  free(ps->base);
  ps->base=NULL;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号