Posted By

CyKy on 12/29/10


Tagged

datastructersdata structerslistsstack


Versions (?)

Stack


 / Published in: C
 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. typedef int T;
  6.  
  7. struct StackCell{
  8. T info;
  9. StackCell *legatura;
  10. };
  11.  
  12. StackCell *top;
  13. int cSize;
  14.  
  15. void init();
  16. int push(T);
  17. void afisT(T);
  18. void afisare();
  19. T pop();
  20. int isEmpty();
  21. void cinT(T *);
  22. int search(T);
  23. int replace(T,T);
  24. int replaceAll(T,T);
  25.  
  26.  
  27. int main(){
  28. init();
  29. T info,info1;
  30. int opt = 1,flag=1;
  31. while(opt>0){
  32. printf(">Optiune:");
  33. scanf("%d",&opt);
  34. printf("\n");
  35. switch(opt){
  36. case 0:{
  37. printf("\t>Exit!\n");
  38. opt=0;
  39. break;
  40. }
  41. add:
  42. case 1:{
  43. printf("\t>Adaugare informatii!\n");
  44. printf("\t>Informatie=");
  45. cinT(&info);
  46. if(push(info)){
  47. printf("\t>Done\n");
  48. }else{
  49. printf("\t>Error\n");
  50. }
  51. break;
  52. }
  53. default:{
  54. printf("\t>Optiune necunoscuta!\n");
  55. break;
  56. }
  57. case 2:{
  58. printf("\t>Scoate info!\n");
  59. if(isEmpty()>0){
  60. printf("\t>A fost scoasa informatia:");
  61. afisT(pop());
  62. printf("\n");
  63. }else{
  64. printf("\t>Nu exista exista informatii in lista!\n");
  65. }
  66. break;
  67. }
  68. case 3:{
  69. printf("\t>Afisare info!\n");
  70. if(cSize>0){
  71. printf("\t>Informatii:");
  72. afisare();
  73. printf("\n");
  74. printf("\t>Exista %d informatii in lista!\n",cSize);
  75. }else{
  76. printf("\t>Nu exista info in lista!\n");
  77. }
  78. break;
  79. }
  80. case 4:{
  81. printf("\t>Search info!\n");
  82. printf("\t>Informatie=");
  83. cinT(&info);
  84. int i=search(info);
  85. if(i>=0){
  86. printf("\t>Found!\n\t >Pe pozitia %d!\n",i);
  87. }else{
  88. printf("\t>Not found!\n");
  89. }
  90. break;
  91. }
  92. case 5:{
  93. flag=1;
  94. printf("\t>Replace info!\n");
  95. if(cSize>0){
  96. while(flag>0){
  97. printf("\t>Info initial=");
  98. cinT(&info);
  99. if(search(info)>=0) flag=0;
  100. else{
  101. printf("\n\t >Info initial not found\n\t >Try again!\n\n");
  102. }
  103. }
  104. printf("\t>Info final=");
  105. cinT(&info1);
  106. if(replace(info,info1)){
  107. printf("\t>Done\n");
  108. }else{
  109. printf("\t>Error\n");
  110. }
  111. }else{
  112. printf("\t>Nu exista info in stiva!\n\t>Adaugati!\n\n\n");
  113. goto add;
  114. }
  115. break;
  116. }
  117. }
  118. printf("\n");
  119. }
  120. getch();
  121. return 0;
  122. }
  123.  
  124. int replace(T initial,T final){
  125. StackCell *aux=top;
  126. int i=0;
  127. if(search(initial)>=0){
  128. while(i<search(initial)){
  129. aux=aux->legatura;
  130. i++;
  131. }
  132. aux->info=final;
  133. return 1;
  134. }
  135. return 0;
  136. }
  137.  
  138. int search(T info){
  139. StackCell *aux=top;
  140. int i=0;
  141. while(aux!=NULL && aux->info!=info && aux->legatura!=NULL){
  142. aux=aux->legatura;
  143. i++;
  144. }
  145. if(aux->info == info){
  146. return i;
  147. }else{
  148. return -1;
  149. }
  150. }
  151.  
  152.  
  153. void init(){
  154. top=NULL;
  155. cSize=0;
  156. }
  157.  
  158. int push(T info){
  159. StackCell *aux=new StackCell;
  160. if(aux==NULL){
  161. return 0;
  162. }else{
  163. aux->info=info;
  164. aux->legatura=top;
  165. top=aux;
  166. cSize++;
  167. return 1;
  168. }
  169. }
  170.  
  171. void afisT(T n)
  172. {
  173. printf("%d ", n);
  174. }
  175.  
  176. void afisare(){
  177. StackCell *contor=top;
  178. while(contor!=NULL){
  179. afisT(contor->info);
  180. contor=contor->legatura;
  181. }
  182. }
  183. T pop(){
  184. T buffer;
  185. if(top!=NULL){
  186. buffer=top->info;
  187. StackCell *aux=top;
  188. top=aux->legatura;
  189. delete aux;
  190. if(cSize>0){
  191. cSize--;
  192. }else{
  193. cSize=0;
  194. }
  195. return buffer;
  196. }
  197. return -1;
  198.  
  199. }
  200.  
  201. int isEmpty(){
  202. if(top == NULL) return 0;
  203. else return 1;
  204. }
  205. void cinT(T *n){
  206. scanf("%d",n);
  207. }

Report this snippet  

You need to login to post a comment.