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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.