操作系统实习第二个实验

#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