자료구조 공부기록<linked list 1>

성민개발로그·2021년 7월 22일
0

자료구조

목록 보기
1/2

책 <<열혈 자료구조>> 저자 윤성우 책속 문제 풀기.

책 링크: http://www.yes24.com/Product/Goods/6214396

문제에 필요한 무료 소스자료 링크:https://www.orentec.co.kr/jaryosil/DA_ST_1/add_form1.php

배운점

1.추상자료형(ADT)

"구체적인 기능의 완성과정을 언급하지 않고,순수하게 기능이 무엇인지를 나열한 것을 <추상 자료형> 라 한다."
사용자에게 사용방법 이외의 불필요한 부분까지 알도록 부담주지 않기위해서다.
구현한 추상자료형 기능들이 안에 구현을 안 들여다봐도 잘 사용할수있게 만든거면 잘 만든 추상자료형 이라고 할수있다.

문제 03-1

#include <stdio.h>
#include<stdlib.h>
#include "ArrayList.h"

int main(void)
{
//문제 03-1 연습
	List *head=malloc(sizeof(List));//리스트 생성
	LData data;
	LData total=0;
	ListInit(head); //초기화 함수사용
	for (int i = 1; i < 10; i++) {
		LInsert(head, i);
	}
	if (LFirst(head, &data)) {
		total += data;
		while (LNext(head, &data)) {
			total += data;
		}
		printf("total is:%d \n", total);
	}
	if (LFirst(head, &data)) {
		if (data % 2 == 0 || data % 3 == 0) {
			LRemove(head);
		}
		while (LNext(head, &data)) {
			if (data % 2 == 0 || data % 3 == 0) {
				LRemove(head);
			}
		}
	}
	if (LFirst(head, &data)) {
		printf("%d ", data);
		while (LNext(head, &data)) {
			printf("%d ", data);
		}
	}

	return 0;
	
}

실행결과

문제03-2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"ArrayList.h"
#include"NameCard.h"

int main(void) {
	char name[30];
	char phone[30];
	NameCard* name1 = malloc(sizeof(NameCard));
	NameCard* name2 = malloc(sizeof(NameCard));
	NameCard* name3 = malloc(sizeof(NameCard));
	NameCard* pdata = malloc(sizeof(NameCard));
	List* list = malloc(sizeof(List));
	name1 = MakeNameCard("sungmin","01050624408");
	name2 = MakeNameCard("tan", "010505647874");
	name3 = MakeNameCard("j-ho", "01050562224");
	ListInit(list);
	LInsert(list, name1);
	LInsert(list, name2);
	LInsert(list, name3);
	
	//특정이름 찾아서 정보출력,정보수정
	if (LFirst(list,&pdata)) { //포인터의 주소를 가져와야지 메인함수에서 pdata 의 값이 변경된다.
		if (!NameCompare(pdata, "j-ho")) {
			ShowNameCardInfo(pdata);
			ChangePhoneNum(pdata, "01051112222");
		}
		else {
			while (LNext(list,&pdata)) {
				if(!NameCompare(pdata, "j-ho")) {
					ShowNameCardInfo(pdata);
					ChangePhoneNum(pdata, "01051112222");
				}
			}
		}
	}
	//특정 이름 찾아서 정보삭제
	if (LFirst(list, &pdata)) {
		if (!NameCompare(pdata,"tan")){
			LRemove(list);
		}
		else {
			while (LNext(list, &pdata)) {
				if (!NameCompare(pdata, "tan")) {
					pdata =LRemove(list);
					free(pdata);
					break;
				}
			}
		}
	}
	// 남은 사람정보 모두 출력
	if (LFirst(list, &pdata)) {
		ShowNameCardInfo(pdata);
			while (LNext(list, &pdata)) {
				ShowNameCardInfo(pdata);
			}
	}
	return 0;
}

0개의 댓글