栈的定义
定义:
什么叫栈,栈是限定在表尾进行插入或者删除操作的线性表。
对栈来说,表尾有特殊的意义,称为栈顶,表头端则成为栈底。
不含元素的栈称为空栈。
栈的应用:
1.数制度的转换
2.括号比配的检验
3.表达式求值
(没有列举全)
顺序栈的实现
//顺序栈的结构
#define MAXSIZE 100
typedef struct
{
ElemType *base;
}
栈的一些基础功能实现代码:
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
//栈初始化
void InitStack(SqStack &s)
{
s.base=new int[MAXSIZE];
s.top=s.base;
s.stacksize=MAXSIZE;
}
//入栈
int Push(SqStack &s,int e)
{
if(s.top-s.base==s.stacksize)
return -1;
*s.top++=e;//等价于*stop=e;*stop++
return 1;
}
//出栈
void Pop(SqStack &s)
{
s.top--;
}
//取栈顶元素
int GrtTop(SqStack s)
{
if(s.top!=s.base)
return *(s.top-1);
return 1;
}
//创建一个栈,以0结尾
void CreatStack(SqStack &s)
{
InitStack(s);
int x;
cin>>x;
while(x!=0)
{
Push(s,x);
cin>>x;
}
}
void StackPrint(SqStack s)
{
while(s.top!=s.base)
{
*s.top--;
cout<<*s.top<<" ";
}
}
int main()
{
SqStack s;
InitStack(s);
CreatStack(s);
StackPrint(s);
cout<<endl;
Pop(s);
StackPrint(s);
return 0;
}
链栈的实现
链栈的结构
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
链栈代码
#include <iostream>
using namespace std;
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode, *LinkStack;
int InitStack(LinkStack &s)
{
s=NULL;
return 1;
}
void Push(LinkStack &s, int e)
{
StackNode *p;
p=new StackNode;
p->data=e;
p->next=s;
s=p;
}
void CreatStack(LinkStack &s)
{
int x;
cin>>x;
while(x!=0)
{
Push(s,x);
cin>>x;
}
}
//出栈
void Pop(LinkStack &s,int &e)
{
StackNode *p;
e=s->data;
p=s;
s=s->next;
delete p;
}
int GetTop(LinkStack s)
{
if(s!=NULL)
return s->data;
return 1;
}
void StackPrint(LinkStack s)
{
StackNode *p;
p=s;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
int main()
{
int e;
LinkStack s;
InitStack(s);
CreatStack(s);
StackPrint(s);
cout<<endl;
Pop(s,e);
cout<<"出栈元素:"<<e<<endl;
StackPrint(s);
}