1. 程式人生 > >數據結構基礎——棧(先進後出)

數據結構基礎——棧(先進後出)

spa sqs 返回棧 typedef stack ack sel 存儲結構 efi

一、順序棧的表示與實現

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;

}

數據結構基礎——棧(先進後出)