fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. typedef struct node{
  5. char course_name[50];
  6. char course_number[50],next_course_number[50],prior_course_number[50];
  7. struct node* next;
  8. struct node* prior;
  9. }node;
  10. int main(){
  11. int n;
  12. if(scanf("%d",&n)!=1||n<=0)return 0;
  13. node* course_list=(node*)malloc(sizeof(node)*n);
  14. if(course_list==NULL)return 1;
  15. for(int i=0;i<n;i++){
  16. (course_list+i)->next=NULL;
  17. (course_list+i)->prior=NULL;
  18. if(scanf("%s %s %s %s",(course_list+i)->course_number,(course_list+i)->next_course_number,(course_list+i)->prior_course_number,(course_list+i)->course_name)!=4){
  19. free(course_list);
  20. return 1;
  21. }
  22. }
  23. node* temp=NULL;
  24. for(int i=0;i<n;i++){
  25. if(strcmp((course_list+i)->prior_course_number,"0")==0){
  26. temp=course_list+i;
  27. break;
  28. }
  29. }
  30. node* head=temp;
  31. if(head==NULL){free(course_list);return 0;}
  32. node* current_link=head;
  33. current_link->prior=NULL;
  34. for(int i=0;i<n;i++){
  35. if(strcmp(current_link->next_course_number,"0")==0){
  36. current_link->next=NULL;
  37. break;
  38. }
  39. int found=0;
  40. for(int k=0;k<n;k++){
  41. if(strcmp((course_list+k)->course_number,current_link->next_course_number)==0){
  42. (course_list+k)->prior=current_link;
  43. current_link->next=(course_list+k);
  44. current_link=(course_list+k);
  45. found=1;
  46. break;
  47. }
  48. }
  49. if(!found)break;
  50. }
  51. if(current_link!=NULL&&strcmp(current_link->next_course_number,"0")==0){
  52. current_link->next=NULL;
  53. }
  54. char start_id[50],direction[5];
  55. if(scanf("%s %s",start_id,direction)!=2){
  56. free(course_list);
  57. return 1;
  58. }
  59. node* current=head;
  60. while(current!=NULL&&strcmp(current->course_number,start_id)!=0){
  61. current=current->next;
  62. }
  63. if(current==NULL){
  64. free(course_list);
  65. return 0;
  66. }else{
  67. if(strcmp(direction,"next")==0){
  68. while(current!=NULL){
  69. printf("%s\n",current->course_name);
  70. current=current->next;
  71. }
  72. }else if(strcmp(direction,"prior")==0){
  73. while(current!=NULL){
  74. printf("%s\n",current->course_name);
  75. current=current->prior;
  76. }
  77. }
  78. }
  79. free(course_list);
  80. return 0;
  81. }
Success #stdin #stdout 0.01s 5296KB
stdin
4
203 204 202 History
202 203 201 Art
201 202 0 English
204 0 203 Biology
203 prior
stdout
Standard output is empty