一、栈
定义:先入后进的操作约束的有穷线性表
操作:
Stack CreateStack( int MaxSize ) //生成空堆栈,其最大长度为MaxSize;
int IsFull( Stack S, int MaxSize ) //判断堆栈S是否已满;
void Push( Stack S, ElementType item ) //将元素item压入堆栈;
int IsEmpty ( Stack S ) //判断堆栈S是否为空;
ElementType Pop( Stack S ) //删除并返回栈顶元素;
二、顺序存储实现
用数组实现,表示:
const int MaxSize =100; //栈的容量
typedef struct StackNode* stack;
struct StackNode{
int Data[MaxSize];
int top;
};
stack s;
1、创建空栈
stack CreatStack(){
stack s = new StackNode();
s->top = -1;
return s;
}
2、判断栈是否已经满了
bool IsFull(stack s,int MaxSize){
if(s->top==MaxSize-1)
reutrn true;
return false;
}
3、入栈
void push(stack s,int X){
if(IsFull(s)){
cout<<"stack is full"<<endl;
return;
}
s->Data[s->top+1] = X;
s->top++;
}
4、判断栈是否空
bool IsEmpty(stack s){
if(s->top==-1)
return true;
return false;
}
5、出栈
int pop(stack s){
if(IsEmpty(s))
throw "the stack is empty";
return s->Data[s->top--];
}
三、链表实现
表示:
typedef struck StackNode*stack;
struck StackNode{
int Data;
StackNode* Next;
}
1、创建空栈
stack CreatStack(){
stack s = new StackNode();
s->Next =nullptr;
return s;
}
2、判断栈是否为空
扫描二维码关注公众号,回复:
5352240 查看本文章
bool IsEmpty(stack s){
if(s->Next==nullptr)
return true;
return false;
}
3、入栈
void push(stack s,int X){
stack NewNode = new StactNode();
NewNode->Data = X;
NewNode->Next = s->Next;
s->Next = NewNode;
}
4、出栈
int pop(stack s){
if(IsEmpty(s))
throw "the stack is empty";
stack p = s->Next;
s->Next = p->Next;
int top = p->Data;
delete p;
p = nullptr;
return top;
}