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

📄 datatest.c

📁 一个数据结构的大作业
💻 C
字号:
#include <stdio.h>
#include <alloc.h>
#include <mem.h>
#include <string.h>
#include <conio.h>

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);

//FileFunction////////////////////////////////////////////////
void   SaveList(TRAIN *head,char *filename);
TRAIN *LoadList(char *filename);
//////////////////////////////////////////////////////////////
int main(void)
{
 TRAIN atrain;
 TRAIN *ptrain;
 TRAIN *Head=NULL;
 TRAIN *Last=NULL;
 int i,k;
 strcpy(atrain.TrainNumber,"123");
 strcpy(atrain.Kind,"pk");
 strcpy(atrain.Begin,"Beijing");
 strcpy(atrain.End,"Shanghai");
 strcpy(atrain.BeginHour,"12");
 strcpy(atrain.EndHour,"15");
 strcpy(atrain.BeginMinute,"30");
 strcpy(atrain.EndMinute,"45");
 strcpy(atrain.Cost,"100");
 Head=CreatList(atrain);
 Last=Head;
 for(i=0;i<10;i++)
 {
  ptrain=AddTail(Last,atrain);
  Last=ptrain;
 }
 printf("AddTailComplete!\n");
 getch();
 for(i=0;i<11;i++)
 {
   ptrain=GetAt(Head,i);
   printf("%s ",ptrain->TrainNumber);
   printf("%s ",ptrain->Kind);
   printf("%s ",ptrain->Begin);
   printf("%s ",ptrain->End);
   printf("%s ",ptrain->BeginHour);
   printf("%s ",ptrain->EndHour);
   printf("%s ",ptrain->BeginMinute);
   printf("%s ",ptrain->EndMinute);
   printf("%s ",ptrain->Cost);
   printf("  :%d\n",i);
   getch();
 }
 i=GetCount(Head);
 printf("Count:%d\n",i);
 getch();
 strcpy(atrain.TrainNumber,"234");
 strcpy(atrain.Kind,"tk");
 strcpy(atrain.Begin,"Zhengzhou");
 strcpy(atrain.End,"Tianjing");
 strcpy(atrain.BeginHour,"1");
 strcpy(atrain.EndHour,"17");
 strcpy(atrain.BeginMinute,"10");
 strcpy(atrain.EndMinute,"00");
 strcpy(atrain.Cost,"500");
 SetAt(Head,4,atrain);
 SetAt(Head,7,atrain);
 SetAt(Head,0,atrain);
 printf("SetAt Complete.0,7,4.\n");
 getch();
 for(i=0;i<11;i++)
 {
   ptrain=GetAt(Head,i);
   printf("%s ",ptrain->TrainNumber);
   printf("%s ",ptrain->Kind);
   printf("%s ",ptrain->Begin);
   printf("%s ",ptrain->End);
   printf("%s ",ptrain->BeginHour);
   printf("%s ",ptrain->EndHour);
   printf("%s ",ptrain->BeginMinute);
   printf("%s ",ptrain->EndMinute);
   printf("%s ",ptrain->Cost);
   printf("  :%d\n",i);
   getch();
 }
 Exchange(&Head,0);
 Exchange(&Head,7);
 printf("Exchanged.0,1;7,8.\n");
 getch();
 for(i=0;i<11;i++)
 {
   ptrain=GetAt(Head,i);
   printf("%s ",ptrain->TrainNumber);
   printf("%s ",ptrain->Kind);
   printf("%s ",ptrain->Begin);
   printf("%s ",ptrain->End);
   printf("%s ",ptrain->BeginHour);
   printf("%s ",ptrain->EndHour);
   printf("%s ",ptrain->BeginMinute);
   printf("%s ",ptrain->EndMinute);
   printf("%s ",ptrain->Cost);
   printf("  :%d\n",i);
   getch();
 }
 DeleteAt(&Head,10);
 printf("DeleteAt Complete.10\n");
 getch();
 i=GetCount(Head);
 printf("Count:%d\n",i);
 for(i=0;i<10;i++)
 {
   ptrain=GetAt(Head,i);
   printf("%s ",ptrain->TrainNumber);
   printf("%s ",ptrain->Kind);
   printf("%s ",ptrain->Begin);
   printf("%s ",ptrain->End);
   printf("%s ",ptrain->BeginHour);
   printf("%s ",ptrain->EndHour);
   printf("%s ",ptrain->BeginMinute);
   printf("%s ",ptrain->EndMinute);
   printf("%s ",ptrain->Cost);
   printf("  :%d\n",i);
   getch();
 }
 DeleteAt(&Head,0);
 i=GetCount(Head);
 printf("Count:%d\n",i);
 for(i=0;i<9;i++)
 {
   ptrain=GetAt(Head,i);
   printf("%s ",ptrain->TrainNumber);
   printf("%s ",ptrain->Kind);
   printf("%s ",ptrain->Begin);
   printf("%s ",ptrain->End);
   printf("%s ",ptrain->BeginHour);
   printf("%s ",ptrain->EndHour);
   printf("%s ",ptrain->BeginMinute);
   printf("%s ",ptrain->EndMinute);
   printf("%s ",ptrain->Cost);
   printf("  :%d\n",i);
   getch();
 }
 /*DeleteAll(&Head);
 i=GetCount(Head);
 printf("Count:%d\n",i); */
 SaveList(Head,"test.dat");
 printf("Saved\n");
 getch();
 Head=NULL;
 Head=LoadList("test.dat");
 if(Head==NULL) { printf("File wrong.\n"); getch(); return 0; }
 i=GetCount(Head);
 printf("Count:%d\n",i);
 for(k=0;k<i;k++)
 {
   ptrain=GetAt(Head,k);
   printf("%s ",ptrain->TrainNumber);
   printf("%s ",ptrain->Kind);
   printf("%s ",ptrain->Begin);
   printf("%s ",ptrain->End);
   printf("%s ",ptrain->BeginHour);
   printf("%s ",ptrain->EndHour);
   printf("%s ",ptrain->BeginMinute);
   printf("%s ",ptrain->EndMinute);
   printf("%s ",ptrain->Cost);
   printf("  :%d\n",k);
   getch();
 }
 getch();

 return 0;
}

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;
}
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;
 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 *ptemp5;
 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;
 }
}
TRAIN **GetTrueAt(TRAIN **Head,int i)
{
 int k;
 TRAIN **ptemp;
 ptemp=Head;
 for(k=0;k<i;k++)
 {
  ptemp=&((*ptemp)->NextTrain);
 }
 return ptemp;
}

⌨️ 快捷键说明

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