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를 계속  출력한다.