스택 구현중인데 좀 도와주세요....ㅠㅠ
물병자리
질문 제목 : 스택 구현중인데 좀 도와주세요....질문 요약 :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++)로 고치시면 됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |
2691650 | 반복문 | 돋가이 | 2025-04-15 |
2691618 | 링크드리스트 개념 질문이예요 (3) | 맨마루 | 2025-04-15 |
2691592 | 동적할당 이용 배열선언 질문입니다.ㅠㅠ (3) | 허리달 | 2025-04-15 |
2691542 | /=의 용도를 알려주세요 ㅠㅠ! (2) | 아라 | 2025-04-14 |
2691510 | sizeof 연산자 질문입니다 (2) | 종달 | 2025-04-14 |