스택 구현중인데 좀 도와주세요....ㅠㅠ
물병자리
질문 제목 : 스택 구현중인데 좀 도와주세요....질문 요약 :ea 스택 구현이 이상하게 안되요;;질문 내용 :#include stdio.h
#include stdlib.h
#define stack_size 100
typedef int element; // int를 스택 element의 자료형으로 정의
element stack[stack_size]; -fa스택 입니다
element ea_stack[stack_size]; -ea스택 입니다. fd랑 ed도 있는데 그건 저 혼자해볼려고 코드 안올렸습니다.
element fd_stack[stack_size];
element ed_stack[stack_size];
int top = -1; // 스택의 top의 초기값을 -1로 설정 -fa스택 초기값
int eatop = 0; -ea스택 초기값 .
int fdtop = stack_size;
int edtop = stack_size-1;
void push(element item) //스택의 삽입 연산 -fa스택 push입니다.
{
if(top = stack_size-1) //스택이 이미 full인 경우
{
printf(\n\n stack is full ! \n);
return;
}
else stack[++top] = item;
}
void ea_push(element item) -ea스택 push입니다.
{
if(eatop = stack_size)
{
printf(\n\n stack is full ! \n);
return;
}
else ea_stack[eatop++] = item;
}
element pop() // 스택의 삭제 후 반환 연산 -fa pop입니다.
{
if(top == -1) // 현재 스택이 공백인 경우
{
printf(\n\n stack is empty!! \n);
return 0;
}
else return stack[top--];
}
element ea_pop() -ea pop입니다.
{
if(eatop == 0)
{
printf(\n\n stack is empty!! \n);
return 0;
}
else return ea_stack[--eatop];
}
void printstack() // 스택 내용 출력 연산 -fa 스택 출력
{
int i;
printf(\n stack [ );
for(i=0; i=top; i++)
{
printf(%d, stack[i]);
}
printf( ] );
}
void ea_printstack() -ea 스택 출력
{
int i;
printf(\n stack [ );
for(i=0; i=eatop; i++)
{
printf(%d, ea_stack[i]);
}
printf( ] );
}
void main(void) -여기가 문제입니다;;;
{
/////////////////////////////////////////////////
int item;
printf(========= fa_stack ==========\n);
fa_printstack(); -fa스택 실행 결과는 stack[]
fa_push(1);stack[1]
fa_printstack();stack[1 2]
fa_push(2);;stack[1 2 3]
fa_printstack();stack[1 2]
fa_push(3);stack[1]
fa_printstack(); stack[] 이렇게 제가 원하는데로 잘나옵니다.
fa_pop();
fa_printstack();
fa_pop();
fa_printstack();
fa_pop();
fa_printstack();
///////////////////////////////////////////////////
printf(\n========= ea_stack ==========\n);
ea_printstack(); -ea스택이 안됩니다...미치겠습니다;;2시간을 아무리 해봐도 이해가 안됩니다;안될이유가 없어보이는데;
ea_push(1); 실행 결과가 stack[0]
ea_printstack(); stack[1 0]
ea_push(2);stack[1 2 0]
ea_printstack(); stack[1 2 3 0]
ea_push(3); stack[1 2 3]
ea_printstack(); stack[1 2]
ea_pop(); stack[1]이렇게 나옵니다...하.....
ea_printstack();
ea_pop();ea스택 특성상top이 0으로 초기값을 줘야되니깐 초기값0이 틀린것 같지는않고;;
ea_printstack();실행결과 2번줄에서 배열[0]에 1이 들어간것도 맞고 그리고 여기서 top은 1다음0을 가르키겠고
ea_pop(); 이렇게 해서 4번째줄까지맞는것 같습니다 근데!!!
ea_printstack(); pop 함수에서 분명 top을 1내리고 리턴인데...왜 0이 없어지는지 이해가 안갑니다;;
}push 3번 pop 3번이면 0만 남아야되는데... 뭐가 잘못됬는지 몇시간을 봐도 도저히 모르겠습니다;
제발제발 도와주세요..ㅠㅠㅠ
-
한누리
아...그렇군요... 에고에고... 더 공부해야겠네요...흑....
실시간으로 답변 주셔서 정말 감사합니다.ㅠㅠ
좋은일 생기세요!!!! -
소유
일단 언어적인 측면만 봐도 값을 리턴한다고 그 값이 사라지거나 하지는 않죠 ㅎㅎ
스택의 개념상 pop()이 값을 빼고 제거한다고 예제와 함께 설명이 되어 있는것 같네요.
일단 현재 구현상으로는 pop()하고 제거하는 코드는 없습니다. ㅎㅎ
pop()으로 빠진 부분이 0으로 바뀌기를 원하신다면 그렇게 구현하시면 될 것 같습니다.
정석적인건 있겠지만 꼭 이렇게해야한다는 정답은 없을 것 같습니다. 포인터로 동적할당 하셨으면 push(), pop()해서 -
카제
헐;;;; 저 pop함수로 3값이 배열에서 빠져나가는게 아닌가요?;;;
그럼FA_stack은 어찌 저리 나오는거지용?ㅠㅠ아오 미치겠넹;;;
그럼 FA_stack도 날라가는게 아니면 for으로 FA스택배열 출력하면 123이 나와야되네용???
아 정말 그렇네요;;;지금 돌려봤는데 pop실행 다 하고도 1230000이 찍히네요;;;
뭐지.ㅡ,ㅡ FA는 책에 있는 예문 그대로 쓴거거든요;;
스택이란게 push하면 데이터 입력하고 pop하면 그 데이터 없애는거 -
치리
리턴을 3을 하는건 맞는데요. 여기서 리턴을 한다고 그 값이 사라지거나 하지는 않습니다..
2번째에 있는 값이 3인데 그 값이 유지가 되는 상태에서 EA_printStack()이 EAtop까지 출력을
하기 때문에 2번째에 있는 값인 3까지 출력됩니다. -
새늘
배열에 0=1들어가고 1=2들어가고 2=3 들어가잖아요 push하면 초기값이 EAtop 0이구
push는 데이터값을 먼저 넣은후에 이동하니깐 초기값 0번째에 1을 넣고 1번째배열을 가르키잖아요ㅠ
이렇게 해서 3까지 데이터를 넣으면 0=1 1=2 2=3 이 들어가고 EAtop은 배열 3번째를 가르키잖아용
이제pop을 해야되는데 EApop은 먼저 한단계 내려온후에 그 값을 리턴하잖아용 3번째에 있었으니깐
2번째에 가서 거기에 들어가있는 값 3을 리 -
초롬
push()와 pop()이 정확하게 어떻게 동작하게 만들고 싶으신건가요??
그걸 알면 문제점을 찾을텐데 그냥 제가 보기에는 지금 소스에서는 저렇게 나오는게 맞습니다만....
push(), pop()이 메모리의 이동같은게 아니고 정적으로 잡힌 스택의 인덱스값만 변화시키는데 현재 구현상으로는 push()할 때는 0번부터 push()가 되서 1, 2, 3 이렇게 들어가지고요.
pop()할때는 인덱스만 줄어드니까 1, 2, 3이 들어있는건 그대로 유지된 -
셋삥
끙;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
보여지게 하는건 쉽지요;;;
pop이 제 기능을 못하는 이유를 알고 싶은건뎅;;;;ㅠㅠㅠㅠㅠㅠㅠㅠㅠ -
간지포텐
위의 결과처럼 보이길 원하시는건가요??
좀 허무하지만 EA_printStack()에서 for(i = 0 ; i EAtop; i++)로 고치시면 됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676182 | 숫자 순서대로 배열하는법 | 권뉴 | 2024-11-24 |
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |