1) 자료의 표현

     -자료(Data)->본질에 대한 현상을 나타내는 기호

     - "자료처리는 프로그램이나 자료를 컴퓨터에 입력하여 중앙 처리 장치(CPU)를 통해 원하는 정보나 결과를 얻는과정

2) 자료구조의 개념

     - 자료원소 간의 논리적인 관계가 표현되도록 구성한 자료 원소의 집합

     -자료구조의종류: 

         *기본자료구조= 가장간단한 자료구조, 정수,실수,문자등을 말함. 프로그램언어에서 자료형(Data Type)이라고 하여

                                내장제공됨

          *파생자료구조 = 기본 자료형을 사용해 만들어지는 구조, 대부분의 고급언어에서 내장되어 제공, 배열,구조체,포인터등

                                  을 말함.

           *사용자정의 자료구조 = 사용자가 만들어서 사용해야하는 구조, 자료원소간의 논리적인 인접관계에 의해

                                             선형과 비선형 구조로 구분됨.

  

3)자료구조와 알고리즘이 관계

    - 대표적 자료구조 : 배열, 연결리스트, 스택, 큐, 트리 , 그래프

                  ->컴퓨터 메모리에 어떻게 자료를 배열하는지를 나타내는 자료구조

 기본 자료구조

 파생 자료구조 

사용자 정의 자료구조 

 선형

 비선형

 정수

실수

문자

배열 

구조체

포인터

클래스

 연결리스트

스택

 트리

그래프

 

 

 

 

4)자료처리작업

  - 접근(Access) :자료구조에서 원하는 내용을 조사하거나 변경하기위해 그위치를 찾는것

  - 삽입(Insertion):새로운 자료를 해당 자료구조에 추가하는것

  - 삭제(Deleteion):자료구조에서 한 자료를 제거하는것

  - 검색(Serching):자료구조에서 필요한 자료또는 노드를 찾는것

  - 복사(Copying):자료의 전체 또는 일부를 복사하여 새로운 자료구조를 만드는것

  - 정렬(Sorting):자료구조에서 원하는 내용을 조사하거나 변경하기 위해 그 위치를 찾는것

   - 병합(Marging):둘 또는 그 이상의 자료들을 하나의 자료구조의 자료로 합치는것

   - 분리(Splitting):한 자료구조내의 자료들을 둘 또는 그이상 새로운 자료구조로 분리하는것.

  

    -선형리스트 -LIFO :후입선출 리스트

                      -FIFO:선입선출 리스트


Point 란 번지. 포인터변수란 포인터를 저장할수 있는 변수 = 메모리의 특정위치를 저장

int *imsip; 의 정의는 imsip에 번지를 저장할수 있다는 뜻.

&연산자가 특정변수의 선두번지를 뜻한다면, *연산자는 그반대.
포인터변수에 저장된 선두번지를 참조하여 하나의값을 취함.


*imsip =1000;     //imsip가 가르키는곳에 1000을 대입.
  └→ imsip가 가르키는곳이 정확히 명시되어야함.

-Point는 형구별없이 무조건 4byte!


#include<stdio.h>
void main()
{
   typedef int_var;
   int a=100;
   int_var b=200;
   printf("%d %d \n",a,b);
}


*typedef 실행시 그다음부터는 int형 자료형을 사용할때 int_var이라는 병명을 사용해서 선언가능.

◎구조체에 적용

typedef struct student {
   int id;
   char name[20];
   int kor,eng,math;
   char address[100];
}People;
void main()
{
   People ST, *p;
   p= &ST;
       .
       .
       .
}


People → 별명으로 선언

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

구조체와 포인터  (0) 2011.08.17
구조체와 배열  (0) 2011.08.17
구조체  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17

void main()
{
   p= &ST;
   printf("학번입력");
   scanf("%d"&p->id);

   printf("이름입력");
   scanf("%s",&p->name);
 
  printft("국,영,수 입력");
  scanf("%d %d %d",&p->kor,&p->eng,&p->math);

  printft("집주소");
  scanf("%s",&p->address);

  printf("학번: %d", p->id);
  printf("이름:%s", p->name);
  printf("국,영,수 성적: %d %d %d",p->kor, p->eng, p->math);
  printf("집주소:%s",p->address);


※scanf("%s",p->name); → 띄어쓰기로 공백입력시 null값으로 인식, 띄어쓰기 전까지만 기억함
    gets(p->name); → 한번만입력했는데 enter키가 자동으로 들어감 gets() 전에 scanf로
                                입력받을때 enter키가 버퍼에 남아있어서 gets()가 받아서 name에 넣어버림
    getch(p->name); → enter값을 받아서 저장도안하고 사라짐

⊙해결방법: 버퍼 초기화 fflush(stdin);
                     
-   fflush(stdin);
    gets(p->name);

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

typedef  (0) 2011.08.17
구조체와 배열  (0) 2011.08.17
구조체  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17

#include<stdio.h>
struct student{
   int id;
   char name[20];
   int eng,kor,math;
   char address[100];
};

void main()
{
   struct student ST[2]= {{201154321,"hong gil dong",90,91,92."서울 강남구 대치동"},
                                  {201112345,"kang gil dong",98,80,86,"서울 종로구 혜화동"}};

for(int i=0; i<2; i++)
{
   printf("ST구조체의 크기: %d \n",sizeof(ST));
   printf("ST학번: %d" ,ST[i].id);
   printf("ST이름: %s" ,ST[i].name);
                   .
                   .
                   .
}



*scnaf("%d",&ST.id) ← 로값을 입력받을수 있음.
  ST.id= 12345 형식으로 값직접대입가능.

구조체의 크기는 136
 136byte 가 2개선언 →ST[0] , ST[1]

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

typedef  (0) 2011.08.17
구조체와 포인터  (0) 2011.08.17
구조체  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17
구조체란?

사용자가 직접 자료형을 만들어서 사용하는것!

사용법                                       ex)
struct 구조체{                                            struct my_spec{
   자료형 변수 ;                                              int tall;
};                                                                 int  age;
                                                                   char name[20];
                                                                 };

위의 ex) 와같이 선언후
struct my_spec A;     → int 형 2개 char 형 한개를 묶어서 my_spec라는 자료형 A를 만듦.
A.tall = Value;



#include<stdio.h>
struct student{
   int id;
   char name[20];
   int kor,eng,math;
   char address[100];
};

void main()
{
   struct student ST= {201154321, "hong gil dong", 90,91,92,"서울 강남구 대치동"
};
   printf("ST구조체의 크기 : %d \n" sizeof(ST));
   printf("ST의 학번 : %d \n",ST.id);
   printf("ST의 이름: %s \n",ST.name);
   printf("ST의 성적(국,영,수):%d %d %d \n",ST.kor,ST.engm,ST.math);
   printft("ST의 주소:%s \n",ST.address);
}



*구조체를 정의하고 main에서 구조체 자료형(student)을 ST라는 변수로 선언.
  초기화는 구조체 타입에 정의한순서대로 (int, char,int,int,int,char)
printf문에서 ST.id  → 구조체의 접근은 .(마침표)로 접근


'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

구조체와 포인터  (0) 2011.08.17
구조체와 배열  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17
Call By Value  (0) 2011.08.17

Call by Referance란? 전달인자에 별명을 붙여줌.

ex)  void main()
{
   int name=10;
   int &nick= name;
}

※swap함수를 부를때 별명으로 &imsi_x, &imsi_y를 만듦.


#include<stdio.h>
void swap(int &imsi_x, &imsi_y);

void main()
{
   int x=10, y=20;
   printf("함수 호출전 x=%d y=%d",x,y);
   swap(x,y);
   printf("함수호출후 x=%d y=%d",x,y);
}

void swap(int &imsi_x, int &imsi_y)
{
   int temp=0;
   temp = imsi_x;
   imsi_x = imsi_y;
   imsi_y = temp;
   printf("함수안의 imsi_x = %d imsi_y = %d",imsi_x,imsi_y);
}

첫번째 main x=10, y=20
두번째 swap x=20, y=10
세번째 main x=20, y=10

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

구조체와 배열  (0) 2011.08.17
구조체  (0) 2011.08.17
Call by Address  (0) 2011.08.17
Call By Value  (0) 2011.08.17
다중포인터  (0) 2011.08.17

Call by Address란? 주소를 넘겨주는 방식


#include<stdio.h>
void swap(int *imsi_x, int *imsi_y);
int main()
{
   int x=10, y=20;
   printf("함수호출전 x= %d y=%d",x,y);
   swap(&x,&y);
   printf("함수호출후  x=%d y=%d",x,y);
}

void swap(int *imsi_x, int imsi_y)
{
   int temp=0;
   temp= *imsi_x;
   *imsi_x = *imsi_y;
   *imsi_y = temp;
   printf("swap 함수안 imsi_x=%d , imsi_y=%d",imsi_x,imsi_y);
}


첫번째 main  x=10, y=20
두번째 swap x=20, y=10
세번째 main x=20, y=10


*주소를 직접참조하여 값이 변경가능

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

구조체  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call By Value  (0) 2011.08.17
다중포인터  (0) 2011.08.17
다차원 배열(이차원배열)  (0) 2011.08.16

Call By Value 란? 함수에 값을 넘겨줌(복사값을 전달함으로 원본값이 변하지않음)
                              단점: 값을 넘겨줄때마다 고비용. 복사손실 단점


#include<stdio.h>
void swap(int imsi_x, int imsi_y);
void main()
{
   int x=10, y=20;
   printf("함수호출전 x= %d, y=%d", x,y);

   swap(x,y);

   printf("함수호출후 x=%d, y=%d, x,y);
}

void swap(int imsi_x, int imsi_y)
{
   int  temp =0;
   temp = imsi_x;
   imsi_x = imsi_y;
   imsi_y= temp;
  
   printf("swap 함수안의  imsi_x = %d, imsi_y= %d", imsi_x,imsi_y);
}


첫번째 main 함수출력값:   10,20
두번째 swap 함수출력값:   20,10
세번째 main 함수출력값:   10,20

*swap 함수가 실행될때 main함수에선 10과 20이라는 값이 복사되어 넘어감
 swap함수가 끝나고 main함수로 돌아왔을때 값이 바뀌지 않음.


'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17
다중포인터  (0) 2011.08.17
다차원 배열(이차원배열)  (0) 2011.08.16
배열 and 포인터  (0) 2011.08.16
다중포인터란?  포인터 변수의 주소를 담고 있는 포인터
 *(참조연산자)만큼 참조 연산이 일어나면서 접근함

 int **pp    : 이중포인터
 int ***ppp : 삼중포인터


#include<stdio.h>
void main()
{
   char arr[4][10] = {"Dog","Cat","Monkey",Mouse"};
   char (*p)[10];
   int i=0;
   p=arr;

   for(i=0;  i<4;  i++)
   {
      printf("배열 포인터 p+ %d = %s 주소: %d \n",i,p+i,p+i);
    }
   printf("\n");

   for(i=0;  i<4;  i++)
   {
       printf("이차원배열 arr + %d \ %s 주소: %d \n",i,arr+i,arr+i);
    }

 }



'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

Call by Address  (0) 2011.08.17
Call By Value  (0) 2011.08.17
다차원 배열(이차원배열)  (0) 2011.08.16
배열 and 포인터  (0) 2011.08.16
포인터  (0) 2011.08.16