#include #includetypedefstructNODE{struct NODE *next;intdata;
}node;
typedefstructSTACK{
node*head;intlen;
}stack;
stack* init(void){
stack* List=(stack *) malloc(sizeof(stack));
List->head=NULL;
List->len=0;returnList;
}int pop(stack *st){if(0>=st->len||NULL ==st) {
printf("NULL stack,leaving now\n");
exit(1);
}int pdata=st->head->data;
st->head=st->head->next;
st->len--;returnpdata;
}void push(stack *st, intn){if(NULL == st|| 0>st->len){
printf("wrong stack,please check the source code, now leaving\n");
exit(1);
}
node* pp=(node*)malloc(sizeof(node));
pp->next=st->head;
pp->data=n;
st->head=pp;
st->len++;
}void print(stack*st,intn){
node* pp=st->head;while(n){
printf("%d\n",pp->data);
n--;
pp=pp->next;
}
}intmain(){inttmp,tmp1;
stack* st1=init();
stack* st2=init();int n=0;
push(st1,3);
n++;
push(st1,2);
n++;
push(st1,4);
n++;
push(st1,6);
n++;
push(st1,5);
n++;
print(st1,n);
tmp=pop(st1);
push(st2,tmp);while(0!=st2->len)
{if(0>=st1->len){while(0!=st2->len){
tmp1=pop(st2);
push(st1,tmp1);
}break;
}else{
tmp=pop(st1);if( tmp >= st2->head->data)
push(st2,tmp);else{while(0!=st2->len){
tmp1=pop(st2);
push(st1,tmp1);
}
push(st2,tmp);
}
}
}
printf("\n\n");
print(st1,n);return 0;
}