目录
一、栈的相关定义
-
栈:是一种特殊的线性表,只能在一段,也就是表尾,进行插入和删除操作。
-
栈顶:线性表尾
-
栈底:线性表头
-
栈的储存结构:顺序栈、链式栈
二、栈的操作
(1)栈的结构
//顺序栈
struct Stack
{
int top;
MyType room[MaxSize];
};
//链栈
struct node
{
MyType date;
node *next;
};
struct Stack
{
node *top;
int number;
};
(2)栈的初始化
//顺序栈
void initStack (Stack *s)
{
s->top=-1;
memset(s->room,0,sizeof(s->room));
}
//链栈
void initStack (Stack *s)
{
s->top=new node;
s->top->next=NULL;
s->top->date=0;
s->number=0;
}
(3)进栈
//顺序栈
bool Push (Stack *s,int e)
{
if(s->top<MaxSize-1)
{
s->room[++s->top]=e;
return true;
}
else
return false;
}
//链栈
void Push (Stack *s,int e)
{
node *p=new node;
p->next=s->top;
p->date=e;
s->top=p;
s->number++;
}
(4)出栈
//顺序栈
bool Pop (Stack *s)
{
if(!Empty(s))
{
s->room[s->top--]=0;
return true;
}
else
return false;
}
//链栈
bool Pop (Stack *s)
{
if(!Empty(s))
{
node *p;
p=s->top;
s->top=s->top->next;
delete p;
s->number--;
return true;
}
else
return false;
}
(5) 判断栈空
//顺序栈
bool Empty (Stack *s)
{
if(s->top==-1)
return true;
else
return false;
}
//链栈
bool Empty (Stack *s)
{
if(s->top->next==NULL)
return true;
else
return false;
}
(6)返回栈顶元素
//顺序栈
bool Top (Stack *s,int *e)
{
if(!Empty(s))
{
*e=s->room[s->top];
return true;
}
else
return false;
}
//链栈
node* Top (Stack *s)
{
if(!Empty(s))
{
return s->top;
}
else
return NULL;
}
(7)返回栈的元素数目
//顺序栈
int Size (Stack *s)
{
return s->top+1;
}
//链栈
int Size (Stack *s)
{
return s->number;
}
三、栈的应用
栈的应用就是利用栈“后进先出”的特性