栈和队列之顺序栈的基本实现

什么是栈?栈是一个仅在表尾进行插入删除的线性表,即后进先出线性表

这里,我们来学习一下如何实现顺序栈的基本实现:

初始化顺序栈:

void InitStack(SqStack *s)
{
    s->base=(User *)malloc(MAXSIZE*sizeof(int));        //开辟一个大小为AXSIZE的数组空间,数组元素为User
    s->top=s->base;       //栈顶指针初始化为栈底指针,表示此时的栈为空栈
    s->stackSize=MAXSIZE;       //表示栈空间为stackSize
}

入栈:

void Push(SqStack &s,User user)
{
    if(s.top-s.base==s.stackSize)    //判断栈是否已满
    {
        User user;
        user.id=-1;
        strcpy(user.username,"error");
    }
    *s.top=user;                     //将值传递给当前位置的数据域
    s.top=s.top+1;                   //当前位置的指针指向下一个地址
}

返回栈顶元素:

User GetTop(SqStack s)
{
    if(s.top!=s.base)                //判断栈内元素是否为空
    {
        return *(s.top-1);            //返回栈顶元素
    }
}

出栈:

User Pop(SqStack &s,User user)
{
    if(s.top==s.base)
    {
        user.id=-1;
        strcpy(user.username,"error");
        return user;
    }
    s.top=s.top-1;                   //栈顶元素下移一位
    user=*s.top;                     //取出当前位置的数据
    return user;
}

这里附上源码一份:

#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100
typedef struct
{
    char username[20];
    int id;
}User;
typedef struct
{
    User *base;
    User *top;
    int stackSize;
}SqStack;
//初始化顺序栈
void InitStack(SqStack *s)
{
    s->base=(User *)malloc(MAXSIZE*sizeof(int));        //开辟一个大小为AXSIZE的数组空间,数组元素为User
    s->top=s->base;       //栈顶指针初始化为栈底指针,表示此时的栈为空栈
    s->stackSize=MAXSIZE;       //表示栈空间为stackSize
}
//入栈
void Push(SqStack &s,User user)
{
    if(s.top-s.base==s.stackSize)    //判断栈是否已满
    {
        User user;
        user.id=-1;
        strcpy(user.username,"error");
    }
    *s.top=user;                     //将值传递给当前位置的数据域
    s.top=s.top+1;                   //当前位置的指针指向下一个地址
}
//取出栈顶元素
User GetTop(SqStack s)
{
    if(s.top!=s.base)                //判断栈内元素是否为空
    {
        return *(s.top-1);            //返回栈顶元素
    }
}
//出栈
User Pop(SqStack &s,User user)
{
    if(s.top==s.base)
    {
        user.id=-1;
        strcpy(user.username,"error");
        return user;
    }
    s.top=s.top-1;                   //栈顶元素下移一位
    user=*s.top;                     //取出当前位置的数据
    return user;
}
int main()
{
    SqStack s;
    User user;
   //初始化顺序栈
   InitStack(&s);
   //入栈
   user.id=0;
   strcpy(user.username,"gjw");
   Push(s,user);
   //取出栈顶元素
   //User user1=GetTop(s);
   //cout<<user1.id<<endl;
   //出栈
   User user1=Pop(s,user);
   cout<<user1.id<<endl;
    return 0;
}

至此,顺序栈的基本操作就实现完毕了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值