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

📄 c.txt

📁 一个简单的c语言中关于指针的算法
💻 TXT
字号:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct Data
{	
        char strName[20];   	
		char strStudentNo[10];	
		int 	iClassNo;			
		int 	iMark; 
		struct Data *priorData;
	    struct Data *nextData;
}DATA;




void main()
{
	FILE *fin,*fout;
	DATA *HeadData=(DATA *)malloc(sizeof(DATA));
	DATA *dTemp1=NULL,*dTemp2=NULL;
	int i,j;char c;
	int iRecordCount=0;
	char infilename[50];
	char outfilename[50]="C:\\grade_result.dat";
	printf("Please input filename:\n");
	gets(infilename);
	if ((fin=fopen(infilename,"r"))==NULL)
	{
		printf("---Cannot open this file!---\n");
		exit(0);
	}
	if ((fout=fopen(outfilename,"w"))==NULL)
	{
		printf("---Cannot open this file!---\n");
		exit(0);
	}

	HeadData->nextData=NULL;
	c=fgetc(fin);
	while(!feof(fin))
	{
		iRecordCount++;
		DATA *data=(DATA *)malloc(sizeof(DATA));	
		while(c!='\n'&&c!=EOF)
		{
			j=0;
			while(c!=',')
			{
				data->strName[j]=c;
				c=fgetc(fin);
				j++;
			}
			data->strName[j]='\0';

			j=0;
			c=fgetc(fin);
			while(c!=',')
			{
				data->strStudentNo[j]=c;
				c=fgetc(fin);
				j++;
			}
			data->strStudentNo[j]='\0';
			fscanf(fin,"%d",&data->iClassNo);
			c=fgetc(fin);
			fscanf(fin,"%d",&data->iMark);
			c=fgetc(fin);
		}
		c=fgetc(fin);
		if (HeadData->nextData==NULL)
		{
			HeadData->nextData=data;
			data->priorData=HeadData;
		}
		else
		{
			if (dTemp1!=NULL)
			{
				dTemp1->nextData=data;
				data->priorData=dTemp1;
			}
		}
		dTemp1=data;
	}
	dTemp1->nextData=NULL;
	for(i=0;i<iRecordCount;i++)
	{
		dTemp1=HeadData->nextData;
		while(dTemp1->nextData!=NULL)
		{	
			if(dTemp1->iClassNo>dTemp1->nextData->iClassNo)
			{	
				dTemp2=dTemp1;	
				dTemp2->priorData->nextData=dTemp2->nextData;
				dTemp2->nextData->priorData=dTemp2->priorData;		
				dTemp2->priorData=dTemp2->nextData;
				dTemp2->nextData=dTemp2->nextData->nextData;
				if(dTemp2->nextData!=NULL)
				{
					dTemp2->nextData->priorData=dTemp2;
				}
				dTemp2->priorData->nextData=dTemp2;        
			}
			
			else
			{
				dTemp1=dTemp1->nextData;
			}
		}
	}
	for(i=0;i<iRecordCount;i++)
	{
		dTemp1=HeadData->nextData;
		while(dTemp1->iClassNo==dTemp1->nextData->iClassNo)
		{	
			
			if(dTemp1->iMark<dTemp1->nextData->iMark)
			{
				dTemp2=dTemp1;	
				dTemp2->priorData->nextData=dTemp2->nextData;
				dTemp2->nextData->priorData=dTemp2->priorData;		
				dTemp2->priorData=dTemp2->nextData;
				dTemp2->nextData=dTemp2->nextData->nextData;
				if(dTemp2->nextData!=NULL)
				{
					dTemp2->nextData->priorData=dTemp2;
				}
				dTemp2->priorData->nextData=dTemp2;    
			}
			else
			{
				dTemp1=dTemp1->nextData;
			}
		}
	}
	for(i=0;i<iRecordCount;i++)
	{
		dTemp1=HeadData->nextData;
		while (dTemp1->iClassNo==dTemp1->nextData->iClassNo)
		{
			dTemp1=dTemp1->nextData;
		}
		dTemp1=dTemp1->nextData;
		while(dTemp1->nextData!=NULL)
		{	
			if(dTemp1->iMark<dTemp1->nextData->iMark)
			{
				dTemp2=dTemp1;	
				dTemp2->priorData->nextData=dTemp2->nextData;
				dTemp2->nextData->priorData=dTemp2->priorData;		
				dTemp2->priorData=dTemp2->nextData;
				dTemp2->nextData=dTemp2->nextData->nextData;
				if(dTemp2->nextData!=NULL)
				{
					dTemp2->nextData->priorData=dTemp2;
				}
				dTemp2->priorData->nextData=dTemp2;    
			}
			else
			{
				dTemp1=dTemp1->nextData;
			}
		}
	}

	for(dTemp1=HeadData->nextData;dTemp1!=NULL;dTemp1=dTemp1->nextData)
	{
		fprintf(fout,"%s,%s,%d,%d\n",dTemp1->strName,dTemp1->strStudentNo,dTemp1->iClassNo,dTemp1->iMark);
	}
	fclose(fin);
	fclose(fout);
	dTemp1=HeadData->nextData;
	while(dTemp1->nextData!=NULL)
	{
		HeadData->nextData=dTemp1->nextData;
		free(dTemp1);
		dTemp1=HeadData->nextData;
	}
	free(HeadData);
	HeadData=NULL;
	dTemp1=NULL;
	dTemp2=NULL;
	printf("---Order the Grades Completed,Results in %s !---\n",outfilename);
}

⌨️ 快捷键说明

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