栈的顺序存储优化版
栈的顺序存储C++实现
#include<iostream>
using namespace std;
#define Maxsize 100 //预先分配空间,这个数值根据实际需要预估确定;
typedef struct SqStack
{
int *base; //栈底指针
int *top; //栈顶指针
}SqStack;
bool InitStack(SqStack &S) //构造一个空栈S
{
//base指向这个数组的第一个字节的地址,base也就是这个数组的名称
S.base = new int[Maxsize];//为顺序栈分配一个最大容量为Maxsize的空间
if (!S.base) //空间分配失败
{
return false;
}
S.top=S.base; //top初始为base,空栈
return true;
}
bool Push(SqStack &S, int e) // 插入元素e为新的栈顶元素
{
if (S.top-S.base == Maxsize) //栈满
{
return false;
}
*(S.top++) = e; //元素e压入栈顶,然后栈顶指针加1,等价于*S.top=e; S.top++;
return true;
}
bool Pop(SqStack &S, int &e) //删除S的栈顶元素,暂存在变量e中
{
if (S.base == S.top) //栈空
{
return false;
}
e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
return true;
}
int GetTop(SqStack S) //返回S的栈顶元素,栈顶指针不变
{
if (S.top != S.base) //栈非空
{
return *(S.top - 1); //返回栈顶元素的值,栈顶指针不变
}
else
{
return -1;
}
}
int main()
{
int n,x;
SqStack S;
InitStack(S);//初始化一个顺序栈S
cout <<"请输入元素个数n:" <<endl;
cin>>n;
cout <<"请依次输入n个元素,依次入栈:" <<endl;
while(n--)
{
cin>>x; //输入元素
Push(S, x);
}
cout <<"元素依次出栈:" <<endl;
while(S.top!=S.base)//如果栈不空,则依次出栈
{
cout<<GetTop(S)<<"\t";//输出栈顶元素
Pop(S, x); //栈顶元素出栈
}
return 0;
}
栈的顺序存储C实现
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
//使用指针来维护这个数组
typedef struct SqStack
{
int * base; //栈底指针
int * top; //栈顶指针
}SqStack;
//1.栈初始化
void InitStack(SqStack * S)
{
//base指向这个数组的第一个字节的地址,base也就是这个数组的名称
S->base = (int *)malloc(sizeof(int) * Maxsize); //分配容量Maxsize个int类型的空间
if(NULL == S->base)
{
return;
}
S->top = S->base; //top初始为base,空栈
}
//2.入栈
void PushStack(SqStack * S, int e)
{
if(S->top-S->base == Maxsize)//判断栈满
{
return;
}
*(S->top) = e; //S->top保存&base[0],通过解引用变成base[0]
S->top++; //S->top保存&base[1], 以此类推
}
//3.出栈
void PopStack(SqStack * S, int * e)
{
if(S->base == S->top)//判断栈空
{
return;
}
S->top--;
*e = *(S->top); //在出栈时,先把出栈元素保存
}
//4.在出栈前获取栈顶元素
int GetTopStack(SqStack * S)
{
if(S->base != S->top)
{
return *(S->top - 1);//只取元素的值,栈顶指针不变
}
else
{
return -1;
}
}
void test01()
{
int n, m, e;
SqStack S;
InitStack(&S);
printf("请输入元素的个数:\n");
scanf("%d", &n);
printf("依次输入元素:\n");
while(n--)
{
scanf("%d", &m);
PushStack(&S, m);
}
printf("元素依次出栈:\n");
while(S.base != S.top)
{
e = GetTopStack(&S);
printf("%d ", e); //等价于printf("%d ", m);
PopStack(&S, &m);
}
}
int main()
{
test01();
printf("\n");
system("pause");
return 0;
}
无论你从事什么行业,只要做好两件事就够了:一个是你的专业、一个是你的人品。专业决定了你的存在,人品决定了你的人脉;剩下的就是坚持 !