==========================================================================================
네트워크
==========================================================================================
<C>
=꼬리삽입
1. 포인터 추가
2. 끝먼저 찾고 할당
-정렬안됨
-연결리스트중 쉬운 코드
#include <stdio.h> #include <stdlib.h>
typedef struct _node { int iNum; struct _node * stNext; //자기참조포인터(*없으면 이론상 무한대 크기) }node;
void Node_Print(node *); void Node_Free(node *);
void Node_Init(node * stTemp) { if(0 == stTemp) { return; }
printf("번호를 입력하시오\n"); scanf("%d",&stTemp->iNum); stTemp->stNext = 0; return; }
node * Node_Insert1(node * stHead) { node * stTemp = malloc(sizeof(node)); Node_Init(stTemp); stHead = stTemp; // 함수 종료시 stTemp와 stHead 소멸됨 return stHead; // 종료전 stHead의 값을 리턴 => main()의 Head로 넣어줌 }
void Node_Insert2(node ** stHead) { node * stTemp = 0; node * stESeeker; // END 찾기
if(0 == stHead) { return; }
stTemp = malloc(sizeof(node)); Node_Init(stTemp);
if(0 == *stHead) // 처음 한번만 동작 { *stHead = stTemp; // 함수종료시 stTemp와 stHead 소멸되어도 // 동적할당 받은메모리는 남아있으며 // main()의 Head는 동적할당 받은 메모리를 가리킨다 return; } /* stTemp2 = *stHead; while(stTemp2->stNext) { stTemp2 = stTemp2->stNext; } */ stESeeker = *stHead; while(1) // END 찾을때까지 반복 { if(0 == stESeeker->stNext) //END면 { stESeeker->stNext = stTemp; break; } stESeeker = stESeeker->stNext; } //stHead->stNext = stTemp; //stTemp2->stNext = stTemp; return; }
int main() { node * Head = 0; unsigned int uiCnt; unsigned int uiInput; // node * Temp = 0;
/* Head = malloc(sizeof(node)); Head->iNum = 100; Head->stNext = malloc(sizeof(node)); Head->stNext->iNum = 200; // LINKED LIST(연결리스트) : 목록 Head->stNext->stNext = malloc(sizeof(node)); Head->stNext->stNext->iNum = 300; Head->stNext->stNext->stNext = 0; */ // head = node_insert1(head); // 포인터 Node_Insert2(&Head); // 더블포인터 - 1번 호출
Node_Insert2(&Head); // 2번 호출
Node_Insert2(&Head); // 3호출 Node_Insert2(&Head); // 4번 호출
Node_Insert2(&Head); // 5호출 // printf("input 자료 개수를 입력하시오\n"); // scanf("%d",&uiInput);
//printf("%d-> ",Head->iNum); //printf("%d-> ",Head->stNext->iNum); //printf("%d-> ",Head->stNext->stNext->iNum); /* Temp = Head; while(0 != Temp ) { printf("%d-> ",Temp->iNum); Temp = Temp->stNext; } printf("NULL\n"); //putchar('\n'); */ Node_Print(Head); /* free(Head->stNext->stNext); // 반드시 끝에서부터 free free(Head->stNext); free(Head); */ /* while(0 != Head) { Temp = Head->stNext; free(Head); Head = Temp; } */ Node_Free(Head); return 0; }
void Node_Print(node * Temp) { while(0 != Temp ) { printf("%d-> ",Temp->iNum); Temp = Temp->stNext; } printf("NULL\n"); //putchar('\n'); return; }
void Node_Free(node * Head) { node * Temp;
while(0 != Head) { Temp = Head->stNext; free(Head); Head = Temp; } return; }
|



= 앞으로 삽입
#include <stdio.h> #include <stdlib.h>
typedef struct _node { int iNum; struct _node * stNext; //자기참조포인터(*없으면 이론상 무한대 크기) }node;
void Node_Print(node *); void Node_Free(node *);
void Node_Init(node * stTemp) { if(0 == stTemp) { return; }
printf("번호를 입력하시오\n"); scanf("%d",&stTemp->iNum); stTemp->stNext = 0; return; }
node * Node_Insert1(node * stHead) // * 포인터 { node * stTemp = malloc(sizeof(node)); Node_Init(stTemp); stHead = stTemp; // 함수 종료시 stTemp와 stHead 소멸됨 return stHead; // 종료전 stHead의 값을 리턴 => main()의 Head로 넣어줌 }
void Node_Insert2(node ** stHead) // 뒤로 삽입 - ** 더블포인터 { node * stTemp = 0; node * stESeeker; // END 찾기
if(0 == stHead) { return; }
stTemp = malloc(sizeof(node)); Node_Init(stTemp);
if(0 == *stHead) // 처음 한번만 동작 { *stHead = stTemp; // 함수종료시 stTemp와 stHead 소멸되어도 // 동적할당 받은메모리는 남아있으며 // main()의 Head는 동적할당 받은 메모리를 가리킨다 return; } /* stTemp2 = *stHead; while(stTemp2->stNext) { stTemp2 = stTemp2->stNext; } */ stESeeker = *stHead; while(1) // END 찾을때까지 반복 { if(0 == stESeeker->stNext) //END면 { stESeeker->stNext = stTemp; break; } stESeeker = stESeeker->stNext; } //stHead->stNext = stTemp; //stTemp2->stNext = stTemp; return; }
void Node_Insert3(node ** stHead) // 앞으로 삽입 { node * stTemp = 0;
if(0 == stHead) { return; }
stTemp = malloc(sizeof(node)); Node_Init(stTemp);
stTemp->stNext = *stHead; *stHead = stTemp; return; }
int main() { node * Head = 0; unsigned int uiCnt; unsigned int uiInput; // node * Temp = 0;
/* Head = malloc(sizeof(node)); Head->iNum = 100; Head->stNext = malloc(sizeof(node)); Head->stNext->iNum = 200; // LINKED LIST(연결리스트) : 목록 Head->stNext->stNext = malloc(sizeof(node)); Head->stNext->stNext->iNum = 300; Head->stNext->stNext->stNext = 0; */ // head = node_insert1(head); // 포인터 /* Node_Insert2(&Head); // 더블포인터 - 1번 호출
Node_Insert2(&Head); // 2번 호출
Node_Insert2(&Head); // 3호출 Node_Insert2(&Head); // 4번 호출
Node_Insert2(&Head); // 5호출 */ Node_Insert3(&Head);
Node_Insert3(&Head);
Node_Insert3(&Head); // printf("input 자료 개수를 입력하시오\n"); // scanf("%d",&uiInput);
//printf("%d-> ",Head->iNum); //printf("%d-> ",Head->stNext->iNum); //printf("%d-> ",Head->stNext->stNext->iNum); /* Temp = Head; while(0 != Temp ) { printf("%d-> ",Temp->iNum); Temp = Temp->stNext; } printf("NULL\n"); //putchar('\n'); */ Node_Print(Head); /* free(Head->stNext->stNext); // 반드시 끝에서부터 free free(Head->stNext); free(Head); */ /* while(0 != Head) { Temp = Head->stNext; free(Head); Head = Temp; } */ Node_Free(Head); return 0; }
void Node_Print(node * Temp) { while(0 != Temp ) { printf("%d-> ",Temp->iNum); Temp = Temp->stNext; } printf("NULL\n"); //putchar('\n'); return; }
void Node_Free(node * Head) { node * Temp;
while(0 != Head) { Temp = Head->stNext; free(Head); Head = Temp; } return; }
|




=선형정렬(올림/내림)
1 -> 2 -> 3 ->....
==========================================================================================
AVR
==========================================================================================
=AVR2560
=차동입력 ADC
=ADC 2, 3 PIN 사용



=
<ADC.H>

<ADC.C>

<MAIN.C>

<CF - 책 소스>
- AVR제공 HEADER INCLUDE => ADCW 사용


============================================================================================
=결과(값이 두배로 나옴 / 기준전압보다 낮을 경우 (-)값 표시 안됨 -- 문제)
- 3V - 2V = [+1V] => 결과는 [+2V]로 표시됨

<책 소스>
- 4V - 3V = [+1V] => 결과는 [+2V]로 표시됨

-기준전압이 높을 경우 (-)표시 안됨
- 3V - 4V = [-1V] => [0V] 표시됨
