fork download
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. typedef struct node {
  5. int info;
  6. struct node *next;
  7. } Stack;
  8.  
  9. void push(Stack**head, int value){
  10. Stack*q=(Stack*)malloc(sizeof(Stack));
  11. q->info = value;
  12. q->next = *head;
  13. *head = q;
  14. }
  15.  
  16. int isEmpty(Stack*head) {
  17. if(head==NULL) return 1;
  18. return 0;
  19. }
  20.  
  21. void pop(Stack**head) {
  22. Stack*q;
  23. q = *head;
  24. if(isEmpty(*head)) return;
  25. (*head) = (*head)->next;
  26. free(q);
  27. }
  28.  
  29.  
  30. int top(Stack**head){
  31. if(!isEmpty(*head))
  32. return (*head)->info;
  33. return -1;
  34. }
  35.  
  36. void topPlusPlus(Stack**head) {
  37.  
  38. (*head)->info = (*head)->info + 1;
  39. }
  40.  
  41. void write(Stack*head) {
  42. while(head){
  43. printf("%d ", head->info);
  44. head = head->next;
  45. }
  46. }
  47.  
  48. int main(int argc, char const *argv[]) {
  49.  
  50. Stack*head=NULL;
  51. int n;
  52. scanf("%d",&n);
  53. push(&head,1);
  54. while(!isEmpty(head)) {
  55. write(head);
  56. printf("\n");
  57. if(top(&head) < n) push(&head,top(&head)+1);
  58. else {
  59. pop(&head);
  60. if(!isEmpty(head)) topPlusPlus(&head);
  61. }
  62. }
  63. return 0;
  64. }
  65.  
Success #stdin #stdout 0.01s 5476KB
stdin
3
stdout
1 
2 1 
3 2 1 
3 1 
2 
3 2 
3