數據結構基礎——棧(先進後出)
一、順序棧的表示與實現
1.順序棧的存儲結構
#define MAXSIZE 100
typedef struct
{
SElemType *base;(棧底指針,始終指向棧底的位置)
SElemType *top;(棧頂指針)
int stacksize;
}SqStack;
2.初始化
status InitStack(SqStack &S)
{
S.base= new SElemType[MAXSIZE];
if(!S.base) exit (OVERFLOW);(若分配失敗)
S.top = S.base;(top初始為base,空棧
S.stacksize = MAXSIZE;
return OK;
}
3.入棧
Status Push(SqStack &S, SElemType e)
{
if(S.top - S.base == S.stacksize) return ERROR;(棧滿)
*S.top++ = e; (e先入棧,棧頂指針S.top再加1)p59分析運算符的先後順序
return OK;
}
4.出棧
Status Pop(SqStack &S, SElemType &e)
{
if(S.top == S.base) return ERROR;(棧空)
e = *--S.top;(棧頂指針S.top先減1,再將棧頂元素賦給e出棧)p59分析運算符的先後順序
return OK;
}
5.取順序棧的棧頂元素
SElemType GetTop(SqStack S)
{
if (S.top != S.base) (棧非空)
return *(S.top - 1);(返回棧頂元素的值,棧頂指針不變)
}
二、鏈棧的表示與實現
1.鏈棧的存儲結構
typedef struct StackNode
{
ElemType data;(數據域)
struct StackNode *next;(指針域)
} StackNode, *LinkStack;(結構體,指針變量)
2.初始化
Status InitStack(LinkStack &S)
{
S = NULL;
return OK;
}
3.入棧
Status Push(LinkStack &S , SElemType e)
{
p = new StackNode;(生成新結點,得到首地址值並賦給p)
p->data = e;
p->next = S;
S = p;(修改棧頂指針為p)
return OK;
}
4.出棧
Status Pop(LinkStack &S,SElemType &e )
{
if(S=NULL) return ERROR;(棧空)
e = S->data;
p = S;
S = S->next;(指向新的棧頂元素)
delete p;
return OK;
}
5.取棧頂元素
SElemType GetTop(LinkStack S)
{
if (S != NULL);
return OK;
}
數據結構基礎——棧(先進後出)