什么是栈?栈是一个仅在表尾进行插入或删除的线性表,即后进先出线性表
这里,我们来学习一下如何实现顺序栈的基本实现:
初始化顺序栈:
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;
}
至此,顺序栈的基本操作就实现完毕了