검색어 입력폼

[자료구조]스택과 큐를 이용한 미로찾기

등록일 2006.05.29 파일확장자압축파일 (zip) | 가격 1,600원

소개글

스택과 큐를 이용한 미로찾기 프로그램입니다
스택과 큐는 linked list로 구현되었습니다
VC++로 코딩했습니다.
input.txt 에서 미로 정보를 받아서 좌표값등은 output.txt오 나옵니다.

컴파일 실행환경

VC++

본문내용

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

#define MAX 100

typedef struct{
short r;
short c;
}element; //요소의 타입

typedef struct StackNode{
element item;
struct StackNode *link;
}StackNode;

typedef struct{
StackNode *top;
}LinkedStackType;
//초기화 함수
void S_init(LinkedStackType *s)
{
s->top = NULL;
}
//공백상태 검출 함수
int S_is_empty(LinkedStackType *s)
{
return (s->top == NULL);
}
//포화상태 검출 함수
int S_is_full(LinkedStackType *s)
{
return 0;
}
//삽입 함수
void push(LinkedStackType *s,element item)
{
StackNode *temp=(StackNode *)malloc(sizeof(StackNode));
if(temp==NULL){
fprintf(stderr,"메모리 할당에러\n");
return;
}
else{
temp->item = item;
temp->link = s->top;
s->top = temp;
}
}
//삭제함수
element pop(LinkedStackType *s)
{
element item;
if(S_is_empty(s)){
fprintf(stderr,"스택이 비어있음\n");
exit(1);
}
else{
StackNode *temp=s->top;
item = temp->item;
s->top = s->top->link;
free(temp);
return item;
}
}
//피크함수
element S_peek(LinkedStackType *s)
{
if(S_is_empty(s)){
fprintf(stderr,"스택이 비어있음\n");
exit(1);
}
else{
return s->top->item;
}
}

typedef struct QueueNode //큐의 노드의 타입
{
element item;
struct QueueNode *link;
} QueueNode;

typedef struct //큐 ADT구현
{
QueueNode *front, *rear;
} QueueType;
//오류 함수
void error(char *message)
{
fprintf(stderr,"%s\n",message);
exit(1);
}

//초기화 함수
void init(QueueType *q){
q->front=q->rear=0;
}

// queue의 정보가 비어 있음을 확인하는 함수
int is_empty(QueueType *q)
{
return (q->front==NULL);
}
//포화상태 검출 함수
int is_full(QueueType *q)
{
return 0;
}
//삽입 함수
void enqueue(QueueType *q, element item)
{

QueueNode *temp = (QueueNode *)malloc(sizeof(QueueNode));
if(temp==NULL)
error("메모리를 할당할수 없습니다.");

else{
temp->item=item;
temp->link=NULL;
if( is_empty(q)){
q->front=temp;
q->rear=temp;
}
else{
q->rear->link=temp;
q->rear=temp;
}
}

}
//삭제함수
element dequeue(QueueType *q)
{
QueueNode *temp = q->front;
element item;

if(is_empty(q))
error("큐가 비어있습니다.");
else
{
item =temp->item;
q->front = q->front->link;
if(q->front == NULL)
q->rear = NULL;
free(temp);
}
return item;
}
//피크함수
element peek(QueueType *q)
{
element item;
if(is_empty(q))
error("큐가 비어있습니다.");
else
{
item = q->front->item;
}
return item;
}

압축파일 내 파일목록

maze.c
input.txt
다운로드 맨위로