⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.h

📁 一个数据结构的大作业
💻 H
字号:
#ifndef LIST_H
#define LIST_H

#include <stdio.h>
#include <alloc.h>
#include <mem.h>
#include <string.h>

//Type///////////////////////////////////////////////////////
typedef struct
{
 char TrainNumber[6];
 char Kind[6];
 char Begin[11];
 char End[11];
 char BeginHour[3];
 char EndHour[3];
 char BeginMinute[3];
 char EndMinute[3];
 char Cost[5];
 struct TRAIN* NextTrain;
} TRAIN;
//ListFunction///////////////////////////////////////////////
void CopyData(TRAIN *ptrain,TRAIN train);
TRAIN *CreatList(TRAIN train);
TRAIN *AddTail(TRAIN *last,TRAIN train);
TRAIN *GetAt(TRAIN *head,int i);            //can't do with wrong
TRAIN **GetTrueAt(TRAIN **head,int i);
void   SetAt(TRAIN *head,int i,TRAIN train);//can't do with wrong
void   DeleteAt(TRAIN **head,int i);        //if i==0 head will be changed
void   DeleteAll(TRAIN **head);
int    GetCount(TRAIN *head);
void   Exchange(TRAIN **head,int index);
void   SortIt(TRAIN *head);
//FileFunction////////////////////////////////////////////////
void   SaveList(TRAIN *head,char *filename);
TRAIN *LoadList(char *filename);
//////////////////////////////////////////////////////////////
void CopyData(TRAIN *ptrain,TRAIN train)
{
 strcpy(ptrain->TrainNumber,train.TrainNumber);
 strcpy(ptrain->Kind,train.Kind);
 strcpy(ptrain->Begin,train.Begin);
 strcpy(ptrain->End,train.End);
 strcpy(ptrain->BeginHour,train.BeginHour);
 strcpy(ptrain->BeginMinute,train.BeginMinute);
 strcpy(ptrain->EndHour,train.EndHour);
 strcpy(ptrain->EndMinute,train.EndMinute);
 strcpy(ptrain->Cost,train.Cost);
}

TRAIN *CreatList(TRAIN train)
{
 TRAIN *ptemp;
 ptemp=(TRAIN*)malloc(sizeof(TRAIN));
 CopyData(ptemp,train);
 ptemp->NextTrain=NULL;
 return ptemp;
}
TRAIN *AddTail(TRAIN *last,TRAIN train)
{
 TRAIN *ptemp;
 ptemp=(TRAIN*)malloc(sizeof(TRAIN));
 CopyData(ptemp,train);
 ptemp->NextTrain=NULL;
 last->NextTrain=ptemp;
 return ptemp;
}
TRAIN *GetAt(TRAIN *head,int i)
{
 int k;
 TRAIN *ptemp=head;
 for(k=0;k<i;k++)
 {
  ptemp=ptemp->NextTrain;
 }
 return ptemp;
}
TRAIN **GetTrueAt(TRAIN **head,int i)
{
 int k;
 TRAIN **ptemp;
 ptemp=head;
 for(k=0;k<i;k++)
 {
  ptemp=&((*ptemp)->NextTrain);
 }
 return ptemp;
}
void SetAt(TRAIN *head,int i,TRAIN train)
{
 TRAIN *ptemp;
 ptemp=GetAt(head,i);
 CopyData(ptemp,train);
}
void DeleteAt(TRAIN **head,int i)
{
 TRAIN *ptemp1;
 TRAIN *ptemp2;
 TRAIN *ptemp3;
 TRAIN *ptemp4;
 int Count;
 Count=GetCount(*head);
 if(Count==0) return;
 else
 {
  if(Count==1) { ptemp1=*head; free(ptemp1); *head=NULL; }
  else
  {
   ptemp1=GetAt(*head,i);
   if(ptemp1->NextTrain==NULL)
   {
    free(ptemp1);
    ptemp4=GetAt(*head,i-1);
    ptemp4->NextTrain=NULL;
   }
   else
   {
    if(ptemp1==*head)
    {
     ptemp1=GetAt(*head,1);
     free(*head);
     *head=ptemp1;
    }
    else
    {
     ptemp2=GetAt(*head,i-1);
     ptemp3=GetAt(*head,i+1);
     ptemp2->NextTrain=ptemp3;
     //ptemp1=GetAt(*head,i);
     free(ptemp1);
    }
   }
  }
 }
}
void DeleteAll(TRAIN **head)
{
 TRAIN *ptemp=*head;
 TRAIN *ptemp2;
 if(ptemp==NULL) return;
 while(ptemp->NextTrain!=NULL)
 {
   ptemp2=ptemp;
   free(ptemp2);
   ptemp=ptemp->NextTrain;
 }
 free(ptemp);
 *head=NULL;
}
int GetCount(TRAIN *head)
{
 TRAIN *ptemp=head;
 int k=0;
 if(head!=NULL)
 {
  k++;
  while(ptemp->NextTrain!=NULL)
  {
   k++;
   ptemp=ptemp->NextTrain;
  }
 }
 return k;
}
void SaveList(TRAIN *head,char *filename)
{
 TRAIN *ptemp=head;
 FILE *fp=fopen(filename,"wb");
 if(fp==NULL) { printf("Creat file fail."); return;}
 while(ptemp!=NULL)
 {
  fwrite(ptemp,sizeof(TRAIN),1,fp);
  ptemp=ptemp->NextTrain;
  }
 fclose(fp);
}
TRAIN *LoadList(char *filename)
{
 TRAIN *ptemp1;
 TRAIN *ptemp2;
 TRAIN *head=NULL;
 TRAIN *last;
 FILE *fp=fopen(filename,"rb");
 if(fp==NULL) return NULL;
 head=(TRAIN*)malloc(sizeof(TRAIN));
 ptemp1=head;
 ptemp2=head;
 fread(ptemp1,sizeof(TRAIN),1,fp);
 while(!feof(fp))
 {
  ptemp1=(TRAIN*)malloc(sizeof(TRAIN));
  fread(ptemp1,sizeof(TRAIN),1,fp);
  //ptemp1=(TRAIN*)malloc(sizeof(TRAIN));
  ptemp2->NextTrain=ptemp1;
  last=ptemp2;
  ptemp2=ptemp1;
  //ptemp2=ptemp1;
 }
 free(ptemp2);
 last->NextTrain=NULL;
 fclose(fp);
 return (head);
}
void Exchange(TRAIN **head,int index)
{
 TRAIN *ptemp1;
 TRAIN *ptemp2;
 TRAIN *ptemp3;
 TRAIN *ptemp4;
 TRAIN **pmhead;
 if(GetCount(*head)<=1) return;
 if(GetCount(*head)==(index+1)) return;
 if(index==0)
 {
	ptemp1=(*head);
	ptemp2=ptemp1->NextTrain;
	ptemp3=ptemp2->NextTrain;
	*head=ptemp2;
	(*head)->NextTrain=ptemp1;
	ptemp4=(*head)->NextTrain;
	ptemp4->NextTrain=ptemp3;
 }
 else
 {
	pmhead=GetTrueAt(head,index);
	ptemp1=*pmhead;
	ptemp2=ptemp1->NextTrain;
	ptemp3=ptemp2->NextTrain;
	*pmhead=ptemp2;
	(*pmhead)->NextTrain=ptemp1;
	ptemp4=(*pmhead)->NextTrain;
	ptemp4->NextTrain=ptemp3;
 }
}
void SortIt(TRAIN *head)
{
/*
 int i,k;
 TRAIN *pt1,*pt2;
 int count=GetCount(head);
 for(i=0;i<count-1;i++)
	for(k=i;k<count-1;k++)
	{
	 pt1=GetAt(head,k);
	 pt2=GetAt(head,k+1);
	 if(strcmp(pt1->Begin,pt2->Begin)>0)
		Exchange(&head,
*/
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -