/*
顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放
自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序表中的位置。
做法: 以 top=0 表示空栈,另外设指针 base 指示栈底元素在顺序栈中的位置。
当 top 与 base 的值相等时,表示空栈。
*/
#include<stdio.h>
#include<stdlib.h>
//-----------顺序栈的存储结构------------
#define MAXSIZE 4 //顺序栈存储空间的初始分配量
typedef struct
{
int* top; //栈顶指针
int* base; //栈底指针
int size; //栈可用的最大空间
}SqStack;
//-------------初始化顺序栈------------
//为顺序栈分配一个预定大小的数组空间
/*
步骤:
1、分配一个数组,使 base 指向这段空间的基地址,即为栈底
2、将栈顶指针 top 初始化为 base ,表示为空栈。
*/
SqStack* Init_Stack(SqStack* p)
{
//构造一个空栈
p->base=(int*)malloc(MAXSIZE*sizeof(int));//为顺序栈动态分配最大容量为MAXSIZE的数组空间
p->top=p->base;//空栈
p->size=MAXSIZE;
return p;
}
//---------------顺序栈的入栈------------
/*
步骤:
1、判断栈是否满,如果满返回
2、将新的元素压入栈顶,栈顶的指针加 1 。
*/
int Insert_stack(SqStack* p,int data)//插入元素为新的栈顶元素
{
if((p->top)-(p->base)==(p->size)) //栈顶减去栈底等于顺序栈的最大容量,栈已经满了
{
return 0;
}
*p->top++=data;
return 1;
}
//---------------顺序栈的出栈----------
/*
步骤:
1、判断栈是否为空,如果为空,则退出
2、栈顶的指针减1,出栈
*/
int* Delete_stack(SqStack* p,int* q) //用一个指针保存出栈的数
{
if((p->base)==(p->top)) //空栈
{
return 0;
}
q=(--p->top);
return q;
}
//-------------顺序栈的取栈底元素-------
/*
返回栈顶指针的值,栈顶指针不表
*/
int Get_stack(SqStack* p)
{
if(p->top!=p->base) //不是空栈
{
return *(p->top-1);
}
}
int main()
{
SqStack L; //一个栈
SqStack* p; //一个指向栈的指针
return 0;
}
标签:顺序,实现,top,栈顶,int,base,指针
From: https://www.cnblogs.com/lzzcforever/p/17573452.html