栈的顺序结构
****************************************************************************************************************************/
//栈顺序结构
typedef struct
{
ElemType data[MaxSize];
int top;
} Sqstack;
//初始化栈
void InitStack(Sqstack *&s)
{
s = (Sqstack *)malloc(sizeof(Sqstack));
s->top = -1;
}
//销毁栈
void DistroyStack(Sqstack *&s)
{
free(s);
}
bool StackEmpty(Sqstack *&s)
{
return (s->top==-1);
}
//进栈
bool Push(Sqstack *&s,ElemType e)
{
if(s->top == MaxSize-1)
{
return false;
}
else{
s->top++;
s->data[s->top] = e;
return true;
}
}
//出栈
bool Pop(Sqstack *&s,ElemType)
{
if(s->top==-1)
{
return false;
}
else
{
e = s->data[s->top];
s->top--;
return true;
}
}
//取栈顶元素
bool GetTop(Sqstack *s,ElemType &e)
{
if(s->top==-1)
return false;
e = s->data[s->top];
return true;
}
栈的链式结构
/**********************************************************************************************************************/
//栈的链式存储结构
typedef struct linknode
{
ElemType data;
struct linknode *next;
} LinkStNode;
//初始化
void InitStack(LinkStNode *&s)
{
s = (* LinkStNode)malloc(sizeof(LinkStNode));
s->next = NULL;
}
//销毁
void DestoryStack(LinkStNode *&s)
{
LinkStNode *pre=s,*p=s->next;
while(p!=NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
//判断是否为空
bool StackEmpty(LinkStNode *s)
{
return (s->next==NULL);
}
//进栈
//头插法
void Push(LinkStNode *&s,ElemType e)
{
LinkStNode *p;
p = (* LinkStNode)malloc(sizeof(LinkStNode));
P->data = e;
p->next = s->next;
s->next = p;
}
//出栈
bool Pop(LinkStNode *&s,ElemType e)
{
LinkStNode *p;
if(s->next==NULL)
return false;
p = s->next;//指向首结点
e = p->data;
s->next = p->next;
free(p)
return true
}
//取栈顶元素
bool GetTop(LinkStNode *s,ElemType &e)
{
if(s->next==NULL)
return false;
e = s->next->data;
return true;
}