(윤성우의 열혈 자료 알고리즘)3장/4장

Andy·2022년 3월 22일
0

자료구조

목록 보기
12/14
post-thumbnail

Abstract Data Type pg74~77
어떠한 것을 대상으로 그 대상의 기능이 무엇들이 있는지 나열한것.
예.) wallet의 adt
1. int take_out_money(wallet pw, int coin_num, int cash_num)
첫 번째 인자로 전달된 주소의 지갑에서 돈을 꺼낸다.
두 번째 인자로 꺼낼 동전의 수, 세번째 인자로 꺼낼 지폐의 수를 전달한다.
꺼내고자 하는 돈의 총액 반환, 그리고 그만큼 돈은 차감
2. int put_in_money(wallet
pw, int coin_num, int cash_num)
첫 번째 인자로 전달된 주소의 지갑에 돈을 넣는다
두 번째 인자로 넣을 동전의 수, 세번째 인자로 넣을 지폐의 수를 전달한다.
넣은 만큼 동전과 지폐의 수가 증가한다.

배열을 이용한 리스트의 구현 pg78
1. adt 정의
2. adt 이용해 main함수 정의
3. adt 이용해 리스트 구현

배열 adt pg80
void ListInit(List plist);
void LInsert(List plist, LData data);
int LFirst(List plist, LData pdata);
int LNext(List
plist, LData pdata);
LData LRemove(List
plist);
int LCount(List * plist);

배열 main함수 pg81

#include<stdio.h>
#incldue "ArrayList.h"
	int main(void)
    {
    List list;
    int data;
    ListInit(&list);
    LInsert(&list, 11); LInsert(&list,11);
    LInsert(&list, 22); LInsert(&list,22);
    Linsert(&list, 33);
    printf("현재 데이터의 수: %d \n", LCount(&list));
    if(LFirst(&list,&data))
    {
    printf("%d", data);
    while(LNext(&list, &data))
    printf("%d", data);
    }
    printf("\n");
    if(LFirst(&list, &data))
    {
    if(data ==22)
    LRemove(&list);
    while(LNext(&list, &data))
    {
    if(data==22)
    LRemove(&list);
    }
   }
   printf("현재 데이터의 수: %d \n", LCount(&list));
   if(LFirst(&list, &data))
   {
   printf("%d", data);
   while(LNext(&list, &data))
   printf("%d", data);
   }
   printf("\n");
   return 0;
   }

구현
1. 혜더파일의 정의
2. 삽입과 조회
3. 삭제

연결 리스트를 이용한 리스트의 구현
1. adt 정의
2. adt 이용해 main함수 정의
3. adt 이용해 리스트 구현

연결 리스트 adt pg123
void ListInit(List *plist);
void LInsert(List plist, LData data);
int LFirst(List plist, Ldata data);
int LNext(List plist, Ldata data);
LData LRemove(List plist)
int LCount(list plist);
void SetSortRule(List plist, int (comp)(LData d1, LData d2)); =>추가!!!

SetSortRule()함수의 대한 이해
반환형이 int 이고 LData형 인자를 2개 전달받는 함수의 주소 값을 전달

Double Linked list sort main함수 pg150

#include <stdio.h>
#include "DLinkedList.h"
int WhoIsPrecede(LData d1, LData d2) {
	if(d1 < d2)
		return 0;
	else
		return 1;
}
int main(void) {
	List list;
	LData data;
	ListInit(&list);
	SetSortRule(&list, WhoIsPrecede);
	LInsert(&list, 11); LInsert(&list, 11);
	LInsert(&list, 22); LInsert(&list, 22);
	LInsert(&list, 33);
	printf("현재 데이더의 수: %d\n", LCount(&list));
	if(LFirst(&list, &data)) {
		printf("%d ", data);
		while(LNext(&list, &data)) {
			printf("%d ", data);
		}
	}
	printf("\n\n");
	if(LFirst(&list, &data)) {
		if(data == 22)
			LRemove(&list);
		while(LNext(&list, &data)) {
			if(data == 22)
				LRemove(&list);
		}
	}
	printf("현재 데이더의 수: %d\n", LCount(&list));
	if(LFirst(&list, &data)) {
		printf("%d ", data);
		while(LNext(&list, &data)) {
			printf("%d ", data);
		}
	}
	printf("\n\n");
	return 0;
}

구현
1. 리스트 초기화와 노드 삽입
2. 데이터 조회
3. 노드의 삭제
4. 하나로 묶기

더미 노드
모든 경우에 있어서 동일한 삽입과정을 거친다는 것이 더미 노드 기반 연결 리스트의 장잠

profile
열정으로 가득 찬 개발자 꿈나무 입니다

0개의 댓글

관련 채용 정보