LINKED LIST SOURCE

Posted by MD워시퍼
2009. 7. 11. 21:37 Study
728x90

/*                                                           */
/*  LINKED1.C  :   Simple Linked list example                */
/*                                                           */
/*                  Programmed By Lee jaekyu                 */
/*                                                           */

#include <stdio.h>

typedef struct _node
    {
    int key;
    struct _node *next;
    } node;

node *head, *tail;

void init_list(void)
    {
    head = (node*)malloc(sizeof(node));
    tail = (node*)malloc(sizeof(node));
    head->next = tail;
    tail->next = tail;
    }

int delete_next(node *t)
    {
    node *s;
    if (t->next == tail)
        return 0;  /* can't delete tail */
    s = t->next;
    t->next = t->next->next;
    free(s);
    return 1;
    }

node *insert_after(int k, node* t)
    {
    node *s;
    s = (node*)malloc(sizeof(node));
    s->key = k;
    s->next = t->next;
    t->next = s;
    return s;
    }

node *find_node(int k)
    {
    node *s;
    s = head->next;
    while (s->key != k && s != tail)
        s = s->next;
    return s;
    }

int delete_node(int k)
    {
    node *s;
    node *p;
    p = head;
    s = p->next;
    while (s->key != k && s != tail)
        {
        p = p->next;
        s = p->next;
        }
    if (s != tail)  /* if find */
        {
        p->next = s->next;
        free(s);
        return 1;
        }
    else
        return 0;
    }

node *insert_node(int t, int k)  /* before k, insert t */
    {
    node *s;
    node *p;
    node *r;
    p = head;
    s = p->next;
    while (s->key != k && s != tail)
        {
        p = p->next;
        s = p->next;
        }
    if (s != tail)  /* if find */
        {
        r = (node*)malloc(sizeof(node));
        r->key = t;
        p->next = r;
        r->next = s;
        }
    return p->next;
    }

node *ordered_insert(int k)
    {
    node *s;
    node *p;
    node *r;
    p = head;
    s = p->next;
    while (s->key <= k && s != tail)
        {
        p = p->next;
        s = p->next;
        }
    r = (node*)malloc(sizeof(node));
    r->key = k;
    p->next = r;
    r->next = s;
    return r;
    }

void print_list(node* t)
    {
    printf("\n");
    while (t != tail)
        {
        printf("%-8d", t->key);
        t = t->next;
        }
    }

node *delete_all(void)
    {
    node *s;
    node *t;
    t = head->next;
    while (t != tail)
        {
        s = t;
        t = t->next;
        free(s);
        }
    head->next = tail;
    return head;
    }

void main(void)
    {
    node *t;

    init_list();
    ordered_insert(10);
    ordered_insert(5);
    ordered_insert(8);
    ordered_insert(3);
    ordered_insert(1);
    ordered_insert(7);
    ordered_insert(8);

    printf("\nInitial Linked list is ");
    print_list(head->next);

    printf("\nFinding 4 is %ssuccessful", find_node(4) == tail ? "un" :
"");

    t = find_node(5);
    printf("\nFinding 5 is %ssuccessful", t == tail ? "un" : "");

    printf("\nInserting 9 after 5");
    insert_after(9, t);
    print_list(head->next);

    t = find_node(10);
    printf("\nDeleting next last node");
    delete_next(t);
    print_list(head->next);

    t = find_node(3);
    printf("\nDeleting next 3");
    delete_next(t);
    print_list(head->next);

    printf("\nInsert node 2 before 3");
    insert_node(2, 3);
    print_list(head->next);

    printf("\nDeleting node 2");
    if (!delete_node(2))
        printf("\n  deleting 2 is unsuccessful");
    print_list(head->next);

    printf("\nDeleting node 1");
    delete_node(1);
    print_list(head->next);

    printf("\nDeleting all node");
    delete_all();
    print_list(head->next);
    }

Linked_List 의 삽입과 삭제

Posted by MD워시퍼
2009. 7. 10. 18:46 Study
728x90

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

typedef struct link {
    int key;
    struct link *next;
} link_list;

link_list *head;
link_list *tail;
int count = 0;
void insert_node() {
    link_list *temp, *p = head;

    temp = (link_list *)malloc(sizeof(link_list));

    temp->key = count++;

 while(p->next != tail) {
  p = p->next;
 }

 temp->next = p->next;
    p->next = temp;
}

void delete_node(int key) {
 link_list *temp, *p;

 p = head;

 if(head->key == key) {
  temp = head;
  head = head->next;
 } else {
  while(true) {
   if(p->next->key == key) {
    temp = p->next;
    p->next = p->next->next;
    break;
   } else if(p->next == NULL){
    printf("데이터가 존재하지 않습니다");
    return;
   } else {
    p = p->next;
   }
  }
 }
 free(temp);
}

void main() {
    link_list *pointer;

    head = (link_list *)malloc(sizeof(link_list));
    tail = (link_list *)malloc(sizeof(link_list));

    head->key = count++;
    tail->key = count++;
    head->next = tail;
    tail->next = NULL;

    insert_node();  // ①
    insert_node();  // ②
    insert_node();
    insert_node();
    delete_node(0);
    delete_node(3);

    do {
        printf("%d ",head->key);
        head = head->next;
    }while(head != NULL);
}

2008년 4회 정보처리산업기사 실기 알고리즘

Posted by MD워시퍼
2009. 6. 16. 14:41 Study
728x90

한번 JAVA로 구현해 보았습니다.

public class Algorism {
 public static void main(String args[]) {
  int[] A = {1,3,5,7,9};
  int[] B = {12,10,8,6,4,2};
  int[] C = new int[A.length + B.length];
  
  /** 임시적으로 적은 것 **/
  int N = A.length;
  int M = B.length;
  /*********************/
  
  int ISW = 0;
  int N1 = 0;
  int N2 = M-1;
  int N3 = 0;
  int List1 = A[N1];
  int List2 = B[N2];

TEST :
  while(true) {
   if(List1 < List2) {
    C[N3] = List1;
    N1 = N1 + 1;
    N3 = N3 + 1;
    
    if(N1 < N) {
     List1 = A[N1];
    } else {
     if(ISW == 0) {
      ISW = 1;
      List1 = 999999;
     } else {
      break;
     }
     
    }
   } else {
    C[N3] = List2;
    N2 = N2 - 1;
    N3 = N3 + 1;
    if(N2 >= 0) {
     List2 = B[N2];
    } else {
     if(ISW == 0) {
      ISW = 1;
      List2 = 999999;
     } else {
      break;
     }
    }
   }
  }
  
  for(int i = 0 ; i < C.length ; i++) {   
   System.out.print(C[i]+ " ") ;
  }
   
 }
}