모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    등교의고통님의
    개인페이지입니다
    가입 : 12-11-23
    방문 : 629회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : computer_91128
    작성자 : 등교의고통
    추천 : 0
    조회수 : 1087
    IP : 122.36.***.31
    댓글 : 2개
    등록시간 : 2013/06/05 22:12:28
    http://todayhumor.com/?computer_91128 모바일
    [c언어] 단일연결리스트 만들었는데 70퍼센트만 맞대요...

     #include <stdio.h>
    #include <stdlib.h>
      
    typedef struct Node
    {
        char str[100];// /포함하여 99자
        Node * next; //다음 노드 가르키는 포인터
    }Node;
    Node *head=NULL; //헤드를 전역으로 선언
      
    void insert(int c); //위치삽입 함수
    void del(int c); //삭제함수
    void move(int c ,int dc); //옮기기 함수
    void exchange(int c ,int dc); //교환함수
    void show(int c);//출력함수
    void playexchange(int c ,int dc);//교환함수에서 실질적으로 돌리는 함수

      
    int main()
    {
        int N=0,i=0,dc, c;
        char a;
        scanf("%d",&N);
           if(N<=1000&&N>=1)//1<= N  <=1000이아니면 프로그램 종료
        {
            while(N!=i) //반복문이다.
            {
                scanf(" %c",&a); //실행할 함수
                scanf("%d",&c); //원하는 위치
                  
                switch(a)
                {
                case 'I':
                    {
                        insert(c);
                        break;
                    }
                case 'D':
                    {
                        del(c);
                        break;
                    }
                case 'M':
                    {
                        scanf("%d",&dc); // c에서 dc로 옮기는 것이다.
                        move(c,dc);
                        break;
                    }
                case 'E':
                    {
                        scanf("%d",&dc); //c노드와 dc노드를 교환
                        exchange(c,dc);
                        break;
                    }
                case 'S':
                    {
                        show(c);
                        break;
                    }
                }
                i+=1;
            }
        }
        else
        {
         return -1;
        }
      
      
        return 0;
    }
      
      
    void insert(int c)
    {
          
         Node* m = head; //m에 head를 복사해놓음
         Node* p;
         int n;
         Node * r = (Node*)malloc(sizeof(Node)); //동적할당
         r->next=NULL; //초기화
         scanf("%s",&r->str); //값 입력
         if(head== NULL) //head가 비어있을시에 헤드에 삽입
         {
             head = r; 
         } 
         else if(c<=1)  //헤드가 삽입되었을때 헤드에 넣고 기존헤드는 다음노드에 삽입하기.
         {
            r->next=head;
           head=r;
         } 
         else// 넣을 위치에 앞노드 p를 이용해 묶는다.
         {
            for(n=0; n<c-1; n++) 
            {
                p=m;
                m=m->next;
            }
            r->next = p->next;
            p->next=r;
         }
      
          
    }
      
    void show(int c)
    {
        int n=1;
        Node * m;
        m = head;
         while( n!=c) //c번 반복
            {
                m = m->next; 
                n++;
            }
         printf("%s\n",m->str); //반복후에 그 노드의 값을 출력
    }
      
    void del(int c)
    {
        Node *m = head;
        Node *p;
        Node *s;
        int n;
        if(c>1)
        {   
            for(n=0; n<c-1; n++) 
            {
                s=m;
                m=m->next;
            }
            p=m;
            s->next = m->next; //전 노드와 앞노드 묶기
            free(p);
        }
        else if(c==1) //헤드를 삭제할경우 헤드 앞에 노드가 없기에 위와는 다름 형식이된다.
        {
      p =head->next; //헤드의 다음노드 저장
      free(head);//헤드 날림
            head = p; //헤드에 저장한 p를 붙이기
     
        }
    }
      
    void move(int c,int dc)
    {
        Node* m = head;
        Node* s,*y,*x,*ny,*nx;
       
        int n=1;
        if(c==1) //헤드자리노드를 다른 자리로 옮길시 함수
        {
        
      for(n=0; n < dc-1; n++)
      {
        s=m;
        m=m->next;
      }
       y = head;
       head = head->next; //헤드를 한칸 앞당김
       s->next = y;
       y->next = m; //s와 m사이에 헤드노드 삽입
        }
        else if(dc == 1) //다른 자리 노드를 헤드에 옮길시
        {
           for(n=0; n < c-1; n++)
      {
        s=m;
        m=m->next;
      }
       y = head;
       x = m;
       head = m;//헤드에 다른자리노드 복사
       s->next = m->next;//다른자리노드의 부재를 메꾼다.
       m->next = y;//다른자리 노드 다음노드를 월레헤드로 연결
      
        }
        else
        {
            while(m->next!=NULL)
            {
                n++;
                s=m;
                m=m->next;
                if(n==c)
                {
                    y = s;
                    x = m; //옮길 자리 노드의 앞노드와 그 자체노드를 따로 복사
                }
                if(n==(dc-1))
                {
                    ny = m;
        nx = m->next; //옮겨질위치 자리 노드의 앞노드와 그 자체노드를 따로 복사
                }
            }
      y->next = x->next;
      ny->next = x;
      x->next = nx;//c노드를 cd노드의 앞 ny - c - nx이런식으로 삽입한다.
        }
      
    }
      
    void exchange(int c ,int dc)
    {
        Node* m = head;
        Node* s,*o,*k,*y,*x,*ny,*nx;
          
        int n=1;
        if(c==1)
        {
            playexchange(c ,dc);
     
        }
        else if(dc == 1)
        {
            playexchange(dc ,c);
            
        }
        else
        {
            while(m->next!=NULL)
            {
                n++;
                s=m;
                m=m->next;
                if(n==c)
                {
                    y = s;
                    x = m; //교환할 1번 노드 앞노드와 그 자체노드 복사
                }
                if(n==dc)
                {
                    ny = s;
                    nx = m; //교환할 2번 노드 앞노드와 그 자체노드 복사
                }
            }
      k=x;
      o=nx;
      y->next = nx;
      ny->next = x;
      nx->next = k->next;
      x->next = o->next;//두 노드를 교환 정보가 엉키지않게 차례를 조율한다.
      
        }
    }
     
    void playexchange(int c ,int dc)
    {
        int n;
        Node *m = head;
        Node *s,*k,*y;
        for(n=0; n < dc-1; n++)
            {
                s=m;
                m=m->next;
            }
        k = m;
        y = head;
        s->next = head;     
        m->next = k->next;
        head = k;
        k->next = y->next;//앞노드가 없는 헤드자리에 노드와 다른자리의 노드를 교환한다. c와 dc둘중 하나가 1이면 파라매터를 바꾸어서 넣으면 되기에 둘의 함수가 같다.
     
    }

    이거 과제로 컴퓨터가 체점하는건데 돌리니까 70퍼센트 맞았다고 뜨네요....명세서에 있는 예시대로 쳐보면 맞게 나오는데 대체 왜이러는걸까여......2시간 남았는데 죽고 싶지않습니다

     

    ------------------명세서 에요,,,-=---------------------------

    연결된 리스트를 사용하여 다음과 같은 라인 편집기를 만들고자 한다. 이 편집기에서 지원되는 연
    산은 삽입(Insert), 삭제 ,이동(Move), 교환(Exchange), 보기(Show) 다섯 개이고, 이들은 모
    두 라인(line) 단위로 수행된다.
    각 연산에 대한 구체적인 설명은 다음과 같다. 여기서 x는 양의 정수이고, str은 문자열이다.
    1. 삽입: I x str
    x번 라인 앞에 문자열 str을 삽입한다. 즉, 삽입 후 str이 x번 라인이 된다. 예를 들어, x가 2이면
    2번 라인에 str이 삽입되고, 기존의 2번 이후의 라인은 하나씩 뒤로 밀린다.
    2. 삭제: D x
    x번 라인을 삭제한다.
    3. 이동: M x y
    x번 라인을 y번 라인 앞으로 이동한다. 기존의 y번 이후의 라인은 하나씩 뒤로 밀린다.
    4. 교환: E x y
    x번 라인과 y번 라인을 서로 바꾼다.
    5. 보기: S x
    x번 라인의 내용을 화면에 출력한다. 화면에 출력하는 유일한 연산이다.
    예를 들어, 아래 왼쪽 연산들이 차례로 입력된 후, 텍스트의 내용은 오른쪽과 같다.
    I 1 This_is_line_A.
    I 1 This_is_line_B.
    I 3 This_is_line_C.
    I 3 This_is_line_D.
    D 3
    I 1 This_is_line_E.

    1: This_is_line_E.
    2: This_is_line_B.
    3: This_is_line_A.
    4: This_is_line_C.
    (보기 쉽게 맨 앞에 라인 번호를 표시함)
    계속해서 아래 연산이 연이어서 입력될 때, 각 연산 이후의 텍스트 내용은 오른쪽과 같다.
    M 2 5 ⇨
    1: This_is_line_E.
    2: This_is_line_A.
    3: This_is_line_C.
    4: This_is_line_B.
    (주의!! 이동 후 5번 라인이 아닌 4번 라인이 됨에 유의)
    M 3 1 ⇨
    1: This_is_line_C.
    2: This_is_line_E.
    3: This_is_line_A.
    4: This_is_line_B.
    15
    E 3 4 ⇨
    1: This_is_line_C.
    2: This_is_line_E.
    3: This_is_line_B.
    4: This_is_line_A.
    프로그램이 만족하는 (혹은 만족해야 하는) 가정 및 조건은 다음과 같다. (조건을 만족시키지 않는
    경우 감점 처리)
    1. 각 라인은 영문자와 기호들로 이루어져 있으며, 공백이나 탭은 없다. (즉, scanf로 처리하면 됨)
    2. 한 라인에 저장되는 글자 수는 최대 99자이고, 라인의 총 수에는 제한이 없다.
    3. 라인 번호는 1번부터 시작한다.
    4. 텍스트의 내용은 연결 리스트로 유지해야 한다. 텍스트의 한 라인의 내용 연결 리스트의 한 노드
    에 저장되도록 한다. 연결 리스트의 형태는 단순, 원형, 이중 연결리스트 등 어떤 것이든 상관없다.
    5. 모든 연산은 리스트 상에서 수행되어야 한다. 예를 들어, 5번 교환연산의 경우, 해당 두 노드에
    저장된 문자열 값만 서로 바꿔주는 식으로 구현해서는 안 되고, 두 노드 자체를 리스트 상에서 교환
    해야 한다.
    위 설명에 따라 동작하는 프로그램을 작성하시오.
    다음 정보가 표준입력으로 주어진다. 첫째 줄에는 연산의 총 개수 N이 주어진다(1≤N≤1,000).
    두 번째 줄부터는 연산의 정보가 한 줄에 하나씩 주어진다. 연산의 형식은 위의 설명을 참조하시오.
    잘못된 연산은 주어지지 않는다. 예를 들어, 현재 라인이 5개 존재할 때, "M 1 7"과 같은 연산은 주
    어지지 않는다.
    다음 정보를 표준출력(stdin)으로 출력한다. 보기 연산에 의해 출력되는 정보를 화면에 출력한다.
    각 줄의 맨 앞과 맨 끝에 공백은 존재하지 않는다.
    ※ 테스트 데이터의 개수: 10개 (아래 입출력 예 2개 포함)
    ※ 테스트 데이터의 분포
    - 데이터의 30%는 삽입, 보기 연산만 존재
    - 데이터의 50%는 삽입, 삭제, 보기 연산만 존재
    - 데이터의 70%는 삽입, 삭제, 이동, 보기 연산만 존재


    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    75
    엘마로 분헤먹었는데 갈아버릴까요? [2] 등교의고통 13/07/19 23:28 53 0
    74
    운이 좋은거 같으나 계륵 등교의고통 13/07/18 21:14 92 0
    73
    검마가좋나요 소마가좋나요? [5] 등교의고통 13/07/18 10:05 92 0
    72
    스카사형님 이거 말고 그 있잖아요 투박한 대검같은거 [5] 등교의고통 13/07/17 14:17 133 0
    71
    아이리스님 이거 말고 그 있잖아요 악기같은거 [2] 등교의고통 13/07/16 06:11 200 1
    70
    사이퍼스의 암밴드 시세좀가르쳐 주세요 등교의고통 13/07/14 06:57 30 0
    69
    해변셋하나만 지르려고하는데 누굴사줄까요? [1] 등교의고통 13/07/08 14:02 70 0
    68
    명작애니 추천해주세요 [5] 등교의고통 13/07/04 02:35 51 0
    67
    지난 1년간 지른 세라..... 등교의고통 13/07/03 16:30 80 0
    66
    [c언어]이런식으로리스트 구현가능할까요? [1] 등교의고통 13/06/16 09:40 49 0
    65
    알테라의 쿼터스2 해보신분 있나요? [2] 등교의고통 13/06/10 22:41 15 0
    64
    [질문]혹시 알테라의 쿼터스2같은거 해보신분 계신가요? 등교의고통 13/06/08 17:07 14 0
    63
    날 화나게 하는 과제때문에 열쇠 100개지름 [3] 등교의고통 13/06/05 22:34 98 0
    [c언어] 단일연결리스트 만들었는데 70퍼센트만 맞대요... 등교의고통 13/06/05 22:12 27 0
    61
    여행을 떠나려고 합니다 [6] 등교의고통 13/06/02 23:46 73 5
    60
    [c언어]반복문이 이상하게 끝나요... 등교의고통 13/06/02 20:13 28 0
    59
    가자 보류게로 [6] 등교의고통 13/05/13 21:24 123 2
    58
    c언어 스택구현인데 뭔가 이상합니다..(결과창 있어요) 등교의고통 13/05/12 15:21 31 0
    57
    간단한 스택 개념문제인데 의사코드 제가 이해한게 맞을까요? [2] 등교의고통 13/05/12 09:12 59 0
    56
    너무화납니다ㅠㅠ [3] 등교의고통 13/04/20 15:27 52 1
    55
    오늘이 이굴형 생일이라길래 [2] 등교의고통 13/04/19 18:32 35 2
    54
    [C]2차원 배열 동적할당후 함수리턴을 하려고 하는데요... [3] 등교의고통 13/04/15 18:37 21 0
    53
    이중연결리스트는 나에게 무슨 원한이 있나요... [1] 등교의고통 13/04/14 12:39 29 0
    52
    [c?]과제 의사코드중 이해가 안가는게 몇개있어요. [2] 등교의고통 13/04/13 23:19 29 0
    51
    [c언어]fwrite함수 썻는데 텍스트 파일에 쓰레기값이 찍혀요 [5] 등교의고통 13/04/11 16:28 37 0
    50
    c언어 동적배열에 대해서 간단한 질문이있어요! 등교의고통 13/04/06 23:10 16 0
    49
    c언어 부분집합에 대해서 질문좀 올려도 될까요. [3] 등교의고통 13/04/04 17:14 35 0
    48
    구조체배열 포인터에 대해서 질문이 있습니다. [3] 등교의고통 13/03/29 19:40 15 0
    47
    간단한 c언어 조언좀요...(배열쪽?) [11] 등교의고통 13/03/19 16:58 40 0
    46
    힐더인데 14시그 마회s저주레기s 재밀1얼마정도해요? 등교의고통 13/03/14 22:18 19 0
    [1] [2] [3] [4]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈