EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 4명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·Sorting Algorithm Animation (2)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

눈으로 보는 자료구조
글쓴이: EzDoum 글쓴날: 2002년 05월 14일 오후 11:53




Data Structures and Algorithms
Data Structures and Algorithms - Table of Contents

Front Page
Course Outline

  1. Introduction
  2. Programming Strategies
  3. Data Structures
  4. Searching
  5. Complexity
  6. Queues
  7. Sorting
  8. Searching Revisited
  9. Dynamic Algorithms
  10. Graphs
  11. Huffman Encoding
  12. FFT
  13. Hard or Intractable Problems
  14. Games Appendices
    1. ANSI C
    2. Source code listings
    3. Getting these notes
    Slides
      Slides from 1998 lectures (PowerPoint).
    Course Management
    • Key Points from Lectures
    • Workshops
    • Past Exams
    • Tutorials
    Texts Texts available in UWA library
    Other on-line courses and texts
    Algorithm Animations

    © John Morris, 1998



  15. 관련 링크
  16. [분류: C/C++ 인쇄용 페이지 본문 email로 보내기 ]

<  Google PigeonRank 기술에 관한 논문 | [Cache] 주소의 중간 비트를 캐쉬 인덱스로 사용하는 이유는?  >
눈으로 보는 자료구조 | 답장: 5개 | 본문에 답장
정렬 :  
답장 익명 2002년 05월 16일 오후 04:46 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
케케 자바 안한다면서..^^


답장 EzDoum 2002년 05월 22일 오후 04:51 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
Dictionary of Algorithms and Data Structures
http://www.nist.gov/dads/

자료구조 (약간의 자바 애플릿 구현예제) (한글)
http://kmh.ync.ac.kr/comScience/general/DS/
--
걀걀걀...
[수정]

답장 EzDoum 2004년 10월 27일 오후 01:32 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
스택을 사용해 infix -> postfix로 변환하기
http://www.qiksearch.com/articles/cs/infix-postfix/index.htm


[수정]

답장 EzDoum 2004년 10월 27일 오후 02:46 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
// max_heap 간단 구현 교재
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_ELEMENTS	254
#define HEAP_FULL(n)	((n) == MAX_ELEMENTS -1)
#define HEAP_EMPTY(n)	(!(n))

typedef struct _ELEMENT {
	int key;
} ELEMENT;

ELEMENT heap[MAX_ELEMENTS]  = {0,};
int n = 0;

void insert_max_heap(ELEMENT item, int *n){
	int i;
	if(HEAP_FULL(*n)) {
		fprintf(stderr, "Heap Full\n");
		exit(-1);
	}

	i = ++(*n);
	while( (i != 1) && (item.key > heap[i/2].key) ) {
		heap[i] = heap[i/2];
		i /=2;
	}
	heap[i] = item;
}

ELEMENT delete_max_heap(int *n){
	int parent, child;
	ELEMENT	item, temp;

	if(HEAP_EMPTY(*n)) {
		fprintf(stderr, "Heap Empty\n");
		exit(-1);
	}
	
	item = heap[1];			// root를 골라내고
	temp = heap[ (*n)-- ];	// 가장 끝에 있는 녀석을 선택

	parent = 1;
	child = 2;

	while (child <= *n) {
		// 자식들 중에 큰녀석을 골르기
		if ( (child <= *n) && (heap[child].key < heap[child+1].key) ) 
			child++;
		
		// heap조건이 맞다면 멈춤
		if ( temp.key >= heap[child].key ) break;
		
		// temp가 더 작으므로 child를 위로 올리기
		heap[parent] = heap[child];
		parent = child;
		child *= 2;
	}

	// heap위치를 잡음. 추가하기
	heap[parent] = temp;

	return item;
}

int main(int argc, char* argv[])
{
	ELEMENT tmp;

	tmp.key = 1;
	insert_max_heap(tmp,&n);
	tmp.key = 2;
	insert_max_heap(tmp,&n);
	tmp.key = 7;
	insert_max_heap(tmp,&n);
	tmp.key = 6;
	insert_max_heap(tmp,&n);
	tmp.key = 4;
	insert_max_heap(tmp,&n);
	tmp.key = 3;
	insert_max_heap(tmp,&n);
	tmp.key = 9;
	insert_max_heap(tmp,&n);
	tmp.key = 10;
	insert_max_heap(tmp,&n);
	tmp.key = 5;
	insert_max_heap(tmp,&n);

	while(n) printf("delete heap[%d]\n", delete_max_heap(&n).key);


	return 0;
}


[수정]

답장 EzDoum 2004년 10월 27일 오후 05:35 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
// stack을 이용해 미로찾기
// http://ice.dju.ac.kr/~cdlee/dt_st99/ 퍼옴

#include <stdio.h>

#define TRUE     1
#define FALSE    0
#define ROWS 13			/* number of rows in a maze including walls*/
#define COLS 17			/* number of columns in a maze  "      " */
#define EXIT_ROW ROWS - 2	/* exit position */
#define EXIT_COL COLS - 2

typedef struct {		/* moves according to a direction */
  short int vert;
  short int horiz;
  } offsets;

offsets move[8] ={
                   {-1, 0},	/* North */
		   {-1, 1},	/* Northeast */
		   {0, 1},	/* East */
		   {1, 1},	/* Southeast */
		   {1, 0},	/* South */
		   {1, -1},	/* Southwest */
		   {0, -1},	/* West */
                   {-1, -1}};	/* Northwest */

typedef struct {		/* type definition for an element */
  short int row;		/* to be stored on the stack */
  short int col;
  short int dir;
  } element;

int maze[ROWS][COLS];		/* maze to be solved */
int mark[ROWS][COLS];		/* mark if the position has been visited */
short int found = FALSE;	/* if the path found */
FILE *input;

/******************** Main part of the program *******************************/

void initialize(), find_path(), print_path();
main()
{
  initialize();
  find_path();
  print_path();
}


/******************* First, stack-related functions **************************/

void stack_overflow(), stack_empty();

/* make an ordered stack and initialize it */
#define MAX_SIZE ROWS*COLS	/* max. size of a stack */
element stack[MAX_SIZE];	/* def. of a stack array */
int top = -1;			/* stack pointer */

/* function to push data into the stack */
void push(element position)
{
  if (top >= MAX_SIZE - 1) 	/* if stack full */
    stack_overflow();
  else {
    stack[++top].row = position.row;
    stack[top].col = position.col;
    stack[top].dir = position.dir;
  }
}

/* function to pop data from the stack */
element pop()
{
  if (top == -1)		/* if stack empty */
    stack_empty();
  else
    return stack[top--];
}

/* function to handle stack full error */
void stack_overflow()
{
  printf("Error! Stack overflows.\n");
  exit(1);
}

/* function to handle stack empty error */
void stack_empty()
{
  printf("Error! Stack underflows.\n");
  exit(1);
}
  

/**************** Functions to solve mazing problem **************************/

/* function to initialize mark & maze */
void initialize()
{
  int i, j;

  for (i = 0; i < ROWS; i++)	/* initialize the mark */
    for (j = 0; j < COLS; j++)
      mark[i][j] = FALSE;

  if ((input = fopen("maze.txt", "r")) == NULL) { /* open the file which */
    printf("Error opening maze.txt");             /* contains the maze */
    exit(1);
  }
  
  for (i = 0; i < ROWS; i++)	/* make a maze */
    for (j = 0; j < COLS; j++) {
      if (i == 0 || i == (ROWS - 1) || j == 0 || j == (COLS - 1)) /* wall */
	maze[i][j] = 1;
      else			/* maze read from a file */
	fscanf(input, "%d", &maze[i][j]);
    }
}

/* function to find the path that can pass the maze */
void find_path()
{
  int i, row, col, next_row, next_col, dir;
  element position;

  mark[1][1] = TRUE;		/* initialize a stack */
  position.row = 1;		/* to the maze's */
  position.col = 1;		/* entrance position */
  position.dir = 0;		/* and direction to north */
  push(position);
  while (top > -1 && !found) {	/* while stack is not empty */
    position = pop();		
    row = position.row;		/* move to the stack's top position */
    col = position.col;
    dir = position.dir;
    while (dir < 8 && !found) {	/* there are more moves from the current */
      next_row = row + move[dir].vert;         /* move to that direction */
      next_col = col + move[dir].horiz;
      if (next_row == EXIT_ROW && next_col == EXIT_COL) { /* if at the exit */
	found = TRUE;
	position.row = row;	                /* store the current */
	position.col = col;	                /* position */
	position.dir = dir;
	push(position);
      }
      else if (!maze[next_row][next_col] &&     /* if it's 0 */
	       !mark[next_row][next_col]) {     /* and not visited yet */
	mark[next_row][next_col] = TRUE;        /* now it is being visited */
	position.row = row;	                /* store the current */
	position.col = col;	                /* position */
	position.dir = ++dir;
	push(position);
	row = next_row;	                       	/* get the next position */
	col = next_col;
	dir = 0;
      }
      else			                /* if it cannot be visited */
	++dir;
    }
  }
}

/* function to print the path if one is found & close the file */
void print_path()
{
  int i;
  
  if (found) {
    printf("The path is:\n");
    printf("row col\n");
    for (i = 0; i <= top; i++)
      printf("%2d%5d\n", stack[i].row, stack[i].col);
    printf("%2d%5d\n", EXIT_ROW, EXIT_COL);
  }
  else
    printf("The maze does not have a path.\n");

  if (fclose(input) == EOF) {
    printf("Error closing maze.txt\n");
    exit(1);
  }
}

[수정]

눈으로 보는 자료구조 | 답장: 5개 | 본문에 답장
정렬 :  

답장 쓰기
글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

검색
Google

분류
·공지 (6)
·인터넷 (87)
·하드웨어 (260)
·C/C++ (65)
·어셈블리 (7)
·리눅스 (136)
·리눅스 커널 (67)
·윈도우즈 (25)
·데이터베이스 (20)
·보안 (16)
·.NET (25)
·그래픽 (13)
·책소개 (42)
·호기심 천국 (80)
·잡담 (111)
·사랑 (3)

전체 본문수: 963
전체 답장수: 525


분류 : C/C++
최근글
최근글
가장 많이 읽은 글
·Sorting Algorithm Animation (2)
뜨거운 감자
·눈으로 보는 자료구조 (5)

EzDoum투표
이지도움 어때요?
이게 뭐야. 다시 안올란다. --;
아이 좋아라~ +_+;
관심없다.
먼가는 있는거 같은데 뭐하는 곳이지?
기타 (자유게시판에 글로 남겨 주세요)
[ 결과 | 투표 ]

랜덤 링크
http://kldp.net


 Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
 Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum