UXO Studio
  • 자료구조 00 : 자료구조와 알고리즘, 이름 짓기, typedef, 매크로 함수
    2024년 09월 25일 16시 39분 04초에 업로드 된 글입니다.
    작성자: UXO Studio

     

     

    01 자료구조

    02 알고리즘

    03 자료구조를 위한 C언어 코딩 스타일

    04 매크로 함수

     

     

     

     

     

    01 자료구조

     : 프로그램에서 처리할 자료를 표현, 저장하는 구조

     

     

     일상에서 자료구조와 대응하는 것들

    일상 자료구조
    해야할 일을 수첩에 기록 리스트
    책상에 책을 쌓아 올림 스택
    극장에서 티멧을 사기 위해 줄을 섬 
    영어 사전의 단어는 알파벳 순으로 정렬 정렬, 탐색
    회사의 계층적 조직도 트리
    지도에는 도시들의 연결 상태를 표시 그래프

     

     

     컴퓨터 프로그램 = 자료구조 + 알고리즘

     ex) 최대값 탐색 프로그램 = 배열 + 순차탐색

     

     

     

     

    02 알고리즘

     : 주어진 문제를 해결하는 개략적인 절차

     

     

    021 알고리즘 기술 방법

     

     

     자연어

     - 자연어로 기술

     - 사람이 이해하기 쉽지만 모호할 수 있음

     ex) 

    ArrayMax(A,n)
      
    배열 A의 첫번쨰 요소를 변수 tmp에 복사
    배열 A의 다음 요소들을 차례대로 tmp와 비교하면서 더 크면 tmp로 복사
    배열 A의 모든 요소를 비교했으면 tmp를 반환

     

     

     흐름도 Flow Chart 

     - 직관적이고 이해하기 쉬운 알고리즘 기술 방법

     - 복잡한 알고리즘의 우, 상당히 크고 복잡해짐

     ex) 

     

     

     프로그래밍 언어

     - 알고리즘의 가장 정확한 기술

     - 구체적인 사항들이 알고리즘의  핵심적인 내용들의 이해를 방해할 수 있음

     ex) 

    #define MAX_ELEMENTS 100
    int score[MAX_ELEMENTS];		
    int find_max_score(int n)
    {  
    	int i, tmp;
    	tmp=score[0];
    	for(i=1;i<n;i++){ 
    	      if( score[i] > tmp ){
    		tmp = score[i];
    	      }
    	}
    	return tmp;
    }

     

     

     유사 코드 Pseudo-Code

     - 프로그래밍 언어의 표현 형태를 일부 사용

     - 설명의 편의를 위해 자연어를 부가적으로 기술

     - 유사코드는 어떤 프로그래밍 언어로도 구현 가능 (프로그래밍 언어 독립)

     ex) 

    for (i = 0; i < n; i++) {
        list[i]부터 list[n-1]까지를 검사하라;
        그 결과, list[min]이 가장 작은 값이라 하자;
        list[i]와 list[min] 값을 서로 교환(Interchange)하라;
    }

     

     

     

     

    03 자료구조를 위한 C언어 코딩 스타일

     

     

    031 이름 짓기

     

     

     상수 : 대문자로 구성, #define으로 정의

     - #define MAX_ELEMENT 100

     - #define PI 3.14

     

     

     변수명 : 소문자 사용, '_'으로 단어 분리, 변수 의미 단어 또는 약어

     - int increment;

     - int new node;

     - int newNode;

     

     

     함수명 : 동사 사용, 함수가 하는 작업 표기, 여러 자료구조를 사용하는 경우 자료구조의 이름을 붙임 

     - int add(ListNode *node)

     - int listAdd(ListNode *node)

     

     

    032 typedef

     : 사용자 정의 데이터 타입을 만드는 키워드

     - 코드를 깔끔하게 정리하는 데 도움이 됨

     - 오남용 시 코드를 이해하는 데 방해가 됨

     

     

     ex) 

    // 기본 타입에 새로운 이름 부여
    
    typedef float RealNumber;  // 'float' 타입에 'RealNumber'라는 이름을 부여
    
    // 'RealNumber'라는 이름을 사용해 변수를 정의할 수 있음
    
    RealNumber x = 3.14;  // 'float x = 3.14;'와 동일한 의미
    // 구조체에 새로운 이름 부여
    
    // 구조체 정의와 동시에 'struct ListNode'를 'ListNode'라는 이름으로 정의
    typedef struct ListNode {
        element data;               // 데이터를 저장하는 필드 (element 타입은 미리 정의되어 있어야 함)
        struct ListNode *link;      // 다음 노드를 가리키는 포인터
    } ListNode;
    
    
    // 'struct ListNode' 대신 'ListNode'로 간결하게 변수를 정의할 수 있습니다.
    
    ListNode node;  // 'struct ListNode node;'와 동일한 의미

     

     

     033 구조체

     : 서로 관련된 여러 데이터를 하나의 단위로 묶어주는 사용자 정의 데이터 타입

     ex) 

    #include <stdio.h>
    
    // 구조체 정의
    struct Person {
        char name[50];  // 이름 (문자열)
        int age;        // 나이 (정수형)
        float height;   // 키 (실수형)
    };
    
    int main() {
        // 구조체 변수 선언
        struct Person person1;
        
        // 구조체 멤버에 값 할당
        person1.age = 30;
        person1.height = 175.5;
        snprintf(person1.name, sizeof(person1.name), "John Doe");
    
        // 구조체 멤버 출력
        printf("Name: %s\n", person1.name);
        printf("Age: %d\n", person1.age);
        printf("Height: %.2f\n", person1.height);
    
        return 0;
    }

     

     

     

     

    04 매크로 함수

     

     

     일반 함수 : 함수 호출 방식, 더 안전하고 명확하며, 특히 포인터를 이용해 메모리를 직접 조작할 수 있음.

     ex)

    void swap(int *a, int *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    swap(&10, &20);

     

     

     

     매크로 함수 : 단순 텍스트 치환 방식, 컴파일 전에 확장됨, 빠르지만 오류 가능성 있음.

     ex) 

    #define SWAP(a, b, temp) { temp = a; a = b; b = temp; }
    
    SWAP(10, 20, temp);

     

     

     컴파일 전에 main 함수는 다음과 매크로 함수가 확장되어 컴파일 진행함

      ex)

    void main(void) {
    	int a = 10, b = 20, temp;
    
      	printf(“a = %d, b = %d", a, b);
     	(temp)=(a), (a)=(b), (b)=(temp);
    	printf (“a = %d, b = %d", a, b);
     	(temp)=(a), (a)=(b), (b)=(temp);
    	printf (“a = %d, b = %d", a, b);
    }

     

     

     

     

     

    #자료구조 #알고리즘 #C언어 #코딩스타일 #마크로함수 #매크로함수 #구조체 #typedef #포인터 #자료구조알고리즘 #컴퓨터과학 #프로그래밍 #유사코드 #PseudoCode #프로그래밍언어 #최대값탐색 #C언어자료구조 #코딩규칙 #함수명명법 #상수정의 #변수명규칙 #스택 #큐 #리스트 #트리 #그래프 #자료구조기초 #데이터구조 #프로그래밍기법 #프로그래밍팁 #컴퓨터프로그래밍 #코딩테크닉

    댓글