'C'에 해당되는 글 116건

  1. 2007.11.09 스택 stack by 청웨일
  2. 2007.11.09 단순 연결 리스트 by 청웨일
  3. 2007.11.09 배열, 구조체, 포인터 by 청웨일
  4. 2007.11.09 순환 by 청웨일
  5. 2007.11.09 자료구조와 알고리즘 by 청웨일

스택 stack

C/C자료구조 : 2007. 11. 9. 09:42

#include <stdio.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 100

typedef int element;
element stack[MAX_STACK_SIZE];
int top = -1;

int is_empty()
{
 return (top == -1);
}
int is_full()
{
 return (top == (MAX_STACK_SIZE-1));
}

//삽입함수
void push(element item)
{
 if(is_full()) {
  fprintf(stderr, "스택 포화 에러\n");
  return;
 }
 else stack[++top] = item;
}

//삭제함수
element pop()
{
 if(is_empty()) {
  fprintf(stderr, "스택 공백 에러\n");
  exit(1);
 }
 else return stack[top--];
}

//피크 함수
element peek()
{
 if(is_empty()) {
  fprintf(stderr, "스택 공백 에러\n");
  exit(1);
 }
 else return stack[top];
}

void main()
{
 push(1);
 push(2);
 push(3);
 printf("%d\n", pop());
 printf("%d\n", pop());
 printf("%d\n", pop());
 printf("\n");
 printf("%d\n", is_empty());
}

Posted by 청웨일

* 동적 메모리 할당


new_node = (ListNode *)malloc(sizeof(ListNode));

new_node는 ListNode형식을 가리킬수 있는 포인터로서

ListNode의 size만큼의 공간을 malloc할당 받는다.

 

 

p.128_프로그램 4.12 전체 테스트 프로그램

 

#include <stdio.h>
#include <stdlib.h>


typedef int element;


//구조체

typedef struct ListNode {  
 element data;
 struct ListNode *link;
} ListNode;

 

//삽입함수

void insert_node(ListNode **phead, ListNode *p, ListNode *new_node)
{                                              
 if(*phead==NULL) {
  new_node->link = NULL;
  *phead = new_node;
 }
 else if(p==NULL) {
  new_node->link = *phead;
  *phead = new_node;
 }
 else {
  new_node->link = p->link;
  p->link = new_node;
 }
}


//삭제함수

void remove_node(ListNode **phead, ListNode *p, ListNode *removed)
{
 if(p==NULL) *phead = (*phead)->link;
 else p->link = removed->link;
 free(removed);
}


//전체 출력

void display(ListNode *head)
{
 ListNode *p=head;
 while(p!=NULL) {
  printf("%d => ", p->data);
  p=p->link;
 }
 printf("\n");
}


//노드탐색

ListNode *search(ListNode *head, int x)
                                                 //찾을 리스트, 숫자
{
 ListNode *p;
 p=head;
 while(p!=NULL) {
  if(p->data == x) return p;
  p=p->link;
 }
 return p;
}


//노드생성

ListNode *create_node(element data, ListNode *link)
{
 ListNode *new_node;
 new_node = (ListNode *)malloc(sizeof(ListNode));
 if(new_node == NULL) printf("메모리 할당 에러");
 new_node->data = data;
 new_node->link = link;

 return (new_node);
}



main()
{
 ListNode *list1 = NULL, *list2 = NULL;
 ListNode *p;


 insert_node(&list1, NULL, create_node(10, NULL));  //삽입, 노드 생성
 insert_node(&list1, NULL, create_node(20, NULL));
 insert_node(&list1, NULL, create_node(30, NULL));
 display(list1);                        //출력


 remove_node(&list1, NULL, list1);          //노드 삭제
 display(list1);                       //출력


 p = search(list1, 20);   //탐색
 printf("탐색 성공: %d\n\n", p->data);

Posted by 청웨일
 

배열 - 거의 모든 프로그래밍 언어에서 기본적으로 제공한다.

*C언어 참조.


구조체 - 타입이 다른 데이터를 묶는 방법 //struct


struct [구조체명] [구조체변수명]{

        항목1;

        항목2;

        ...

}


struct person {

        char name[10];

        int age;

        float height;

};


구조체 생성

person a;


구조체의 접근

a.name[0] =

a.age =

a.heigjt  =


포인터  *C언어 참고


타입의 일치는 중요하다.

포인터는 배열의 이름

배열을 가리킬수도 있고, 구조체를 가리킬수도 있다.

함수를 가리키는 것도 가능하다.


동적메모리할당


(int *)malloc(sizeof(int));  // 정수형 1개를 저장할 메모리를 할당.

free(할당받았던 메모리) - 할당받았던 메모리를 반납한다.

Posted by 청웨일

순환

C/C자료구조 : 2007. 11. 9. 09:40
 

순환 - 어떤 알고리즘이나 함수가        자기 자신을 호출하여 문제를 해결하는 기법.



int factorial(int n)

{

        if(n <= 1) return (1);   //조건을 만족하면 순환을 멈춘다.

        else return (n * factorial(n-1) );

}

- 자기 자신을 호출한다.


* 거듭제곱의 계산


*피보나치 수열의 계산


*하노이 탑 문제

Posted by 청웨일
 

프로그램 = 알고리즘 + 자료구조


자료구조는 수학공식에 비유하고 알고리즘은 풀이과정에 비유한다.


typedef <새로운 타입의 정의> <새로운 타입의 이름>;


새로운 타입의 정의 : int, char, float, double...

새로운 타입의 이름 : 사용자 지정.


typedef int element;  // int형 type element 선언


typedef struct ListNode {

        element data;

        struct ListNode *link;

} ListNode;                 //구조체형 타입 ListNode 선언


- 데이터의 타입만을 정의한다.

Posted by 청웨일