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

📄 list.c

📁 链表
💻 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 + -