2010년/4월
4월1일 버블정렬 동적할당
뽀얀햄스터
2010. 4. 1. 09:19
- 버블정렬-
#include<stdio.h>
void bublle_sort(int array[],int count);
int main()
{
int iarray[5]={10,5,7,8,1};
bublle_sort(iarray,5)
return 0;
}
void bublle_sort(int array [ ], int count)
{
int iselect;
int isearch;
int itemp;
for(iselect=0; iselect<(count-1);++iselect)
{
for(isearch=0;isearch<(count-1-iselect);++isearch)
{
if(array[isearch]>array[isearch+1])
{
itemp=array[isearch];
array[isearch]=array[isearch+1];
array[isearch+1]=itemp;
}
}
}
}
malloc()함수:메모리의 동적할당-Heap영역
void *malloc(size_t size) _t=>>>typedef의 약자이며 unsigned int 형이다.malloc(크기) 가져오는 메모리주소를 반환~ 하지만 어떤자료형인지 모르니깐 void이다.
그래서 malloc(sizeof(int))하면 4바이트가 할당이된다. 만약 scanf로 받아서 malloc(sizeof(int)*inum)하면 더많은 공간을 할당받을수있다~!
하지만 malloc()사용시에 메모리에 사용한 공간을 반납을 해줘야한다. 그것은 바로 메모리에 공간에 얻어쓴후 반납하지 않으면 계속 남게 된다.. 그공간만큼 이게 쌓이고 쌓여서 많아지면 결국에 메모리 부족현상이 온다. 반납방법은 free()함수이다.
-연결리스트의 동적할당-
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
char data;
struct _node *next;
}NODE;
int main()
{
NODE *list;
NODE *temp;
list =(NODE *)malloc(sizeof(NODE));
list->data='a';
list->next = (NODE *)malloc(sizeof(NODE));
list->next->data='b';
list->next->next=(NODE *)malloc(sizeof(NODE));
list->next->next->data='c';
list->next->next->next=NULL;
temp=list;
while(NULL!=temp)
{
printf("%5c\n",temp->data);
temp=temp->next;
}
free(list);
return 0;
}
list->next=(NODE *)malloc(sizeof(NODE));
통해서 새로 구조체를 위한 메모리를 할당받고 list->next를 가리킨다.
이로인해서 구조체 포인터로 할당받을수있다...
-연결리스트를 인수로 넘겨받아 내용을 출력하는 함수-
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
char data;
struct _node *next;
}NODE;
void print_list(NODE *head);
int main()
{
NODE *list;
NODE *temp;
list =(NODE *)malloc(sizeof(NODE));
list->data='a';
list->next = (NODE *)malloc(sizeof(NODE));
list->next->data='b';
list->next->next=(NODE *)malloc(sizeof(NODE));
list->next->next->data='c';
list->next->next->next=NULL;
temp=list;
print_list(temp);
free(list);
return 0;
}
void print_list(NODE * head)
{
int inum;
for(inum=0;NULL!=head;head=head->next)
{
printf("%c==>",head->data);
}
printf("NULL");
}
책에서 내용은 재귀함수를 통해서 printf를 구현하지만 간단하게 for문을통해서 NULL이 아닐때까지 계속 head=head->next로 증감하고 printf()통해서 head->data를 계속 출력한다.