数据结构_栈_基本操作的c++实现

#include <iostream>

using namespace std;
//栈(受限线性表的一种,分为顺序栈和链栈,以及共享栈)

/*---------------顺序栈----------规定top为指向栈顶元素的指针----------------------*/
//顺序栈的定义(和顺序表的定义类似)
#define MaxSize 10          //定义栈中元素的最大个数
typedef struct{
    int data[MaxSize];      //静态数组(!)存放栈中元素
    int top;               //栈顶指针,用于指向此时栈的栈顶元素,top记录的是数组的下标
}SqStack;

//初始化
void InitSqStack(SqStack &S){
    S.top=-1;      //初始化栈顶指针,此时还没有栈顶元素
}

//判断栈空
bool StackEmpty(SqStack S){
    return (S.top==-1);
}

//Push进栈(增)
bool PushSq(SqStack &S, int x){
    if(S.top==MaxSize-1)
        return false;  //栈满报错
    S.top++;        //指针先加一
    S.data[S.top]=x;//新元素入栈
    //或者两步合并为S.data[++S.top]=x;

    return true;

}

//出栈Pop
bool PopSq(SqStack &S, int &x){
    if(S.top==-1)
        return false;//栈空,报错
    x=S.data[S.top--];  //逻辑上删除了栈顶元素,但其值依然残留在该存储空间中
    return true;
}

//读栈顶元素
bool GetTopSq(SqStack S,int &x){
    if(S.top==-1)
        return false;
    x=S.data[S.top];
    return true;
}

/*--------当规定top为指向下一个可以插入的位置时,情况有所不同!!!----------*/

/*---------共享栈-------------------------*/
//定义
typedef struct{
    int data[MaxSize];
    int top0;
    int top1;
}ShStack;

//初始化
void InitShStack(ShStack &S){
    S.top0=-1;              //初始化栈顶指针
    S.top1=MaxSize;
}

/*-----------------------------链栈----------(推荐不带头结点)-----------------------*/
//定义
typedef struct LinkNode{
    int data;                    //数据域
    struct LinkNode *next;       //指针域
}LinkNode,*LinkStack;                  //栈类型定义

//初始化(创)
void InitLStack(LinkStack &S){
    S=NULL;
}

//Push(进栈)
bool PushL(LinkStack &S, int x){
    LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
    if(s==NULL)
        return false;//分配空间失败
    s->data=x;
    s->next=S;
    S=s;
    return true;
}

//Pop(出栈)
bool PopL(LinkStack &S, int &x){
    LinkNode *p=S;
    x=p->data;
    S=p->next;
    free(p);
    return true;
}

//获取栈顶元素
bool GetTopL(LinkStack S, int &x){
    if(S==NULL)
        return false;    //栈为空,无栈顶元素
    x=S->data;
    return true;
}

//判空
bool EmptyL(LinkStack S){
    return (S==NULL);
}

//判满(链栈没有“满”)


int main()
{

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值