对于静态栈其实就是一个记录最后一个元素位置的数组,对于动态栈其实就是一个头插法创建链表,因为比较简单,所以就不过多赘述,在这里简单实现以下:
(一)静态栈
数据结构:
typedef struct Stack
{
int elem[MAXSIZE];
int top;
}StaticStack;
(1)栈的初始化
void InitStack(StaticStack * s)
{
s->top = -1;
}
(2)进栈
void Push(StaticStack *s,int date)
{
if (s->top == MAXSIZE-1)
{
cout << "栈已满!" << endl;
return;
}
s->elem[++s->top] = date;
}
(3)出栈
void Pop(StaticStack *s,int *date)
{
if (IsEmpty(s))
{
cout << "无法出栈!栈为空!" << endl;
return ;
}
*date = s->elem[s->top--];
}
(4)判断栈空
bool IsEmpty(StaticStack *s)
{
if (-1 == s->top)
{
return true;
}
return false;
}
(二)动态链栈
数据结构
typedef struct Node
{
int date;
struct Node *next;
}LinkStack,*pLinkStack;
(1)栈的初始化
void InitLinkStack(pLinkStack *pTop)
{
(*pTop) = new LinkStack;
(*pTop)->next = NULL;
}
(2)进栈
void Push(pLinkStack pTop, int date)
{
pLinkStack pNew = new LinkStack;
if (!pNew)
{
cout << "空间申请失败!" << endl;
return;
}
pNew->next = NULL;
pNew->date = date;
pNew->next = pTop->next;
pTop->next = pNew;
}
(3)出栈
void Pop(pLinkStack pTop,int *date)
{
if (IsEmpty(pTop))
{
cout << "链栈为空!" << endl;
return;
}
pLinkStack p = pTop->next;
(*date) = p->date;
pTop->next = p->next;
delete p;
}
(4)判断站空
{
if (NULL == pTop->next)
{
return true ;
}
return false;
}