2007년 2월 23일 금요일

File입출력과 double Linked List 를 사용해서 Buffer에 데이터 저장

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

/////////////////////////////////////////////////////////////////////////struct declar
typedef struct
{
int key;
}list;

typedef struct node *node_pointer;
typedef struct node{
struct node *llink;
list item;
struct node *rlink;
} node;

///////////////////////////////////////////////////////////////////////////Global Variable

int a[100000000];
int buffer[100000000];
char b[8];
int count;
int result_s;

////////////////////////////////////////////////////////////////////////Reading dblab_lru.txt
void readingfile(){
 
  FILE *fp;
//  char temp;

  printf("Reading dblab_lru.txt file... \n");
 
  fp = fopen("dblab_lru.txt", "r");


  count=0;
  while( !feof(fp) )
  {
    fscanf(fp,"%d",&a[count]);
 count++;
 
  }

  fclose(fp);
  printf("Reading Complete \n");

}
///////////////////////////////////////////////////////////////////////Node Insert
void dinsert(node_pointer node, node_pointer newnode)
{
newnode ->llink = node;
newnode ->rlink = node ->rlink;
node ->rlink ->llink = newnode;
node ->rlink = newnode;
}
/////////////////////////////////////////////////////////////////////////Node Delete
void ddelete(node_pointer node, node_pointer deleted)
{
if(node == deleted)
{
printf("Deletion of head node not permitted. \n");
}
else
{
deleted ->llink ->rlink = deleted ->rlink;
deleted ->rlink ->llink = deleted ->llink;
free(deleted);
}
}
/////////////////////////////////////////////////////////////////////////Node Print
void Print(node_pointer ptr) {

node_pointer ptr2;
ptr2 = ptr->rlink;
for(ptr2; ptr2 != ptr; ptr2=ptr2->rlink)
printf("%d\n", ptr2->item.key);


}
//////////////////////////////////////////////////////////////////////////Search Function
/*
int search(node_pointer ptr, int next_i){
{
 node_pointer ptr3;
 ptr3=ptr->rlink;
 while(ptr3->item.key != next_i && ptr3 != NULL) 
  ptr3=ptr3->rlink;
 return *ptr3;

}*/
//////////////////////////////////////////////////////////////////////////Main Function

int main(){

 node_pointer ptr;
 ptr = (node_pointer)malloc(sizeof(node));
 ptr ->llink = ptr;
 ptr ->rlink = ptr;

 node_pointer newnode;
 
 int si;
 int imsi;

    printf("Input Buffer Size [Size Limit : 7000] : ");
    scanf("%d", &si);

    printf("Buffer Size is %d !\n", si);

 readingfile();

   
    for(int c=0 ; c < si ;c++){
  newnode = (node_pointer)malloc(sizeof(node));
  imsi = (int)a[c];
  newnode->item.key = imsi;
  dinsert(ptr, newnode);
 }
 
    printf("In Buffer : %d\n",si);
 printf("ITEM : ");

      Print(ptr);
      printf("\n");




// ddelete(ptr, ptr->rlink);
}



2007년 2월 14일 수요일

에디트플러스 셋업

1. 사이트에서 다운 받기

     http://java.sun.com/javase/downloads/index_jdk5.jsp

     여기에서 JDK 5.0 Update 10 을 다운받는다.



2. 설치하기

    아무 생각없이 그냥 next 눌러서 설치하면 된다.

    단, 설치위치를 바꾸고 싶으면 바꾸시고요~



3. 환경설정하기

    젤 중요한 부분이다. 잘못 설정하면 당연히 컴파일 안되고 동작이 안되겠지요


   1) 내 컴퓨터 -> 속성 -> 고급 -> 환경변수 -> 시스템 변수에 있는 새로 만들기 클릭

   

       변수이름 : JAVA_HOME

       변수값 : 자바 jdk 를 설치한 위치를 지정 예) C:\Program Files\Java\jdk1.5.0_09


       변수이름 : CLASSPATH

       변수값 : .;%JAVA_HOME%\lib\tools.jar

 

   2) 시스템 변수에 있는 Path 편집

       변수값 앞부분에 추가 : java 가 설치된 디렉토리 밑의 bin 디렉토리 예) C:\Program Files\Java\jdk1.5.0_09\bin;

   


4. 테스트 하기

   도스 모드로 나가서 java 혹은 javac 이라고 쳐서 옵션같은것들이 나오면 제대로 환경설정이 된것이다.

울트라 에디터

울트라 에디터에서 자바컴파일 설정 방법 정리 | Java Programing 2006/09/25 15:39
http://blog.naver.com/vletzrockv/130009184635
자바 공부하는 사람이라면 거의 다 알듯한 건데 +ㅁ+
제가 필요할지 몰라 이렇게 씁니다~ -_-;

<컴파일설정>

1. 울트라 에디터 실행

2. 메뉴 /Advanced/Tool Configuration.. 클릭

3. Command Line 에 javac %n%e 입력

Working Directory 에 %p 입력

4. Menu Item Name 에 임의대로(Compile Java) 입력

5. Insert 버튼 클릭

6. .java 파일을 오픈한뒤 아까 임의로 입력한 메뉴명 (Compile Java) 클릭하여 실행


<클래스 실행설정>

1. 울트라 에디터 실행

2. 메뉴 /Advanced/Tool Configuration.. 클릭

3. Command Line 에 java %n 입력

Working Directory 에 %p 입력

4. Menu Item Name 에 임의대로(Execute class) 입력

5. Insert 버튼 클릭

6. .java 파일을 오픈한뒤 컴파일 한 후 아까 임의로 입력한 메뉴명 (Execute class) 클릭하여 실행


※ 참고 (실행결과창 보기 설정법)

Tool Configuration 설정시

Commnad Output 부분을 Output to List Box 로 선택

Capture Output 선택을 하신뒤

에디터메뉴의 /Window/Output Window 를 선택하시면

실행결과가 아웃풋 박스에 표시됩니다.


단축키는 자동지정되며 컴파일된 클래스는 해당 소스디렉터리에 생성됩니다.
또 추가로 캡쳐에 체크 하시면 컴파일이나 실행할 때 결과를 볼 수 있습니다
참고하세요

 

이중 연결 리스트

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

typedef struct
{
int key;
}list;

typedef struct node{
struct node *llink;
list item;
struct node *rlink;
} node;
typedef struct node *node_pointer;



void dinsert(node_pointer node, node_pointer newnode)
{
/* newnode 를 node 의 오른쪽에 삽입 */
newnode ->llink = node;
newnode ->rlink = node ->rlink;
node ->rlink ->llink = newnode;
node ->rlink = newnode;
}

void ddelete(node_pointer node, node_pointer deleted)
{
/* 이중 연결 리스트에서 삭제 */
if(node == deleted)
{
printf("Deletion of head node not permitted. \n");
}
else
{
deleted ->llink ->rlink = deleted ->rlink;
deleted ->rlink ->llink = deleted ->llink;
free(deleted);
}
}

void Print(node_pointer ptr) // 입력된 item 을 출력하는 함수
{
node_pointer ptr2;
ptr2 = ptr->rlink;
for(ptr2; ptr2 != ptr; ptr2=ptr2->rlink)
printf("%d\t", ptr2->item.key);
printf("\n");
}

void main()
{
node_pointer ptr;
ptr = (node_pointer)malloc(sizeof(node));
ptr ->llink = ptr;
ptr ->rlink = ptr;

node_pointer newnode;
int Number;
for (;Number!=4;) {
printf("\nMENU *************************************\n");
printf(" 1.삽입 이중연결리스트 2.삭제 이중연결리스트 3.출력이중연결리스트 4.끝 \n");
printf("******************************************\n");
scanf("%d", &Number);
switch(Number) {
case 1:
printf("\n 값을 입력해 주세요.\n");
newnode = (node_pointer)malloc(sizeof(node));
scanf("\n%d",&(newnode->item.key));
dinsert(ptr, newnode);
break;
case 2: ddelete(ptr, ptr->rlink);
break;
case 3:
Print(ptr);
break;
case 4: printf("수고하셨습니다.\n");
break;
default:
printf("잘못 입력하셨습니다.\n");
break;
}
}
}
*/

2007년 2월 13일 화요일

Linked List (IN C)

************************************************************************************************************************


이중연결리스트

이중 연결 리스트(Doubly Linked List) 알고리즘을 이용한 예제입니다.

실제로 이중 연결 리스트는 많이 사용이 됩니다. 특히 활용이 많은 곳은 에디터나 워드프로세이며

여기서 이중 연결 리스트는 문장을 저장하는 가장 적절한 방법으로 간주됩니다.

왜냐하면 워드프로세서의 문장들은 그 크기가 자주 변하고, 재배치되는 경우도 비번하기 때문에

이중 연결 리스트를 사용할 경우 자료의 크기 변화나 재배치에 효율적입니다.

그리고 이중 연결 리스트는 앞 뒤 링크를 모두 가지고 있어 문장간의 이동도 용이합니다.

===============================================================

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


typedef struct _dnode{
 int key;    //정보 저장
 struct _dnode *prev;  //앞 노드의 위치 저장
 struct _dnode *next;  //다음 노드의 위치 저장
} dnode;


dnode *head, *tail;   //전역 변수로 정의


void init_dlist(void)  //초기화 함수
{
 head=(dnode*)malloc(sizeof(dnode));  //head의 공간 확보
 tail=(dnode*)malloc(sizeof(dnode));  //tail의 공간 확보
 head->next=tail;
 head->prev=head;
 tail->next=tail;
 tail->prev=head;
}


dnode *find_dnode(int k)  //k값을 연결 리스트에서 찾아내는 함수
{
 dnode *s;
 s=head->next;
 while(s->key != k && s != tail)  //key를 찾거나 tail에 도달하면 끝
  s=s->next;
 return s;
}


int delete_dnode(int k)  //k값을 갖는 노드를 찾아서 삭제
{
 dnode *s; 
 s=find_dnode(k);
 if(s != tail)
 {
  s->prev->next=s->next;
  s->next->prev=s->prev;
  free(s);
  return 1;
 }
 return 0;
}


dnode *insert_dnode(int k, int t)  //t앞에 k를 삽입
{
 dnode *s; 
 dnode *i=NULL; 
 s=find_dnode(t);
 if(s != tail)
 {
  i=(dnode*)malloc(sizeof(dnode));
  i->key=k;
  s->prev->next=i;
  i->prev=s->prev;
  s->prev=i;
  i->next=s;
 }
 return i;
}


dnode *ordered_insert(int k)  //정렬되어 있거나 비어있는 연결리스트에 오름차순 삽입
{
 dnode *s;
 dnode *i;
 s=head->next;
 while(s->key <= k && s != tail)
  s=s->next;
 i=(dnode*)malloc(sizeof(dnode));
 i->key=k;
 s->prev->next=i;
 i->prev=s->prev;
 s->prev=i;
 i->next=s;
 return i;
}


int delete_dnode_ptr(dnode *p)  //p가 가리키는 노드를 삭제
{
 if(p==head || p==tail)
  return 0;
 p->prev->next=p->next;
 p->next->prev=p->prev;
 free(p);
 return 1;
}


dnode *insert_dnode_ptr(int k, dnode *t) //t노드 앞에 k값을 삽입
{
 dnode *i;
 if(t==head)
  return NULL;
 i=(dnode*)malloc(sizeof(dnode));
 i->key=k;
 t->prev->next=i;
 i->prev=t->prev;
 t->prev=i;
 i->next=t;
 return i;
}


void print_dlist(dnode* p)  //화면에 출력하는 함수
{
 printf("\n");
 while(p != tail)
 {
  printf("%-8d", p->key);
  p=p->next;
 }
}


void delete_all(void)  //현재의 연결리스트를 모두 삭제
{
 dnode *p;
 dnode *s;
 p=head->next;
 while(p != tail)
 {
  s=p;
  p=p->next;
  free(s);
 }
 head->next=tail;
 tail->prev=head;
}


void main(void)
{
 dnode *t;
 init_dlist();

 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_dlist(head->next);

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

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

 printf("\nInserting 7 before 5");
 insert_dnode_ptr(7, t);
 print_dlist(head->next);

 t=find_dnode(3);
 printf("\nDeleting 3");
 delete_dnode_ptr(t);
 print_dlist(head->next);

 printf("\nInsert node 2 before 10");
 insert_dnode(2, 10);
 print_dlist(head->next);

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

 printf("\nDeleting node 1");
 delete_dnode(1);
 print_dlist(head->next);

 printf("\nInserting 15 at first");
 insert_dnode_ptr(15, head->next);
 print_dlist(head->next);

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

Edit Plus 사용법

[에디트 플러스 사용법]

 

1) 에디트 플러스를 설치하면 다음 그림과 같은 편집 화면이 나타납니다. 컴파일과 실행을 편리하게 하기 위해 에디트 플러스의 도구로 등록할 수 있습니다. [도구] 메뉴에서 [사용자 도구 구성..] 메뉴를 선택합니다.

 

 

2) 오른쪽의 [추가] 버튼을 누른 다음, [프로그램] 메뉴를 선택합니다.

 

 

3) 다음 그림과 같이 [메뉴제목]컴파일이라고 입력합니다. [명령]에는  버튼을 클릭하여 javac 컴파일러 프로그램의 경로를 연결해줍니다. [인수] 버튼을 클릭해서 [파일 이름]을 선택하고, [디렉토리]도 마찬가지 방법으로 [파일 디렉토리]를 선택합니다.

 

 

4) 3)과 마찬가지 방법으로 프로그램을 새로 추가한 다음, [메뉴 제목]실행으로 하고, [명령]은 자바 실행 프로그램인 java.exe를 찾아 연결해줍니다. 나머지는 아래 그림과 같은 방법으로 각 항목을 선택합니다. 모든 항목을 설정했으면 [확인] 버튼을 클릭하여 대화 상자를 닫습니다.

 

5) [도구] 메뉴를 열어보면 3), 4)에서 설정한 [컴파일] [실행]메뉴가 등록된 것을 볼 수 있습니다. 앞서 작성한 HelloWorldApp.java를 열고, [도구] 메뉴에서 [컴파일] 메뉴를 선택합니다.

 

 

 

6) 프롬프트 창이 열리면서 컴파일된 결과를 볼 수 있습니다. 아무런 오류 메시지가 없으면 컴파일이 된 것이므로, 프롬프트 창을 종료합니다.

 

 

7) 이번엔 프로그램을 실행시키기 위해 [도구] 메뉴에서 [실행] 메뉴를 선택합니다. 마찬가지로 프롬프트 창이 열리면서 실행 결과가 출력되는 것을 볼 수 있습니다.