标签:
#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; }
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/5036719.html