스택질문드립니다
이하얀
#includestdio.h
#includestdlib.h
#define SIZE 100typedef int element;
element testpaper[SIZE];
int top = -1;void push(element item)
{
if(top = SIZE-1) {printf(\n\n Testpapers are 40);
return;
}
else testpaper[++top]=item;
}element pop() { //삭제 후 반환
if(top==-1){ //top = -1 이면 공백스택
printf(\n\n There are no papers\n);
return 0;
}
else return testpaper[top--];
}void del(){ //반환이 없는 삭제
if(top==-1){
printf(\n\n There are no papers\n);
exit(1);
}
else top--;
}element peek(){ //스택의 top이 지칭하는 원소를 검색하는 연산
if(top==-1){
printf(\n\n There are no papers\n);
exit(1);
}
else return testpaper[top];
}void showpapers(){// 스택 내용 출력(시험지가 몇번째 장인지)
int i;
printf(\n papers [\n);
for(i=0; itop+1; i++)
if(i=9)printf(%dㅡ\n, testpaper[i]);else
printf(%d ㅡ\n, testpaper[i]);
printf(]\n);
}
/// 번호가 클수록 먼저 쌓인 것.
void main() {
int item; int j,k,w;
for(j=1; j41; j++) push(j);
showpapers();
for(k=1; k26; k++) del(); showpapers();
========================================================================위 코딩을 실행하면 123***3940 // push(삽입부분입니다)del부분123***15 // 삭제연산부분이렇게출력됩니다. 스택의 특성상 먼저입력된것이 나중에나와야하는대del부분에서 삭제한건1~25까지인대 막상 출력하고나면26~ 40이 숫자로나와야하는대 왜1~15로 나오는지 모르겠네요 알려주세요
-
딥와인
아 그러네요 원리에좀어긋나게
협소한생각을한듯합니다 도움주심에 감사드립니다
for문을 그렇게돌릴생각을못했네요 감사합니다 -
구슬
약간 다르게 생각하신 거 같아요. 출력할 때 top의 위치부터 인덱스 0까지 출력을 해야 옳게 나올 거에요.
void showpapers()
{// 스택 내용 출력(시험지가 몇번째 장인지)
\tint i;
\tprintf(\\\n papers [\\n\);
\tfor(i=top; i=0; --i)
\t\tif(i=9)
\t\t\tprintf(\%dㅡ\\n\