链式存储:使用指针进行存储方式进行栈的各种方式
由于前面写过基本操作方式,这里我就不再进行描述基本操作,直接开始
结构体定义
typedef struct Stack{
int data;
struct Stack *next;
}SqStack,*LinkStack;
LinkStack top;
初始化栈
int InitStack(SqStack &S){
top=NULL;
}
判断空
int EmptyStack(LinlStack top){
return ( top==NULL?TRUE:FALSE;)
}
进栈
void PushStack(LinkStack &top, Datatype e ){
SqStack *p;
p=(LinlList)malloc(sizeof(SqStack));
p->data=e;
p->next=top;
top=s;
}
出栈
intPopStack(LinkStack &top,Datatype &e){
Stack *p;
if(StackEmpty(top)==NULL) return ERROE;
p=top;
e=top->data;
top=top->next;
free(p);
return OK;
}
栈的应用
首先是数制转换
对于任何一个数值转换成相对应的数值而言,每次压栈保存数据进入栈内
typedef int Datatype
void conversion (int N,int r){
Sqstack S;
Datatype x;
initStack(S);
//入栈
while(N){
Push(S,N%r);
N=N/r;
}
//pop出栈
while(!StackEmpty(S)){
Pop(S,x);
printf("%d",x);
}
}
后续周末接着其应用,简单表达式求值和括号匹配检验