분류 | 게시판 |
베스트 |
|
유머 |
|
이야기 |
|
이슈 |
|
생활 |
|
취미 |
|
학술 |
|
방송연예 |
|
방송프로그램 |
|
디지털 |
|
스포츠 |
|
야구팀 |
|
게임1 |
|
게임2 |
|
기타 |
|
운영 |
|
임시게시판 |
|
Alg createSet(n)
input input integer n
output set
1. i ← 0
2. S ← an empty set // 헤더와 트레일러 노드 생성
3. MIN ← 0
4. MAX ← 50,000
5. while (i < n) // member와 insertElem의 이중작업이 아닌 단일작업으로 할경우 가산점수
x ← a random number between MIN and MAX
if (!member(x, S)) //member함수의 경우 헤더존재를 유의
insertElem(x, S) //정렬 위치에 삽입할 것
i ← i + 1
6. return S
Alg member(x, S)
input set A, element e
output boolean
1. if (S.isEmpty()) // S->next->elem ==NULL
return 0;
2. p ← S.first() // S->next
3. while(True)
a ← S.element(p) //p->elem ( 함수 구현 X )
if (a<e)
if(S.isLast(p)) //p->next == NULL
return 0;
else
p ← S.after(p) //p = p->next
…
양방향 연결리스트 insertElem(x, S)함수 팁
1. 매개변수로 들어온 노드포인터를 포함하여 총 3개의 포인터 필요
삽입할 노드위치를 찾는 포인터1 (매개변수로 들어온 노드포인터S를 이용)
포인터1의 다음 노드를 참조 할 포인터2 (선언만 하고 나중에 초기화)
삽입할 새로운노드를 참조 할 포인터3 (동적할당받아 새로운노드 생성 elem을 x로 초기화)
2. 무한반복문을 통하여 포인터1을 계속 다음노드를 가르키게 함.
반복문내에 포인터1의 다음노드 elem이 null이거나(트레일러) x보다 크거나 같을경우 break
3. 포인터2를 포인터1의 다음노드로 초기화
4. 포인터3의 새로운 노드를 포인터1의 노드와 포인터2의 노드 사이에 삽입( 양방향 연결리스트에 맞게 연결을 갱신하는 작업)
//솔직히 말해서 이게 무슨 소린지 거의 이해가 안가요....의사코드란게 일반인도 알아볼수있게 한게 의사코드 라는데 전 일반인보다 못한가봐요,,ㅡ,.ㅡ 대체적으로 궁금한게 헤드와 트레일러는 선언해서 대체 어디다 쓰는가와 동적배열은 삽입함수에서만 쓰는건가 궁금합니다. 그리고 S가 새로삽입할 노드인게 아닌건가요? 삽입함수에서 선언하는 노드 포인터들은 대체 정체가 뭐죠......오후5시까지 제출이라 부끄러움을 무릅쓰고 질문해 봅니다.
죄송합니다. 댓글 작성은 회원만 가능합니다.