실험 5 - 찾기 와 정렬 의 응용

3237 단어 데이터 구조
실험 내용
[문제 설명]
학생 정보 관리 시스템
[기본 요구]
학생 정보 관리 시스템 을 설계 하려 면 학생 대상 은 적어도 학 번, 성명, 성별, 성적 1, 성적 2, 총 성적 등 정 보 를 포함해 야 한다.다음 기능 을 실현 하도록 요구 합 니 다.
1. 저장 방식 을 선택 하 십시오. 배열, 링크 또는 파일 방식 을 기반 으로 합 니 다.
2. 총 성적 은 자동 으로 계산 해 야 한다.
3. 조회: 각각 학생 의 학 번, 이름 을 정 하고 학생 의 기본 정 보 를 찾 을 수 있 습 니 다 (적어도 두 가지 검색 알고리즘 으로 실현 해 야 합 니 다).
정렬: 각각 학생 의 학 번, 총 성적 에 따라 정렬 합 니 다 (최소 두 가지 정렬 알고리즘 으로 구현 해 야 합 니 다).
[테스트 데이터]
학생 들 이 소프트웨어 공학 의 테스트 기술 에 근거 하여 스스로 확정 하 다.
주요 사상
구조 체 를 만 들 고 파일 에서 데 이 터 를 구조 체 로 읽 습 니 다.중복 호출 에 대비 하여 두 개의 함 수 를 설정 합 니 다.학 번 에 대해 거품 을 일 으 키 는 순 서 를 사용한다. 즉, 서로 인접 한 두 개의 수 를 순서대로 비교 하고 소 수 를 앞 에 놓 으 며 대 수 를 뒤에 놓 고 전체 성적 에 대해 쌓 기 순 서 를 사용한다. 먼저 쌓 기 를 한 다음 에 쌓 기 순 서 를 조정 하고 마지막 에 쌓 기 순 서 를 한다.이름 으로 찾 을 때 순서대로 찾 고 학 번 으로 찾 을 때 반 으로 찾 습 니 다. 주의해 야 할 것 은 반 으로 학 번 을 찾 을 때 학 번 이 질서 가 있어 야 한 다 는 것 입 니 다.
코드 구현
#include//   
#include
#include
#include
using namespace std;
typedef struct{
    char num[4];
    char name[10];
    char sex[4];
    int score1;
    int score2;
    int sum;
}StuType;//       
typedef struct{
    StuType S[15];
    int stunum;
}Student;//     
void menu(){//  
    cout<0)&&(flag==1)){//flag  0,          ,        
        flag=0;
        for(j=1;j0)
            {
                flag=1;
                t=Stu.S[j];//      
                Stu.S[j]=Stu.S[j+1];
                Stu.S[j+1]=t;
            }
        --m;
    }
}
void HeapAdjust(Student &Stu,int s,int m){//   
    StuType rc=Stu.S[s];
    for(int j=2*s;j<=m;j*=2){// key            
        if(j=Stu.S[j].sum)break;//rc     s 
        Stu.S[s]=Stu.S[j];
        s=j;
    }
    Stu.S[s]=rc;//  
}
void CreatHeap(Student &Stu){//   
    int n=Stu.stunum;//     
    for(int i=n/2;i>0;--i)
        HeapAdjust(Stu,i,n);
}
void SumSort(Student &Stu){//   
    CreatHeap(Stu);
    StuType t;
    for(int i=Stu.stunum;i>1;--i){
        t=Stu.S[1];//                       
        Stu.S[1]=Stu.S[i];
        Stu.S[i]=t;
        HeapAdjust(Stu,1,i-1);
    }
    Allprint(Stu);
}
void NameSearch(Student &Stu){//    
    cout<>key;
    int nn,i;
    strcpy(Stu.S[0].name,key);//  
    for(i=Stu.stunum;;--i)//     
        if(strcmp(Stu.S[i].name,Stu.S[0].name)==0)
           {
                nn=i;
                break;
           }
    nn=i;
    if(i==0)
    {
         cout<>key;
    int nn=0;
    int low,high,mid;
    low=1;//       
    high=Stu.stunum;
    while(low<=high)
    {
        mid=(high+low)/2;
        if(strcmp(key,Stu.S[mid].num)==0)//      
        {
            nn=mid;
            break;
        }
        else if(strcmp(key,Stu.S[mid].num)<0)//           
            high=mid-1;
        else//           
            low=mid+1;
    }
    cout<>m;
    switch(m){
        case 1:
            NumSearch(Stu);
            break;
        case 2:
            NameSearch(Stu);
            break;
        case 3:
            NumSort(Stu);
            Allprint(Stu);
            break;
        case 4:
            SumSort(Stu);
            break;
        case 5:
            cout<

좋은 웹페이지 즐겨찾기