User:Tsester/Deleteme

From ArchWiki

typedef char item; typedef struct node{ item i; struct node * next; }Node; typedef struct queue{ int items; Node * start; }Queue; Queue * Q; void enqueue(Queue * Q,item i); item dequeue(Queue * Q); typedef Queue Stack; Stack * S,* S2; void push(Stack * S,item i); item pop(Stack * S); void setup() { // put your setup code here, to run once: // Initialize Serial Serial.begin(115200); // needed for Leonardo // while(!Serial); // // initialize queue Q=new Queue; Q->items=0; Q->start=NULL; // // initialize stack S=new Stack; S->items=0; S->start=NULL; // 2 S2=new Stack; S2->items=0; S->start=NULL; // } char input=0; int length=0,tmp=0; long counter=0; void loop() { counter++; // put your main code here, to run repeatedly: input=0; if(Serial.available()>0) { while(input!='\n' && input!='\r') { if(Serial.available()>0) { input=Serial.read(); enqueue(Q,input); // Serial.print("Enqueued:: "); // Serial.println(input); } } length=Q->items; while((input=dequeue(Q))) { if(input!='\n' && input!='\r') { push(S,input); Serial.print(input); } } /* * start <<--- * _ * --->> * _ * <<--- * ... * */ for(int i=0;i<4;i++) { while(input=pop(S)) { push(S2,input); Serial.print("\b \b"); delay(75); } while(input=pop(S2)) { push(S,input); Serial.print(input); delay(75); } } while(pop(S)); while(pop(S2)); while(dequeue(Q)); Serial.print("  :: "); Serial.print(millis()); Serial.print(" counter is :: "); Serial.println(counter); // Serial.println("Hello!!"); } // delay(1000); } void enqueue(Queue * Q,item i) { if(Q) { if(Q->start==NULL) { Q->items=1; Q->start=new Node; Q->start->i=i; Q->start->next=NULL; return; }else { (Q->items)++; Node * tmpNode=Q->start; while(tmpNode->next) { tmpNode=tmpNode->next; } tmpNode->next=new Node; tmpNode=tmpNode->next; tmpNode->i=i; tmpNode->next=NULL; return; } } } item dequeue(Queue * Q) { if(Q && Q->start) { Node * tmpNode=Q->start; item i=tmpNode->i; Q->start=tmpNode->next; (Q->items)--; delete tmpNode; return i; }else { return 0; } } /* * Stack * */ void push(Stack * S,item i) { if(S) { if(S->start==NULL) { S->items=1; S->start=new Node; S->start->i=i; S->start->next=NULL; return; }else { (S->items)++; Node * tmpNode=S->start; while(tmpNode->next) tmpNode=tmpNode->next; tmpNode->next=new Node; tmpNode=tmpNode->next; tmpNode->i=i; tmpNode->next=NULL; return; } } } item pop(Stack * S) { if(S && S->start) { if(S->items >= 2) { Node * prev,* tmp; prev=tmp=S->start; while(tmp->next) { prev=tmp; tmp=tmp->next; } item i = tmp->i; delete tmp; prev->next=NULL; (S->items)--; return i; }else if(S->items == 1) { item i=S->start->i; delete S->start; S->start=NULL; (S->items)--; return i; } } else return 0; }