앞으로도 들어가고 뒤로도 들어가는 구조의 자료형태를 만드시오.. 단, 나오는 곳은 뒤로 나온다.
문제는 앞으로 들어가면 앞으로 쌓이고 뒤에는 뒤로 쌓인다는 것 그래서 앞으로 들어갈때.. 모든 데이터를 밀어 줘야 한다는 거... ㅋㅋ
역시 스택이랑 비슷하다...
소스는 다음과 같다.
더보기
'Algorithm' 카테고리의 다른 글
| 앞뒤로 들어가고 뒤로 나오는 자료형태를 만드시오... (0) | 2009/04/27 |
|---|---|
| Double Stack Program (0) | 2009/04/27 |
| C언어 야구게임 (싱글 링크드 리스트 사용) (0) | 2009/04/10 |
| C언어 Pointer에 대해.. #1 (0) | 2009/03/16 |
| BFS 알고리즘 (0) | 2008/11/20 |
| 전산언어2 1분반 C Programming #23 실습문제1 (0) | 2008/11/19 |
더블 스택 구현
5개의 구조체 배열에 학번, 이름을 넣을 수 있는 앞뒤의 Stack 구조이다.
소스는 다음과 같다.
더보기
'Algorithm' 카테고리의 다른 글
| 앞뒤로 들어가고 뒤로 나오는 자료형태를 만드시오... (0) | 2009/04/27 |
|---|---|
| Double Stack Program (0) | 2009/04/27 |
| C언어 야구게임 (싱글 링크드 리스트 사용) (0) | 2009/04/10 |
| C언어 Pointer에 대해.. #1 (0) | 2009/03/16 |
| BFS 알고리즘 (0) | 2008/11/20 |
| 전산언어2 1분반 C Programming #23 실습문제1 (0) | 2008/11/19 |
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 50
#define COT 25
typedef struct list* list_p;
typedef struct list {
int a[MAX];
int s;
int b;
int o;
list_p next;
};
list_p head=NULL;
void rand_su(int num,int *p);
void input_su(int num,int *p);
int check_su(int num,int *o,int *p);
void add_list(int *p,int,int,int,int);
void show_list(int num);
void main()
{
int num,re[MAX],input[MAX],count=1,s;
printf("********************************\n");
printf("* !!야구 게임을 시작 합니다 !! *\n");
printf("********************************\n");
printf("몇자리 게임을 하겠습니까? ");
scanf("%d",&num);
rand_su(num,re); // 랜덤 수를 입력 합니다.
while(1)
{
printf("\n\n%d 번째 시도 입니다 . %d / %d \n",count,count,COT);
input_su(num,input);
s=check_su(num,re,input);
if(count>=COT)
{
printf("\n시도 안에 맞추지 못하였습니다.\n");
break;
}
else if(s==3) printf("\n\n 축하합니다!! 야구 게임을 성공 하였습니다 \n\n");
count++;
}
//
}
void show_list(int num)
{
int i,count=0;
list_p p;
p=head;
printf("\n###################################\n");
printf(" 입력 결과 리스트 ");
printf("\n###################################\n");
for(;p!=NULL;p=p->next)
{
printf("\n\n%d : 번째 입력 결과 \n",++count);
for(i=0;i<num;i++)
{
printf("%d ",p->a[i]);
}
printf("Strink : %d Ball : %d Out %d \n",p->s,p->b,p->o);
}
}
int check_su(int num,int *q,int *p)
{
int i,j,out,s=0,o=0,b=0;
for(i=0;i<num;i++)
{
for(j=0;j<num;j++)
{
if(*(q+i) == *(p+i))
{
s++;
j=num;
}
else if(*(q+i) == *(p+j))
{
b++;
j=num;
}
else
{
out++;
}
}
if(out==num)
{
o++;
}
}
add_list(p,s,b,o,num); // 링크드 리스트에 항목을 추가
printf("\n\n입력 값 :");
for(i=0;i<num;i++)
{
printf(" %d ",*(p+i));
}
printf("\nStrink : %d Ball : %d Out : %d \n",s,b,o);
return s;
}
void add_list(int *pt,int s,int b,int o,int num)
{
int i=0;
list_p p,temp;
p=head;
temp=(list_p)malloc(sizeof(struct list));
for(i=0;i<num;i++)
{
temp->a[i]=*(pt+i);
}
temp->s=s;
temp->b=b;
temp->o=o;
temp->next=NULL;
if(p==NULL)
{
head=temp;
}
else
{
for(;p->next!=NULL;p=p->next);
p->next=temp;
}
}
void input_su(int num,int *p)
{
int i,a;
for(i=0;i<num;i++)
{
printf("\n%d 번째 값을 입력 하세요 ? ( -1 를 입력 하면 입력 했던 리스트를 보여줍니다)",i+1);
scanf("%d",&a);
if(a==-1)
{
show_list(num);
i--;
}
else if(a>10 || a<0)
{
printf("\n값은 0과 9사이 값만 입력 하실 수 있습니다.\n");
i--;
}
else *(p+i)=a;
}
}
void rand_su(int num,int *p) // 랜덤 수를 입력 합니다.
{
int i;
printf("랜덤한 수를 입력합니다.");
srand(time(NULL));
for(i=0;i<num;i++)
{
*(p+i)=rand()%10;
//printf("\n %d",*(p+i));
}
}
질문은 알아서 ....
'Algorithm' 카테고리의 다른 글
| 앞뒤로 들어가고 뒤로 나오는 자료형태를 만드시오... (0) | 2009/04/27 |
|---|---|
| Double Stack Program (0) | 2009/04/27 |
| C언어 야구게임 (싱글 링크드 리스트 사용) (0) | 2009/04/10 |
| C언어 Pointer에 대해.. #1 (0) | 2009/03/16 |
| BFS 알고리즘 (0) | 2008/11/20 |
| 전산언어2 1분반 C Programming #23 실습문제1 (0) | 2008/11/19 |

이올린에 북마크하기
Prev

Rss Feed