数据结构基础:顺序栈和链栈的表示以及实现

本文介绍了栈的基本概念和特点,包括后进先出的性质。详细阐述了顺序栈和链栈的定义,分别讨论了它们的存储结构,并提供了顺序栈与链栈的基本操作实现,包括入栈、出栈、读取栈顶元素等。通过示意图和代码展示了两种栈的工作原理。
摘要由CSDN通过智能技术生成

定义和特点

限定仅在表尾进行插入或删除操作的线性表

在这里插入图片描述

  • 包含两类栈,存储结构不同:顺序栈、链栈
  • 栈的操作特性:后进先出
  • a1,为栈底元素;an,为栈顶元素。不含元素的空表为空栈
  • 操作受限制线性表
  • 基本操作:入栈、出栈、读取栈顶元素值、建栈、判栈满或空等等

一、顺序栈的表示和实现

1.定义

利用一组地址连续的存储单元依次存放自栈底到栈顶的元素,同时附带指针指示栈顶元素在顺序栈中的位置。

顺序栈中数据元素和栈指针之间的对应关系图
在这里插入图片描述
2.顺序的栈基本操作的实现
在这里插入图片描述
实现代码:

#include <iostream>
using namespace std;

//顺序栈的表示和实现
typedef int SElemType;

//0.顺序栈的储存表示
#define MAXSIZE 100 //存储空间的初始分配
typedef struct
{
   
    SElemType *base;   //栈底指针
    SElemType *top;    //栈顶指针
    int stacksize;     //栈可用最大容量
}SqStack;


//1.初始化
void InitStack(SqStack &S)
{
     //构造空栈S
   S.base=new SElemType[MAXSIZE];  //动态分配一个最大容量为MAXSIZE的数组空间
   if(!S.base)
   {
   
       cout<<"储存分配失败"<<endl;
   }
   else
   {
   
      S.top=S.base;       //top初始为base,空栈
      S.stacksize=MAXSIZE;  //stacksize置为栈的最大容量MAXSIZE
      cout<<"栈已经初始化\n\n"<<endl;
   }

}


//2.判断栈是否为空
void StackEmpty(SqStack S)
{
   
    if(S.top==S.base)
    {
   
        cout<<"该栈为空"<<endl;
    }
    else
    {
   
        cout<<"该栈非空"<<endl;
    }
}


//3.求栈的长度
void StackLength(SqStack S)
{
   
    int n;
    n=S.top-S.base;
    cout<<"该栈的长度为:"<<n<<endl;
}


//4.清空栈
void ClearStack(SqStack &S)
{
   
    if(S.base)
    {
   
        S.top=S.base;
        cout<<"该栈已被清空"<<endl;
    }
}


//5.销毁栈
void DestroyStack(SqStack &S)
{
   
    if(S.base)
    {
   
        delete[]S.base;
        S.stacksize=0;
        S.base=S.top=NULL;
        cout<<"该栈已被销毁"<<endl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值