기타 강좌

우왕 자료구조에요.

사실 C++엔 class 라는게 있지만

순수 C에선 class가 아닌 struct, 구조체를 사용합니다.

거의 같은 방법으로 활용됩니다. 단지

class는 기본적인 속성이 private 즉, 함수내에서만 참조가능한 멤버들로 구성되어있고,

struct는 기본적인 속성이 public 즉, 모든 함수에서 참조가 가능한 멤버들로 구성되있습니다.

이것역시

멤버앞에 public: ,private: 등을 써줌으로 인위적인 조작이 가능합니다.

 

struct는 아래와 같이 선언합니다

(typedef는 생략해도 됩니다) struct TAG_NAME{

int a;

char b[20];

}name;

이렇게되면 TAG_NAME구조의 int a와 char형 배열 20개가 선언된 name이란이름의 구조체가 생성되는겁니다.

 

심지어 구조체 안에 다른 구조의 구조체를 넣을 수도 있습니다.

또한 struct는 자기 자신을 참조할 수도 있습니다.

*자기 참조 구조체 라고 부릅니다. (연결리스트의 기본 입니당.)

 

기본적인 자기참조 구조체는 아래와 같이 선언합니다.

struct STUDENT
{
 int a;
 struct STUDENT *next;
};

struct STUDENT *head;

 

구조체와 그 안 멤버중 자기를 다시 참조할 구조체를 선언한 후,

맨 처음에 시작 주소를 포함할 head 라는 포인터 구조체를 선언합니다.

그리고 기본적인 정보를 넣어줍니다.

head=(STUDENT *) malloc(sizeof(STUDENT));  //헤더의 메모리를 비워둡니다.
 head->next=NULL;   //헤더가 가르키는 정보가 아직은 없음으로 빈칸 처리합니다

 

이제 새로운 정보를 넣거나 보게 만들어야 하겠죠?

새로운 struct를 넣을 함수를 하나 만들어주시고

(struct를 리턴하는게 편함으로 struct STUDENT *asdf()이런식으로 만들어주시는게 편할껍니다)

struct STUDENT *New            //New라는 포인터구조체를 생성합니다.

New=(STUDENT *) malloc(sizeof(STUDENT));      //New의 형식인 STUDENT만큼의 메모리를 할당해줍니다.

 New->next=head->next;   //새로 선언한 구조체의 다음구조체를 원래있던 헤더의 다음 구조체로 바꿔치기합니다.
 head->next=New;   //그리고 이제 헤더의 다음구조체를 새로 선언한 구조체로 정의합니다.

이제 각종 정보를 New 포인터 구조체로 입력받은후

return New;  //New를 리턴 합니다.

 

여기까지 첫번째 설명!? 으로 할께요.

각종 이해를 위한 자료들을 링크해놓고는 싶지만 그것때문에 말이 많았던것 같아서

넣지 않았습니다.

 

 

 

아래는 제가 텀프로젝트로 사용했던 자기참조 구조체의 일부입니다

참고 바랍니다.

 

//선언부분

struct STUDENT
{
 char name[30];
 char major[30];
 char stunum[30];
 char chkorean[10];
 char chmath[10];
 char chenglish[10];
 int korean;
 int math;
 int english;
 struct STUDENT *next;
};

struct STUDENT *head;

 

 

//헤더의 설정

void header()
{
 head=(STUDENT *) malloc(sizeof(STUDENT));
 head->next=NULL;
}

 

 

//새로운 연결리스트 추가

struct STUDENT *addstudent()
{
 //연결리스트작성
 struct STUDENT *New;
 New=(STUDENT *) malloc(sizeof(STUDENT));
 New->next=head->next;
 head->next=New;
 //입력받기
 char info[6][10]={"이름 :","학과 :","학번 :","국어 :","수학 :","영어 :"};
 for(int i=2;i<8;i++)
 {
  go(22,i);
  puts(info[i-2]);
 }
 go(22,0);
 puts("새로운 학생정보를 입력합니다.");
 color(1);
 go(30,2);
 gets(New->name);
 go(30,3);
 gets(New->major);
 go(30,4);
 gets(New->stunum);
 go(30,5);
 gets(New->chkorean);
 New->korean=atoi(New->chkorean);
 go(30,6);
 gets(New->chmath);
 New->math=atoi(New->chmath);
 go(30,7);
 gets(New->chenglish);
 New->english=atoi(New->chenglish);
 color(0);

 //리턴
 return New;
}

 

 

//학생정보 표시

void view()
{
 int i=2,k=1;
 struct STUDENT *temp;
 temp=head->next;
 while(temp!=NULL)
 {
  go(22,i);
  printf("이름 : %s", temp->name);
  go(52,i);
  printf("정렬 : %d", k);
  go(22,i+1);
  printf("학과 : %s", temp->major);
  go(52,i+1);
  printf("학번 : %s", temp->stunum);
  go(22,i+2);
  printf("국어 : %s", temp->chkorean);
  go(37,i+2);
  printf("수학 : %s", temp->chmath);
  go(52,i+2);
  printf("영어 : %s", temp->chenglish);
  i+=4;
  k+=1;
  temp=temp->next;
 }
}

 

TAG •

Who's 코르뉴

?

10년차 쯔꾸르시리즈의 아웃사이더.

 제작 완성된 주요 게임들( 2003년 이전 게임들은 현재 자료가 남아있지도 기억도 잘 나지 않아서 생략)

The Knight Part 1 - 창조도시 게임자료실(2003)

The Knight Part 2 - 창조도시 완성작(2003)

The Knight Part 3 - 창조도시 완성작(2004)

The Knight Part 4 - 창조도시 완성작(2004)

The Knight Part 5 - 개인 보관 후 자료 소멸(2005)

Natural selection(아케이드) - 완성판 배포(2005)

Azure Moon (proto type) - 개인 보관 후 자료 소멸(2006)

Azure Moon : limitless addition - 체험판 배포, 완성판 개인 보관 후 자료 소멸(2006)

Stokesia(Azure Moon, proto type)  - 개인 보관 후 자료 소멸 (2007)

Stokesia(Azure Moon)  - 개인 보관 중(2008)

Natural selection(3D FPS Type) - 제작 중단 연구용 완성판 배포(2008)

코르뉴의 전설(proto type) - 체험판 배포, 개인 보관 중(2009)

 

Arcadia - 개인 제작, 테스팅 까지만 완료(2011)

TowerDefence - 개인 제작, 타워 디펜스 카페등에 알파버전까지만 수록(2011)

Avengers - 개인 제작, 일리히트 엔진 + Bullet엔진 사용, 알파 버전까지만 배포(2011)

 

연구과제

-Java 1.6

-mysql, php, flash 연동 웹게임

-Unity Engine with Flash

-Flixel Engine with Flash Builder


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 886
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 757
플래시 매우 쉽고 편리한 액션스크립트(추가중) 코르뉴 2012.08.06 2625
OSX (맥) 맥(Mac) smi <-> srt 파일 상호 변환 프로그램 다운로드(무료) 1 file 아방스 2016.07.16 2627
기타 프로그래밍 scheme 빨간 공을 움직이다가 특정 좌표에 가면 파랗게 만들어 보자. file 정체불명 2010.10.06 2648
기타 [VB6 강좌] 제5강 - 제어문 1 독도2005 2009.02.26 2661
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [정수의 정의] 4 제니스 2009.06.13 2664
기타 글쓸떄 본문에 이미지 삽입 하는법. 5 file 작은악마 2008.05.18 2665
에프터 이펙트 After Effects CS5.5 / 기능 아방스 2011.04.16 2668
C언어 컴파일러 다운하세용.. 1 제니스 2009.06.13 2685
웹디자인 관련 테이블은 이제 그만 쉬어야 할 때. 3 아방스 2007.11.07 2688
C언어 파일읽어서 배열에 넣고 다시배열에서 읽어서 화면에 출력 정체불명 2012.01.21 2701
C언어 c언어로 같은그림 찾기 만들기 -기획편 1 정체불명 2012.01.18 2707
기타 게임 엔진, 그것이 궁금하다. 7 아방스 2008.03.22 2718
기타 [파이썬] 파이썬을 배우자 )1( 6 - 하늘 - 2009.09.05 2730
기타 [C++] 랜덤 자라 2008.01.29 2740
C언어 [-구름-] 배열로 스택구현하기 3 [SST]구름 2009.06.13 2747
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [변수의 정의] 2 -Zennys- 2009.06.13 2752
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Download The Source Files Button file 아방스 2011.12.07 2752
기타 [꿈꾸는소년의 스토리강좌]RPG의 형식과 스토리 관계(2):액션RPG 12 file 꿈꾸는소년 2008.03.12 2754
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Light to Dark Web Buttons file 아방스 2011.12.07 2759
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [그외 입출력 함수] -Zennys- 2009.06.13 2764
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19