블로그 이미지
Draw my Dream
꿈을드림

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
  • total
  • today
  • yesterday
2009. 4. 27. 14:16 Algorithm
자료구조 3번 문제였다.

앞으로도 들어가고 뒤로도 들어가는 구조의 자료형태를 만드시오.. 단, 나오는 곳은 뒤로 나온다.
문제는 앞으로 들어가면 앞으로 쌓이고 뒤에는 뒤로 쌓인다는 것 그래서 앞으로 들어갈때.. 모든 데이터를 밀어 줘야 한다는 거... ㅋㅋ
역시 스택이랑 비슷하다...

소스는 다음과 같다.


'Algorithm' 카테고리의 다른 글

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
posted by 꿈을드림
2009. 4. 27. 14:13 Algorithm
이번 2009 자료구조 중간고사 문제중에 하나...
더블 스택 구현
5개의 구조체 배열에 학번, 이름을 넣을 수 있는 앞뒤의 Stack 구조이다.

소스는 다음과 같다.

posted by 꿈을드림
2009. 4. 10. 02:26 Algorithm
/* 심심해서 만들어 본 야구 게임 */

#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));
 }
}


 


질문은 알아서 ....
posted by 꿈을드림