본문 바로가기

C언어63

연결 리스트 (linked list) 연결 리스트 (linked list)배열과 달리 각각의 요소가 포인터를 사용하면서 다음 요소의 위치를 가리킨다.포인터를 사용하여 자료를 연결하는 다른 자료구조에는 스택, 큐, 트리, 그래프 등이 있다.연결리스트는 메모리상 아무 곳에나 위치하는 자료들을 서로 연결하여 하나로 묶는 방법이다.C에서는 서로를 연결하는 줄을 포인터로 구현한다. 연결 리스트를 사용하면 중간에 자료를 추가하여야할때,배열은 추가하는 자리부터 한칸씩 밀어내면서 전부 수정해줘야하지만 연결리스트는 연결하던 줄(포인터)만 수정하면된다.삭제할때도 마찬가지로 줄(포인터)만 수정하면 된다.또한 연결 리스트는 데이터를 저장할 공간이 필요할 때마다 동적으로 공간을 만들어 쉽게 추가할 수 있다.그러나 배열에 비해 상대적으로 구현이 어렵고 오류가 나는것.. 2024. 7. 13.
매크로 단순 매크로#define SIZE 100#define AND &&#define OR ||#define NOT !함수 매크로#define SUM(x,y) ((x)+(y))#define MAX(x,y) ((x)>(y))?(x):(y)일반적인 함수 사용과 달리 매개변수의 자료형을 써주지 않아도 된다.그러나 다음과 같이 증감 연산자를 사용하면 원치않은 결과가 나오기도 한다.#define SQUARE(x) ((x)*(x))int main (){ int x=2; printf("%d\n",SQUARE(++x)); //9가 아니고 16이 출력된다. // ++x * ++x 결과적으로 x의 값이 두번 증가하게된다. return 0;}# 연산자#includ.. 2024. 7. 9.
스트림과 파일 입출력 (성적 기록 및 계산기) #define _CRT_SECURE_NO_WARNINGS#include #include int main(){ FILE* fp; char fname[100]; int number, count = 0; char name[20]; float score, total = 0.0; printf("성적 파일 이름을 입력하시오: "); scanf("%s", fname); if ((fp = fopen(fname, "w")) == NULL) { fprintf(stderr, "성적파일 %s를 열 수 없습니다.\n", fname); exit(1); } while (1) { printf("학번, 이름, 성적을 입력하시오: (음수이면 종료) "); scanf("%d", &number); if (number 성적파일을 .. 2024. 7. 3.
2차원 공간상에서의 평행이동 (typedef 활용) typedef 활용#define _CRT_SECURE_NO_WARNINGS#include typedef struct coordinate { //구조체 좌표를 정의하면서 동시에 새로운 자료형인 POINT로 정의 int x; int y;}POINT;POINT translate(POINT p,POINT delta);int main(void){ POINT p; POINT delta; printf("coordinate : "); scanf("%d %d", &p.x, &p.y); printf("delta : "); scanf("%d %d", &delta.x, &delta.y); POINT result; result = translate(p,delta); //p를 delta만큼 평행이동하기 위해 함수호출, .. 2024. 6. 30.
문자열 처리 라이브러리 함수 int size=strlen("Hello"); //size는 5가 된다.#include strlen(s) //문자열 s의 길이를 구한다.strcpy(s1,s2) //s2를 s1에 복사한다.strcat(s1,s2) //s2를 s1끝에 붙여넣는다.strcmp(s1,s2) //s1과 s2를 비교한다.strncpy(s1,s2,n) //s2의 최대 n개의 문자를 s1에 복사한다.strncat(s1,s2,n) //s2의 최대 n개의 문자를 s1의 끝에 붙여넣는다.strncmp(s1,s2,n) //최대 n개의 문자까지 s1과 s2를 비교한다.strchr(s,c) //문자열 s안에서 문자 c를 찾는다.strstr(s1,s2) //문자열 s1에서 문자열 s2를 찾는다.char *strtok(s,delimit); //문자.. 2024. 6. 27.
문자 처리 라이브러리 #include isalpha(C) //c가 영문자인가(a~z,A~Z)isupper(c) //c가 대문자인가?(A~Z)islower(c) //c가 소문자인가?(a~z)isdigit(c) //c가 숫자인가?(0~9)isalnum(C) //c가 영문자이나 숫자인가?(a~z,A~Z,0~9)isxdigit(c) //c가 16진수의 숫자인가?(0~9,A~F,a~f)isspace(c) //c가 공백문자인가?(',''\n''\t''\v''\r')ispunct(c) //c가 구두점 문자인가?isprint(c) //c가 출력가능한 문자인가?iscntrl(c) //c가 제어 문자인가?isascii(c) //c가 아스키 코드인가?다음 문자 처리 함수들을 사용했을때 검사 결과가 참이면 1이 반환되고, 거짓이면 0이 반환된다... 2024. 6. 27.