연결리스트와 스택 과제

프로그래밍 2007.10.04 01:44
  블로그에 코드는 다시는 올리지 않으려고 했는데 에라~ 모르겠다~

  오늘 자주 들르는 커뮤니티에 고민 글이 하나 올라왔다. 고민인즉!!
  전공수업에서 교수님이 C언어 과제를 하나 내 주셨다.

문제> "단어1 단어2 단어3 단어4" 를 입력받으면 스택과 연결리스트를 이용하여          저장한후
         "단어4 단어3 단어2 단어1"의 형태로 출력을 하는 프로그램을 작성하시오.
 
e.g>입력 : I Love You
      출력 : You Love I

  자료구조 수업인 것 같은데 입력받은 문장을 공백을 기준으로 분리해서 스택에 과 연결리스트를 이용해 저장한 후 출력하는 문제이다.

  3년만에 학교를 복학해서 C언어와 자료구조 동강까지 보면서 공부를 해 봐도 풀리지가 않아서 고민 글을 쓰게 된 것이다. 얼마나 고민이 되었을까.. 문제는 안풀리고 마냥 답답했나보다..ㅠㅠ

  정말 도와주고 싶었지만... 코드를 C로 작성해야 한다는 제약사항이!! C언어는 2학년때 이후로 본지가 오래되어서 자주 쓰이는 함수들 이름조차 다 까먹었는데.....;;; 아... 슬프다. 도와줄 방법이 없구나. 문제를 딱 보니 스택은 LIFO(Last In, First Out)형태의 자료구조이니 스택에 먼저 입력받은 문장을 단어로 나누어 넣은 후 스택에 들어있는 단어들을 차례대로 꺼내서 연결리스트에 넣는 문제라는 감은 왔는데....

  그래서 미약하나마 힘이 되고자 가장 손에 익은 언어인 자바로 코드를 만들어서 답변으로 올려 두었다. 사실.. 자바나 C나 문법만 약간 다를뿐.. 내용물은 비슷비슷 할테니 힌트라도 되지 않을까 생각되었다.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Stack;


public class Test {
   
    /**
     * 문자배열을 인수로 받아
     * 스택에 넣어 스택을 리턴
     * @param words
     * @return
     */
    public Stack pushStack(String[] words){
        Stack stack = new Stack();
        for(int i = 0; i < words.length; i++){
            stack.push(words[i]);
        }
        return stack;
    }
   
    /**
     * 스택을 인수로 받아
     * 연결리스트에 넣어 연결리스트를 리턴
     * @param stack
     * @return
     */
    public LinkedList addLinkedList(Stack stack){
        LinkedList linkedList = new LinkedList();
        while(!stack.empty()){
            linkedList.add(stack.pop());
        }
        return linkedList;
    }
   
    /**
     * 단어들을 입력받아 공백을 기준으로
     * 문자들을 배열에 저장
     * 배열을 리턴
     * @return
     * @throws IOException
     */
    public String[] inputWords() throws IOException{
        String[] words = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try{
            System.out.print("입력 : ");
            words = br.readLine().split(" ");
        }catch(IOException e){
            System.out.println(e);
        }finally{
            if(br != null) br.close();
        }
       
        return words;
    }
   
    public static void main(String[] args) throws IOException {
        Test test = new Test();
       
        Stack stack = test.pushStack(test.inputWords());    //문자를 입력받아 스택에 저장
        LinkedList linkedList = test.addLinkedList(stack);    //스택의 값을 연결리스트에 저장
       
        //연결리스트의 값을 차례대로 출력
        System.out.print("출력 : ");
        for(int i = 0; i < linkedList.size(); i++){
            System.out.print(linkedList.get(i)+" ");
        }
    }

}


  도움이 되었으면 좋겠다. 정말루...;;

  만약 연결리스트와 스택도 직접 구현해서 사용해야 하는 문제라면, 어짜피 책에 간단한 스택과 연결리스트의 예제 소스가 있을테니 그걸 참고하면 될테고.. 문자열을 나누는 sprit()메소드는 C언어에도 비슷한 역할을 하는 함수가 있을테니 그걸 찾아다 쓰면 될 것 같다.

  부디 꼭 성공하세요!! 싸인펜이 응원합니다!!S

'프로그래밍' 카테고리의 다른 글

2007 JCO 오픈소스 컨퍼런스  (2) 2007.10.15
2007 JCO 오픈 소스 컨퍼런스 (10월13일)  (6) 2007.10.07
연결리스트와 스택 과제  (10) 2007.10.04
객체지향  (4) 2007.10.03
High Cohesion, Loose Coupling  (2) 2007.10.03
게시판 만들기 작업 진척도  (3) 2007.09.30
top
  1. Favicon of http://www.myhyuny.net/ 화현 2007.10.04 02:17 신고 수정/삭제 댓글

    저는 왜, "링크드 리스트로 스텍을 구현해서 문제를 해결하세요"로 들리죠... -_-;;;

    • Favicon of http://signpen.net 싸인펜 2007.10.04 02:36 신고 수정/삭제

      헉!! 문제가 그것일 수도 있겠네요..;;

      저희학교 교수님이 내 주신 문제라면 교수님께 문제를 다시한 번 여쭈어 볼 수도 있을텐데.. 그게 아니라서..;;

      화현님이 이해하신대로의 문제라면 연결리스트에 단어들을 넣을 때 마다 연결리스트의 첫번째 인덱스에 값을 추가하면 스택처럼 동작할것 같은데, 그렇게 문제를 풀어 나가야 할 것 같은데요.

      그 분.... 어떻하죠?? 덜덜덜...

  2. Favicon of http://mewmew.tistory.com 야옹*^^* 2007.10.04 21:12 신고 수정/삭제 댓글

    ^^;; 뭔지 모르지만.. 잘 도움이 되셨기를~!!
    모두 화이링~!!

    • Favicon of http://signpen.net 싸인펜 2007.10.05 01:11 신고 수정/삭제

      그 분께서 밤을 새워서라도 과제를 하겠다는 댓글을 확인했습니다^^ㅋ

      자바 소스이긴 하지만, 참고가 될 것 같다고 하시네요.

  3. erer 2007.10.04 23:59 신고 수정/삭제 댓글

    자바로 하셨는데 c++로 하는 법 알려주세요 아시는분은 제 메일
    ufo12_12@naver.com으로 보내주세여 급합니다 꼭 부탁드립니다

    • Favicon of http://signpen.net 싸인펜 2007.10.05 01:14 신고 수정/삭제

      C++은..... OTL

      제 컴퓨터에 C++컴파일러도 설치되어 있지 않고, 게다가 C나 C++쪽은 제가 약해서... 아마 한참 걸릴 것 같습니다...;;

      제가 도움이 되지 못할 것 같아요. 그런데 과제가 같은가봐요??

  4. Favicon of http://luminance.kr/ 루미넌스 2007.10.05 16:21 신고 수정/삭제 댓글

    제 생각에도 화현님 말씀처럼 linkedlist를 사용한 stack을 구현하여 word splitter의 출력을 때려넣는 문제일듯 싶네요^^;

    • Favicon of http://signpen.net 싸인펜 2007.10.07 01:41 신고 수정/삭제

      이거 난감하네요..ㅠㅠ 도움을 드려볼려고 뚝딱거려 본건데 오히려 잘못된정보로 피해만 가게 생겼습니다....;;

      화현님의 댓글과 루미넌스님의 댓글을 모두 보고 곰곰히 생각해 봤는데 두 분께서 말씀하시는 내용이 맞는것 같아요. 이를 어쩌죠..;;

  5. Favicon of http://smilestory.net/blog 태양의눈물 2007.10.06 22:57 신고 수정/삭제 댓글

    LIFO 아닌감? Last In First Out 후입선출 ㅋㅋㅋ 수정요망 뭐그거나 이거나 마찬가지긴 하지만 그렇고 아무것도 쓰지 않은상태에서 애드센스 신청했다가 짤렸당. ㅋㅋ

    • Favicon of http://signpen.net 싸인펜 2007.10.07 01:46 신고 수정/삭제

      으하하~ 이런 실수가!!
      그냥 머릿속에 떠오르는대로 적었더니 잘못 적었나보네..ㅎㅎ

      애드센스 실패했으면 다음에서도 애드센스처럼 애드클릭스라는 서비스를 하고 있으니까 그 쪽도 한번 알아봐바~ 괜찮은 것 같던데~

댓글 쓰기

자바의 포인터?

프로그래밍 2006.12.18 01:41

  요즘 집에 있는 자바와 C언어 책을 번갈아 가면서 보고 있습니다. C언어 공부도 조금 해 볼겸, 자바 책도 함께 보고 있는데요. 겸사겸사 몇 가지 실험 및 연구도 함께 하고 있습니다.

  자바에서 사라진 포인터가 어디쯤에 붙어 있는지에 대해서 알아보고 있습니다. 명시적으로 포인터를 선언해서 사용하지는 않지만 분명 다른 변형된 모습으로 사용되고 있으니까요. 그걸 뒷조사 하고 있습니다. 그냥 이래저래 재미 있습니다^^ㅋ

  그리고 자바에서는 구조체의 형태를 왜 클래스란 이름으로 사용하는지, 구조체와는 다른 클래스의 장점이 무엇인지도 조금 봐 두었구요. 컬렉션인터페이스 부분도 조금 관심있게 살펴보고 있습니다. Vector는 학기 중에 채팅프로그램 서버에서 사용되어서 만져보긴 했지만 Hashtable은 처음 보는 거네요. 이름 그대로 Hash알고리즘을 토대로 비슷하게 구현된 것 같은데 시간이 없어서 대강 보기만 했습니다.

  외에도 C언어의 포인터, 배열 등도 함게 보고 있는데, 재미있네요^^ㅋ 포인터를 학기 중에 배우긴 했었지만 뭐가뭔지 모르는 상태에서 배운 것이라 머릿속에 수업에 필요한 부분만 대강의 스케치만 만들어서 레포트를 작성하고 수업도 들었었는데 이제서야 자세하게 살펴보고 있습니다.

int* p;
int *p;

둘 중에 의미적으로 따지면 왜 첫번째 것이 더 맞는 것인지도 이제서야 이해 했거든요...;;

조금씩 공부는 하고 있는데 여러 일들로 계속 흐름이 끊겨서 장시간 보지는 못하고 있었습니다. 조만간 머릿속에 조금씩 정리 되는대로 블로그에도 다시한번 정리해서 올려야 겠습니다.S

'프로그래밍' 카테고리의 다른 글

JSP에서 JDBC클래스 로드  (2) 2007.01.02
자바 학원, 너무 부럽다...;;;  (21) 2006.12.20
자바의 포인터?  (6) 2006.12.18
요즘 보고 있는 책입니다.  (14) 2006.12.16
글로벌 후킹이라  (8) 2006.12.10
훌륭한 프로그래머의 딜레마  (16) 2006.11.29
top
     TAG C언어, 자바, 포인터
  1. Favicon of http://semix2.tistory.com semix2 2006.12.18 02:03 신고 수정/삭제 댓글

    자바에서 포인터가 사라졌다고는 하지만, 사실 클래스 변수가 포인터입니다. ^^

    • Favicon of http://signpen.net 싸인펜 2006.12.18 12:08 신고 수정/삭제

      제가 하려는 말을 단번에 찝어주셨네요^^ㅋ
      클래스 변수와 더불어 배열 변수도 포인터 처럼 작동하더라구요. 책을 읽어보니 배열로 선언한 변수는 배열의 첫번째 주소값을 참조하고 있는 형태라고 해서 몇 가지 실험을 해 봤는데, 포인터 처럼 여러개의 변수가 한개의 배열 주소값을 동시에 참조하도록 지정도 가능하네요.

      semix2님께서 한 문장으로 정리를 해 주시고 나니까 웬지 김이 빠지는데요....ㅜㅜ

  2. Favicon of http://ruhaus.com 루돌프 2006.12.18 11:00 신고 수정/삭제 댓글

    @_@ 뇌... 뇌의 용적이 부족해지고 있어-_-!!

    • Favicon of http://signpen.net 싸인펜 2006.12.18 12:12 신고 수정/삭제

      저도 책의 내용들을 머릿속에 정리하면서 제가 가진 뇌의 연산속도의 한계를 느끼고 있습니다. 너무 느려요...;;;
      게다가 가끔은 Overflow에 걸려서 그냥 모든것을 중지하고 거실에 TV보러 나갈때도 많습니다...OTL

  3. Favicon of http://basher.pe.kr 루미넌스 2006.12.19 12:47 신고 수정/삭제 댓글

    배열은 대부분의 언어에서(제가 비교적 능숙하게 다룰줄 아는 중에는 "모든" 언어에서) 포인터의 일종입니다^^
    트랙백 하나 쏴둘께요~ 홧팅하세요~

    • Favicon of http://signpen.net 싸인펜 2006.12.19 15:07 신고 수정/삭제

      제게 많은 도움이 되는 글입니다. 사실 트랙백을 보내주시기 전에 루미넌스님 블로그에서 한번 봐 두었던 글이었거든요^^ㅋ

      int* p와 int *p가 뜻하는 차이에 대한 것도 루미넌스님 블로의 글을 읽고나서 책을 보던 중에 머릿속에 정리가 된 부분이구요.

      앞으로도 루미넌스님 블로그에서 좋은 정보 많이 얻어갈게요^^

댓글 쓰기