Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "stack.h"
  3. #define LEN 1000
  4. stack::~stack()
  5. {
  6. stack_node *c,*nx;
  7. for(c=head;c;c=nx)
  8. {
  9. nx=c->next;
  10. delete c;
  11.  
  12. }
  13. head=0;
  14. }
  15.  
  16. int stack::read(FILE *fp,int len)
  17. {
  18. int i;
  19. stack_node *d,*curr;
  20. this->~stack();
  21. head= new stack_node();
  22. if(!head) return -1;
  23. if((head->read(fp))<0) {delete head;head=0;return -1;}
  24. d=head;
  25. for(i=1;i<len;i++)
  26. {
  27. curr=new stack_node();
  28. if(!curr){ return -1;}
  29. if((curr)->read(fp)<0)
  30. {
  31. delete curr;
  32. curr=0;
  33. return -1;
  34. }
  35. d->next=curr;
  36. d=d->next;
  37. }
  38. return 0;
  39. }
  40.  
  41. void stack::print(FILE *fp,int level,int len)
  42. {
  43. int i=0,j;
  44. stack_node *c;
  45. printf("******\n");
  46. for(c=head;c && i<len;c=c->next, i++)
  47. {
  48. for(j=0;j<level*2;j++) printf(" ");
  49. c->print(fp);
  50. }
  51. for(j=0;j<level*2;j++) printf(" ");
  52. printf("******\n");
  53. }
  54.  
  55. int stack :: operator < (const stack & b)
  56. {
  57. if (*head<*b.head) return 1;
  58. return 0;
  59. }
  60.  
  61. int stack :: operator > (const stack & b)
  62. {
  63. if (*head>*b.head) return 1;
  64. return 0;
  65. }
  66.  
  67. int stack :: operator == (const stack & b)
  68. {
  69. if (*head==*b.head) return 1;
  70. return 0;
  71. }
  72.  
  73. void stack::add_head(stack_node *add)
  74. {
  75. if(!head) head=add;
  76. else
  77. {
  78. add->next=head;
  79. head=add;
  80. }
  81. }
  82.  
  83. int stack::del_head()
  84. {
  85. stack_node *a;
  86. if(!head) return -1;
  87. else
  88. {
  89. a=head;
  90. head=head->next;
  91. delete a;
  92. }
  93. return 0;
  94. }
  95. void stack:: menu()
  96. {
  97. char *p;
  98. char s[LEN];
  99. int k,n;
  100. print_menu_stack();
  101. while(fgets(s,LEN,stdin))
  102. {
  103.  
  104. k=strtol(s,&p,10);
  105. if(p==s) continue;
  106. switch(k)
  107. {
  108. case -1: return ;
  109. case 0:
  110. {
  111. if(head) head->menu();
  112. else printf("Нет элемента\n");
  113. break;
  114. }
  115. case 1:
  116. { printf("Введите кол-во элементов для печати:\n");
  117. if(scanf("%d",&n)!=1)
  118. { printf("Error\n");
  119. break;
  120. }
  121. print(stdout,0,n);
  122. break;
  123. }
  124. case 2:
  125. {
  126. stack_node * p=new stack_node();
  127. if(!p)
  128. {
  129. printf("Error\n");
  130. break;
  131. }
  132. printf("Введите добавляемый элемент:\n");
  133. if(p->read(stdin)<0)
  134. {
  135. printf("Error read\n");
  136. delete p;
  137. p=0;
  138. break;
  139. }
  140. add_head(p);
  141. break;
  142. }
  143. case 3:
  144. {
  145. if((del_head())!=0) printf("Невозможно удалить элемент\n");
  146. break;
  147. }
  148. default: { printf("Error number\n");}
  149.  
  150. }
  151. print_menu_stack();
  152. }
  153. return ;
  154. }
  155.  
  156. void print_menu_stack()
  157. {
  158. printf("В классе STACK доступны следующие функции:\n");
  159. printf("-1-выйти\n");
  160. printf("0-вызвать меню\n");
  161. printf("1-печать\n");
  162. printf("2-добавить элемент в стек\n");
  163. printf("3-удалить элемент из стека\n");
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement