#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include<conio.h> #define MAX_TRACK 100 int N; int j=0; int track[MAX_TRACK]; typedef struct node{ int num;//第几个节点 int track_num; char direction[10]; struct node *pro; struct node *next; }track_node; track_node *head,*node_list; //链表初始化 void init_list(track_node *list){ node_list=(track_node *)malloc(sizeof(track_node)); node_list->next=NULL; node_list->pro=NULL; } //初始化链表的num void init_list_num(track_node *list,int n){ int i; track_node *p; p=list->next; for(i=0;i<n;i++){ p->num=i+1; p=p->next; } } //建立链表 void rand_track_num(track_node *node_list,int N){ int i; int num; track_node *p,*temp; srand((int)time(NULL)); temp=node_list; for(i=0;i<N;i++){ p=(track_node *)malloc(sizeof(track_node)); num=rand()%100; p->num=i+1; p->track_num=num; printf("%d\n",p->track_num); p->next=NULL; temp->next=p; p->pro=temp; temp=p; } } //初始化磁盘扫描方向 void init_track_scan_direction(track_node *node){ char direction[10]; printf("输入初始扫描方向\n"); scanf("%s",&direction); strcpy(node->next->direction,direction); } int shortest_scan(track_node *list){ int point; int temp; int vale;//差值 int i; track_node *p; p=(list->next->next); if(p==NULL) return 1; temp=(list->next->track_num); vale=abs(temp-(p->track_num)); for(i=0;i<N;i++){ if((p->next)==NULL) break; if((abs(temp-(p->next->track_num)))<vale){ vale=abs(temp-(p->next->track_num)); point=p->next->num; } else p=p->next; } return point; } void delete_node(track_node *node,int n){ track_node *p,*temp,*ex; int i; p=node; ex=node->next; track[j]=ex->track_num; j++; for(i=1;i<=n-1;i++){ p=p->next; } temp=p->next; if(temp->next==NULL){ temp->pro->next=NULL; ex->track_num=temp->track_num; free(temp); }else{ temp->pro->next=temp->next; temp->next->pro=temp->pro; ex->track_num=temp->track_num; free(temp); } } int main(void){ init_list(node_list); printf("shur\n"); scanf("%d",&N); rand_track_num(node_list,N); init_track_scan_direction(node_list); int i; int b; int f; f=N; b=N; head=node_list->next; for(i=0;i<b;i++){ shortest_scan(node_list); delete_node(node_list,shortest_scan(node_list)); N-=1; init_list_num(node_list,N); } for(i=0;i<f;i++){ printf("%d->",track[i]); } return 0; }
操作系统实习第二个实验
猜你喜欢
转载自blog.csdn.net/qq_40955914/article/details/80287085
今日推荐
周排行