当前位置:   article > 正文

数据结构第一次实验

数据结构第一次实验

删除进程未完成

代码:

  1. #include "stdio.h"
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #define getpch(type) (type*)malloc(sizeof(type))
  5. #define NULL 0
  6. // ¶¨Òå½ø³Ì¿ØÖÆ¿éPCB
  7. struct pcb{
  8. // ½ø³ÌÃû×Ö
  9. char name[10];
  10. // ½ø³ÌÊÇ·ñÔËÐÐ
  11. char state;
  12. // ½ø³ÌÓÅÏȼ¶Êý
  13. int super;
  14. int ntime;
  15. int rtime;
  16. // ÏÂÒ»¸ö½ø³Ì
  17. struct pcb* link;
  18. }*ready=NULL,*p,*res;
  19. typedef struct pcb PCB;
  20. // ½¨Á¢¶Ô½ø³Ì½øÐÐÓÅÏȼ¶ÅÅÁк¯Êý
  21. //void sort(){
  22. // int l=0;
  23. // PCB* pr=ready;
  24. // while(pr!=NULL){
  25. // l++;
  26. // pr=pr->link;
  27. // }
  28. // pr=p;
  29. // printf("l: %d\n",l);
  30. //}
  31. // ·µ»Ø¾ÍÐ÷¶ÓÁеij¤¶È
  32. int space(){
  33. int l=0;
  34. PCB* pr=ready;
  35. while(pr!=NULL){
  36. l++;
  37. pr=pr->link;
  38. }
  39. return(l);
  40. }
  41. // °´ÕÕÓÅÏÈÊý½øÐÐÅÅÐò ¿ÉÇÀÕ¼
  42. //void sort(){
  43. // int len=space();
  44. // if(len==1){
  45. // if(ready->super>p->super){
  46. // p->link=ready;
  47. // ready=p;
  48. // }else{
  49. // ready->link=p;
  50. // }
  51. // }
  52. // else if(len>1){
  53. // PCB* pr=ready,*qr=ready->link;
  54. // while(qr!=NULL){
  55. // if(qr->super>p->super){
  56. // pr->link=p;
  57. // p->link=qr;
  58. // break;
  59. // }
  60. // pr=qr;
  61. // qr=qr->link;
  62. // }
  63. // qr=p;
  64. // }
  65. // else{
  66. // ready=p;
  67. // }
  68. //}
  69. void sort(){
  70. int len=space();
  71. if(len==1){
  72. if(ready->super>p->super){
  73. p->link=ready;
  74. ready=p;
  75. }else{
  76. ready->link=p;
  77. }
  78. }
  79. else if(len>1){
  80. PCB* pr=ready,*qr=ready->link;
  81. while(qr!=NULL){
  82. // printf("&&&&&&&&&&&&&&&&&&&&&&\n");
  83. if(qr->super>p->super){
  84. pr->link=p;
  85. p->link=qr;
  86. break;
  87. }
  88. pr=pr->link;
  89. qr=qr->link;
  90. }
  91. pr->link=p;
  92. }
  93. else{
  94. ready=p;
  95. }
  96. // È¥µôÔËÐÐÍêµÄ
  97. // res=NULL;
  98. // PCB *rpr=res,*pr=ready,*pp;
  99. // while(pr!=NULL){
  100. // if(pr->state=='w'){
  101. printf("&&&&&&&&&&&&&&&&&&&&&&\n");
  102. // pp=pr;
  103. // pp->link=NULL;
  104. // rpr=pp;
  105. // rpr=rpr->link;
  106. // }
  107. // pr=pr->link;
  108. // }
  109. // ready=res;
  110. PCB *pr=ready,*qr;
  111. while(pr->state!='w')pr=pr->link;
  112. ready=pr;
  113. qr=ready->link;
  114. while(qr!=NULL){
  115. if(qr->state=='w'){
  116. pr=qr;
  117. pr=pr->link;
  118. pr=NULL;
  119. }
  120. qr=qr->link;
  121. }
  122. printf("sort-len: %d\n",space());
  123. }
  124. // ÕâÑùºÃÏñ¸ü¼òµ¥
  125. //void sort(){
  126. // int len=space();
  127. // PCB *res=NULL,*rpr=res,*pr=ready;
  128. // if(len){
  129. // while(pr!=NULL||p!=NULL){
  130. // if(pr->state=='R'){
  131. // if(pr!=NULL&&p!=NULL){
  132. // if(pr->super>p->super){
  133. // rpr=p;
  134. // rpr=rpr->link;
  135. // p=NULL;
  136. // }else{
  137. // rpr=pr;
  138. // rpr=rpr->link;
  139. // pr=pr->link;
  140. // }
  141. // }else if(pr!=NULL&&p==NULL){
  142. // rpr=pr;
  143. // rpr=rpr->link;
  144. // pr=pr->link;
  145. // }else{
  146. // rpr=p;
  147. // rpr=rpr->link;
  148. // p=NULL;
  149. // }
  150. // }else{
  151. // pr=pr->link;
  152. // }
  153. // }
  154. // }
  155. // else{
  156. // res=p;
  157. // }
  158. // ready=res;
  159. //}
  160. // ½¨Á¢½ø³Ì¿ØÖƿ麯Êý
  161. void input() {
  162. int i,num;
  163. printf("\n ÇëÊäÈë½ø³ÌÊýÁ¿?");
  164. scanf("%d",&num);
  165. for(i=0;i<num;i++){
  166. printf("\n ½ø³ÌºÅNo.%d:\n",i);
  167. p=getpch(PCB);
  168. printf("\n ÊäÈë½ø³ÌÃû:");
  169. scanf("%s",p->name);
  170. printf("\n ÊäÈë½ø³ÌÓÅÏÈÊý:");
  171. scanf("%d",&p->super);
  172. printf("\n ÊäÈë½ø³ÌÔËÐÐʱ¼ä:");
  173. scanf("%d",&p->ntime);
  174. printf("\n");
  175. p->rtime=0;p->state='w';
  176. p->link=NULL;
  177. sort();
  178. }
  179. }
  180. // ½¨Á¢½ø³ÌÏÔʾº¯Êý,ÓÃÓÚÏÔʾµ±Ç°½ø³Ì
  181. void disp(PCB * pr){
  182. printf("\n qname \t state \t super \t ndtime \t runtime \n");
  183. printf("|%s\t",pr->name);
  184. printf("|%c\t",pr->state);
  185. printf("|%d\t",pr->super);
  186. printf("|%d\t",pr->ntime);
  187. printf("|%d\t",pr->rtime);
  188. printf("\n");
  189. }
  190. // ½¨Á¢½ø³Ì²é¿´º¯Êý
  191. void check(){
  192. PCB* pr;
  193. //ÏÔʾµ±Ç°ÔËÐнø³Ì
  194. printf("\n **** µ±Ç°ÕýÔÚÔËÐеĽø³ÌÊÇ:%s",p->name);
  195. disp(p);
  196. pr=ready;
  197. //ÏÔʾ¾ÍÐ÷¶ÓÁÐ״̬
  198. printf("\n ****µ±Ç°¾ÍÐ÷¶ÓÁÐ״̬Ϊ:\n");
  199. while(pr!=NULL){
  200. disp(pr);
  201. pr=pr->link;
  202. }
  203. }
  204. // ½¨Á¢½ø³Ì³·Ïûº¯Êý(½ø³ÌÔËÐнáÊø,³·Ïû½ø³Ì)
  205. void destroy(){
  206. printf("\n ½ø³Ì [%s] ÒÑÍê³É.\n",p->name);
  207. free(p);
  208. }
  209. // ½¨Á¢½ø³Ì¾ÍÐ÷º¯Êý(½ø³ÌÔËÐÐʱ¼äµ½,ÖþÍÐ÷״̬
  210. void running(){
  211. (p->rtime)++;
  212. // µ÷ÓÃdestroyº¯Êý
  213. if(p->rtime==p->ntime)destroy();
  214. else{
  215. (p->super)--;
  216. p->state='w';
  217. // µ÷ÓÃsortº¯Êý
  218. sort();
  219. }
  220. }
  221. int main(){
  222. int len,h=0;
  223. char ch;
  224. input();
  225. len=space();
  226. // printf("len: %d\n",len);
  227. while((len!=0)&&(ready!=NULL)){
  228. ch=getchar();
  229. h++;
  230. printf("\n The execute number:%d \n",h);
  231. p=ready;
  232. ready=p->link;
  233. p->link=NULL;
  234. p->state='R';
  235. check();
  236. running();
  237. printf("\n °´ÈÎÒ»¼ü¼ÌÐø......");
  238. ch=getchar();
  239. }
  240. printf("\n\n ½ø³ÌÒѾ­Íê³É.\n");
  241. ch=getchar();
  242. return 0;
  243. }
  244. /*
  245. 2
  246. 000
  247. 0
  248. 1
  249. 111
  250. 1
  251. 2
  252. 5
  253. 000
  254. 0
  255. 1
  256. 111
  257. 1
  258. 2
  259. 222
  260. 2
  261. 3
  262. 333
  263. 3
  264. 4
  265. 444
  266. 4
  267. 5
  268. */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/555735
推荐阅读
相关标签
  

闽ICP备14008679号