您的位置:首页 > 其它

判断出栈顺序

2015-12-10 17:28 246 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int status;
typedef char elemtype;
elemtype str[100];
typedef struct node{
elemtype *base;
elemtype *top;
int size;
}sqstack;
status initstack(sqstack &s){//初始化栈
s.base=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype));
if(!s.base)
exit(OVERFLOW);
s.top=s.base;
s.size=LIST_INIT_SIZE;
return OK;
}
status get_top(sqstack s,elemtype &e){//获得栈顶元素
if(s.top==s.base)
return ERROR;
e=*(s.top-1);
return OK;
}
status push(sqstack &s,elemtype e){//向栈中输入元素
if(s.top-s.base>=s.size){
s.base=(elemtype *)realloc(s.base,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(elemtype));
if(!s.base)
exit(OVERFLOW);
s.top=s.base+s.size;
s.size+=LISTINCREMENT;
}
*s.top++=e;
return OK;
}

status pop(sqstack &s,elemtype &e){//删除栈顶元素
if(s.top==s.base)
return ERROR;
e=*--s.top;
return OK;
}
status empty(sqstack &s){//判断栈是否为空
if(s.base==s.top)
return TRUE;

else
return FALSE;
}
status clearstack(sqstack &s){//将栈清空
elemtype c;
while(empty(s)){
pop(s,c);
}
}
int getlenght(char str1[]){
int cnt=0;
for(int i=0;str1[i];i++){
cnt++;
}
return cnt;
}
int a[150];
int main(){
int n;

while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sqstack s;
initstack(s);
int cur=1;
elemtype e;
for(int i=1;i<=n;i++){
push(s,i);
while(!empty(s)){
get_top(s,e);
if(e==a[cur]){
pop(s,e);
cur++;
}
else
break;
}
}
if(!empty(s)||cur!=n+1)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: