Acm Club 1325: 알고리즘 2 - 3 ~ 2 - 6: 빅 뱅

4925 단어 데이터 구조
제목 설명
대학원 공부 에 지 쳤 을 때 한 회 20 분 정도 의 《 생활 대폭 발 》 을 보 는 것 도 즐거움 을 잃 지 않 는 다.극 중 셸 던 은 일품 이 라 고 할 수 있 는데 레 너 드 가 이 일품 룸메이트 의 하루 종일 잔 소 리 를 어떻게 참 았 는 지 모르겠다.
그 거 알 아?셸 던 은 어 릴 때 부터 싫어 했 던 모든 사람의 이름 을 기록 한 신비 로 운 공책 을 가지 고 있다.스 튜 어 트 라 는 만화 가게 주인 이 바로 공책 의 일원 입 니 다. 누가 그 에 게 항상 무례 하 게 Sheldon 을 배척 하 라 고 했 습 니까? Sheldon 을 여러 번 이 긴 적 이 있 습 니까?
페 니 는 예 쁜 여자 로 호기심 도 많다.그녀의 호기심 을 만족 시 키 기 위해 서 나 는 작가 가 되 어 그녀 에 게 셀 던 의 작은 공책 이 어디 에 있 는 지 의외로 알 게 해 주 었 다.그래서 그녀 는 거의 매일 가서 위 에 어떤 사람 이 있 는 지 보 았 다.근 데 그 수첩 에 사람 이름 이 너무 많아 요.대학 안 다 녔 다 는 거 알 면 호텔 에서 종업원 으로 일 하 잖 아.똑똑 한 당신 이 그녀 를 도와 그 작은 공책 을 처리 해 주세요.
Sheldon 은 매일 소책자 에 인명 을 기록 합 니 다. 물론 그들 과 화해 하기 도 합 니 다. 소책자 에서 이 인명 을 삭제 하기 도 합 니 다.우 리 는 Sheldon 이 빈 노트 에 누 군 가 를 삽입 하고 삭제 하 며 조회 할 것 이 라 고 가정 합 니 다.
입력 형식
입력 데 이 터 는 한 그룹 만 있 고 줄 이 많 습 니 다.각 줄 의 형식 은 다음 과 같 을 수 있 습 니 다. insert a name delete name show search name 중 a 는 정수 입 니 다. a 번 째 이름 앞 에 이름 을 삽입 하 는 것 을 의미 합 니 다.name 은 하나의 이름 으로 영문 자모 만 포함 하 는 대소 문자 로 이름 당 30 자 를 초과 하지 않 습 니 다.목록 에 존재 하 는 이름 을 삽입 하지 않 고 목록 에 존재 하지 않 는 이름 을 삭제 하지 않 으 며 목록 에 존재 하지 않 는 이름 을 검색 하지 않 습 니 다.
출력
시작 할 때 목록 이 비어 있 습 니 다.쇼 와 search name 의 결과 만 출력 합 니 다.show 는 목록 의 이름 을 모두 출력 합 니 다. search 는 이 이름 의 번호 만 출력 합 니 다 (1 부터).출력 이 한 줄 을 차지 할 때마다 이름 사 이 를 빈 칸 으로 구분 합 니 다.목록 에 이름 이 없 으 면 show 에서 도 빈 줄 을 출력 해 야 합 니 다.
샘플 입력
insert 1 Stuart insert 2 Bernadette show search Stuart delete Stuart show insert 2 Stuart show insert 1 Amy insert 2 Leslie insert 3 Stephanie show delete Leslie show search Stuart
샘플 출력
Stuart Bernadette 1 Bernadette Bernadette Stuart Amy Leslie Stephanie Bernadette Stuart Amy Stephanie Bernadette Stuart 4
코드
#include 
#include 
#include 

#define LIST_INIT_SIZE 100         //              
#define LISTINCREMENT 10        //             
typedef int Status;                        //          
#define OK 1
#define ERROR 0

typedef struct{                //       ,        ,        
        char name[100];
}ElemType;

typedef struct{
        ElemType * elem;        //       
        int length;                        //     
        int listsize;                //          ( sizeof(ElemType)   )
}SqList;

Status InitList_Sq(SqList *L) { //   2.3
        //          L。
        L->elem = (ElemType *) malloc(LIST_INIT_SIZE*sizeof(ElemType));
        if (!L->elem)
                return OK; //       
        L->length = 0; //      0
        L->listsize = LIST_INIT_SIZE; //       
        return OK;
} // InitList_Sq

Status ListInsert_Sq(SqList *L, int i, ElemType e) { //   2.4
        //       L  i           e,
        // i     1≤i≤ListLength_Sq(L)+1
        ElemType *p;
        if (i < 1 || i > L->length + 1)
                return ERROR; // i    
        if (L->length >= L->listsize) { //         ,    
                ElemType *newbase = (ElemType *) realloc(L->elem, (L->listsize
                                + LISTINCREMENT) * sizeof(ElemType));
                if (!newbase)
                        return ERROR; //       
                L->elem = newbase; //    
                L->listsize += LISTINCREMENT; //       
        }
        ElemType *q = &(L->elem[i - 1]); // q     
        for (p = &(L->elem[L->length - 1]); p >= q; --p)
                *(p + 1) = *p;
        //             
        *q = e; //   e
        ++L->length; //    1
        return OK;
} // ListInsert_Sq

Status ListDelete_Sq(SqList *L, int i, ElemType *e) { //   2.5
        //       L    i   ,  e    。
        // i     1≤i≤ListLength_Sq(L)。
        ElemType *p, *q;
        if (i < 1 || i > L->length)
                return ERROR; // i    
        p = &(L->elem[i - 1]); // p         
        *e = *p; //          e
        q = L->elem + L->length - 1; //        
        for (++p; p <= q; ++p)
                *(p - 1) = *p; //             
        --L->length; //    1
        return OK;
} // ListDelete_Sq

int LocateElem_Sq(SqList L, ElemType e, Status(*compare)(ElemType, ElemType)) { //   2.6
        //       L    1   e  compare()      。
        //    ,     L    ,    0。
        int i;
        ElemType *p;
        i = 1; // i     1      
        p = L.elem; // p     1        
        while (i <= L.length && !(*compare)(*p++, e))
                ++i;
        if (i <= L.length)
                return i;
        else
                return 0;
} // LocateElem_Sq

void ListShow(SqList L){
        //                ,           
        int i;
        for(i=0;i

좋은 웹페이지 즐겨찾기