struct linkedlist{ int data; struct linkedlist *next; struct linkedlist *prev; }; typedef struct linkedlist LINKEDLIST; typedef LINKEDLIST *LINK; void heapTree( LINK *node, int data ){ if( *node == NULL ){ *node = newList(data); }else{ if( (*node)->data > data ){ heapTree( &(*node)->prev , data ); }else{ heapTree( &(*node)->next , data ); } } } void preorder( LINK node ){ if(node->data != NULL) printf("%d",node->data); if(node->prev != NULL) preorder(node->prev); if(node->next != NULL) preorder(node->next); } void postorder( LINK node ){ if(node->prev != NULL) preorder(node->prev); if(node->next != NULL) preorder(node->next); if(node->data != NULL) printf("%d",node->data); } void inorder( LINK node ){ if(node->prev != NULL) preorder(node->prev); if(node->data != NULL) printf("%d",node->data); if(node->next != NULL) preorder(node->next); } void main(void){ LINK root = NULL;//= (LINK)malloc(sizeof(LINKEDLIST)); heapTree(&root,11); heapTree(&root,10); heapTree(&root,12); printf(" PREORDER : "); preorder(root); printf(" POSTORDER : "); postorder(root); printf(" INORDER : "); inorder(root); }


'Tip & Tech > 적절한관계' 카테고리의 다른 글

[2 - 1 주차] 포인터를 이용한 리스트  (0) 2013.04.10
[1주차] c언어 기본  (0) 2013.04.10
posted by 알 수 없는 사용자

1 - 1 싱글 링크드 리스트

struct linkedlist{ int data; struct linkedlist *next; }; typedef struct linkedlist LINKEDLIST; typedef LINKEDLIST *LINK; LINK newList( int data ){ LINK list; list = (LINK)malloc(sizeof(LINKEDLIST)); list->data = data; list->next = NULL; return list; } void appendList( LINK list, LINK argu ){ list->next = argu; } LINK findList( LINK head, int value ){ LINK list = head; while(list->data != value){ list = list->next; if(list->next == NULL){ break; } } return list; } void deleteList( LINK head, LINK find ){ find->prev->next = find->next; free(find); } void printList( LINK head ){ LINK print = head->next; while(print != NULL){ printf("%d\n",print->data); print = print->next; } } void main(void){ head = newList(-1); appendList( head, newList(4) ); appendList( head, newList(3) ); appendList( head, newList(2) ); appendList( head, newList(1) ); deleteList( head, findList( head, 1 ) ); deleteList( head, findList( head, 3 ) ); printList(head); }


2 - 1 더블 링크드 리스트

struct linkedlist{
	int data;
	struct linkedlist *next;
	struct linkedlist *prev;
};
typedef	struct linkedlist LINKEDLIST;
typedef LINKEDLIST *LINK;

LINK newList( int data ){
	LINK list;
	list = (LINK)malloc(sizeof(LINKEDLIST));
	list->data = data;
	list->next = NULL;
	list->prev = NULL;
	return list;
}
void appendList( LINK list, LINK argu ){
	list->next->prev = argu;
	argu->next = list->next;
	list->next = argu;
	argu->prev = list;
}

LINK findList( LINK head, int value ){
	LINK list = head;
	while(list->data != value){
		list = list->next;
		if(list->next == NULL){
			break;
		}
	}
	return list;
}
void deleteList( LINK head, LINK find ){
	find->next->prev = find->prev;
	find->prev->next = find->next;
	free(find);
}
void printList( LINK head ,LINK tail){
	LINK print = head->next;
	while(print != tail){
		printf("%d\n",print->data);
		print = print->next;
	}
}
void init( LINK head, LINK tail ){
	head->next = tail;
	tail->prev = head;
}
void main(void){
	head = newList(-1);
	tail = newList(-1);
	init( head, tail );
	appendList( head, newList(4) );
	appendList( head, newList(3) );
	appendList( head, newList(2) );
	appendList( head, newList(1) );
	deleteList( head, findList( head, 1 ) );
	deleteList( head, findList( head, 3 ) );
	printList(head,tail);
}


'Tip & Tech > 적절한관계' 카테고리의 다른 글

[2 - 2 주차]트리, 힙 구현과 탐색  (0) 2013.04.10
[1주차] c언어 기본  (0) 2013.04.10
posted by 알 수 없는 사용자

< c 포인터의 기본 개념  >

1. 포인터

1 - 1 포인터와 증가연산자 

*++p 

*p++ 

++*p 

(*p)++ 


1 - 2 const 의 위치에 따른 차이점 

int * pi; 

const int * pi; 

int * const pi; 

const int * const pi;


1 - 3 배열과 포인터의 차이점

1. char str[43] = "apple";

2. char str[43];

str = "apple";

3. char* str = "apple";

4. char* str;

str = "apple";



2. 배열과 포인터의 할당 방법


2 - 1 포인터

int main(int arc, int **argv){
    char* pc = (char*)malloc(5*sizeof(char));
    int size_char = sizeof(char);
    printf("char = %d\n",size_char);
    free(pc);
    return 0;
}

2 - 2 배열

int main(int arc, int **argv){
    int len;
    printf("배열의 크기");
    scanf("%d",&len);
    int array[len];
}

2 - 3 calloc과 malloc

	int *arrays;
	int len;
	int i=0;

	printf("배열의 크기");
	scanf("%d",&len);
	arrays = (int*)malloc(sizeof(int)*len);
	memset(arrays, '0', len);
	//arrays = (int*)calloc(sizeof(int)*len);

2 - 4 배열을 가르키는 포인터

int main(int arc, int **argv){
	int col = 0, row= 0;
	int a[3][3] = {{1,2,3},{10,20,30},{100,200,300}};
	int (*pa)[3];
	pa = a;
}

2 - 5 void형 포인터

void (*pf)(void);//매개변수가 없고 반환값도 없는 함수포인터
void one(){
	printf("one");
}
void two(){
	printf("two");
}
void main(){
	pf = one;
	pf();
	pf = two;
	pf();
}

2 - 6 함수를 가르키는 포인터

void (*pf)(int*,int*);
void change(int* a, int* b){
	int temp = *a;
	*a = *b;
	*b = temp;
}

void main(){
	int a = 3;
	int b = 4;
	pf = change;
	pf(&a,&b);
	printf("%d,%d",a,b);
}
posted by 알 수 없는 사용자