📄 list.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 + -