一、栈
1.顺序栈
#include <stdio.h>
#define Maxsize 10
typedef struct
{
ElemType data[Maxsize];
int top;
}Sqstack;
void InitStack(Sqstack &q) //初始化栈 只需要把栈顶指针变为-1就行
{
q.top=-1;
}
bool textStack(Sqstack &q) //判断栈是否为空栈
{
if(q.top ==-1)
return true; //栈空
else
return false; //栈非空 或者简写成return (q.top==-1)
}
bool Push(Sqstack &q,ElemType x)//进栈操作
{
if(q.top ==Maxsize-1)
return false;
q.data [++q.top ]=x;
return true;
}
bool Pop(Sqstack &q,ElemType &x) //出栈操作
{
if(q.top ==-1)
return false;
x=q.data [q.top --];
return false;
}
bool GetTop(Sqstack &q,ElemType &x) //获取栈顶元素
{
if(q.top ==-1) //若栈为空栈 则返回false
return false;
x=q.data [q.top ];
return true; //注意top记得加q.top 还有++q.top和q.top--的用法
}
注意top记得加q.top和++q.top和q.top--的用法
这里的初始化操作是将top的值默认化为-1
另一种方式是将top的值化为0,注意此时入栈操作就是q.top++,出栈操作就是--q.top,还有判断空栈的条件?
注意题目要求
2.共享栈(也就是有两个栈顶指针,为了节约内存空间)
#include <stdio.h>
#define Maxsize 10
typedef struct
{
ElemType data[Maxsize];
int top0;
int top1;
}Shstack;
void InitStack(Shstack &q) //初始化共享栈
{
q.top0=-1;
q.top1=Maxsize;
}
bool TextStack(Shstack &q) //判断栈是否满
{
if(q.top0+1==q.top1)
return true;
else
return false;
}
注意一点 就是以静态分配内存的方式 函数运行结束后会自动回收内存
而动态分配内存的方式 就需要malloc和free函数
3.链栈
|