📄 list.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "List.h"
extern int total_number;
struct studentType* creat(int number)
{
int step_i;
studentType *ptemp,*phead,*ptemp2;
for(step_i=1;step_i<=number;step_i++)
{
ptemp=(struct studentType*)malloc(sizeof(struct studentType));
assert(ptemp!=NULL);
printf("\t\t姓名\t\t学号\t\t成绩\n\t\t");
scanf("%s\t\t",ptemp->name);
scanf("%ld\t\t",&ptemp->number);
scanf("%f",&ptemp->mark);
ptemp->counter=step_i;
ptemp->pNext=NULL;
if(step_i==1)
{
phead=ptemp;
ptemp2=ptemp;
continue;
}
ptemp2->pNext=ptemp;
ptemp2=ptemp;
}
return phead;
}
void output(struct studentType*pNext)
{
if(pNext!=NULL)
{
printf("\t\t编号\t\t姓名\t\t学号\t\t成绩\n\t\t");
printf("%-16ld%-16s%-16ld%f\n",pNext->counter,pNext->name,pNext->number,pNext->mark);
output(pNext->pNext);
}
}
void delete_all(struct studentType*pNext)
{
if((pNext->pNext)!=NULL)
{
delete_all(pNext->pNext);
}
else
{
free(pNext);
}
}
struct studentType* search(int search_number,struct studentType*phead,int search_type)
{
struct studentType*ptemp=phead;
switch(search_type)
{
case SEARCH:
do
{
if((ptemp->number)==search_number)
{
break;
}
ptemp=ptemp->pNext;
}while(ptemp!=NULL);
break;
case DELETE:
while(ptemp!=NULL)
{
if(ptemp->pNext->number==search_number)
{
break;
}
ptemp=ptemp->pNext;
}
break;
case INSERT:
while(ptemp->number!=search_number)
{
ptemp=ptemp->pNext;
if(ptemp==NULL)
{
break;
}
}
break;
default:break;
}
return ptemp;
}
void sort(struct studentType*phead,int number,int sort_type)
{
int step_i,step_j;
long number_temp;
float mark_temp;
char name_temp[20];
long counter_temp;
struct studentType *ptemp1=phead,*ptemp2=phead;
strcpy(name_temp,phead->name);
ptemp2=ptemp2->pNext;
switch(sort_type)
{
case NUMBER:
for(step_i=1;step_i<number;step_i++)
{
for(step_j=step_i;step_j<number;step_j++)
{
assert(ptemp1!=NULL);
assert(ptemp2!=NULL);
if(ptemp1->number>ptemp2->number)
{
number_temp=ptemp1->number;
ptemp1->number=ptemp2->number;
(ptemp2->number)=number_temp;
mark_temp=ptemp1->mark;
ptemp1->mark=ptemp2->mark;
(ptemp2->mark)=mark_temp;
strcpy(name_temp,ptemp1->name);
strcpy(ptemp1->name,ptemp2->name);
strcpy(ptemp2->name,name_temp);
counter_temp=ptemp1->counter;
ptemp1->counter=ptemp2->counter;
ptemp2->counter=counter_temp;
}
ptemp2=ptemp2->pNext;
if(ptemp2==NULL)
{
break;
}
}
ptemp1=ptemp1->pNext;
ptemp2=ptemp1->pNext;
}
break;
case MARK:
for(step_i=1;step_i<number;step_i++)
{
for(step_j=step_i;step_j<number;step_j++)
{
assert(ptemp1!=NULL);
assert(ptemp2!=NULL);
if(ptemp1->mark<ptemp2->mark)
{
number_temp=ptemp1->number;
ptemp1->number=ptemp2->number;
(ptemp2->number)=number_temp;
mark_temp=ptemp1->mark;
ptemp1->mark=ptemp2->mark;
(ptemp2->mark)=mark_temp;
strcpy(name_temp,ptemp1->name);
strcpy(ptemp1->name,ptemp2->name);
strcpy(ptemp2->name,name_temp);
counter_temp=ptemp1->counter;
ptemp1->counter=ptemp2->counter;
ptemp2->counter=counter_temp;
}
ptemp2=ptemp2->pNext;
if(ptemp2==NULL)
{
break;
}
}
ptemp1=ptemp1->pNext;
ptemp2=ptemp1->pNext;
}
break;
}
}
struct studentType* insert_inner(struct studentType*p_before)
{
struct studentType*p_insert,*p_next;
p_insert=(struct studentType*)malloc(sizeof(struct studentType));
printf("\t\t姓名\t\t学号\t\t成绩\n\t\t");
scanf("%s\t\t",p_insert->name);
scanf("%ld\t\t",&p_insert->number);
scanf("%f",&p_insert->mark);
p_next=p_before->pNext;
p_insert->pNext=p_next;
p_before->pNext=p_insert;
p_insert->counter=++total_number;
return p_insert;
}
void insert_end(struct studentType*phead,int insert_number)
{
struct studentType*ptemp=phead;
while(ptemp->pNext!=NULL)
{
ptemp=ptemp->pNext;
}
ptemp->pNext=creat(insert_number);
}
void delete_part(struct studentType*ptemp_before,struct studentType*ptemp_after)
{
struct studentType*ptemp1=ptemp_before->pNext;
do
{
ptemp_before->pNext=ptemp1->pNext;
free(ptemp1);
ptemp1=ptemp_before->pNext;
}while(ptemp1!=ptemp_after);
}
void renew(struct studentType*phead)
{
struct studentType *ptemp=phead;
long counter=0,step_i;
while(ptemp!=NULL)
{
counter++;
ptemp=ptemp->pNext;
}
total_number=counter;
ptemp=phead;
for(step_i=1;step_i<=total_number;step_i++)
{
ptemp->counter=step_i;
ptemp=ptemp->pNext;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -