스키마에듀 수업 0721
2023. 7. 21. 16:31ㆍ스키마에듀 c언어 수업
728x90
// int형 stack
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int max; //스택 용량
int ptr; //스택의 data 개수
int *stk; //스택에 사용할 배열
} IntStack;
/*--- 스택 초기화 ---*/
int Initialize(IntStack *s, int max) {
s->ptr = 0;
if ((s->stk = (int*)calloc(max, sizeof(int))) == NULL){ //배열 생성 실패
s->max = 0;
return -1;
}
s->max = max;
return 0;
}
/*--- 스택에서 데이터를 pop ---*/
int Push(IntStack *s, int x){
if(s->ptr >= s->max)
return -1;
s->stk[s->ptr++] = x;
return 0;
}
/*--- 스택에서 데이터를 제거 ---*/
int Pop(IntStack * s, int *x){
if(s->ptr <= 0){ //스택이 비어있음.
return -1;
}
*x = s->stk[--s->ptr];
return 0;
}
/*--- 스택에서 데이터를 peek ---*/
int Peek(const IntStack *s, int *x){
if(s->ptr <=0){ //stack이 비어있음.
return -1;
}
*x = s->stk[s->ptr -1];
return 0;
}
/*--- 스택의 모든 요소 삭제 ---*/
void Clear(IntStack *s){
s->ptr = 0;
}
/*--- 스택의 최대 용량 ---*/
int Capacity(const IntStack *s){
return s->max;
}
/*--- 스택의 데이터 개수 ---*/
int Size(const IntStack *s){
return s->ptr;
}
/*--- 스택이 비어 있나요? ---*/
int IsEmpty(const IntStack *s){
return s->ptr <=0 ;
}
/*--- 스택이 가득 찼나요? ---*/
int IsFull(const IntStack *s){
return s->ptr >= s->max;
}
/*--- 스택에서 검색 ---*/
int Search(const IntStack *s, int x){
for(int i= s->ptr -1 ; i>=0; i--){ //꼭대기(top) -> 바닥(bottom)으로 선형 검색
if(s->stk[i] == x)
return i; //검색 성공
}
return -1; //검색 실패
}
/*--- 모든 데이터 출력 ---*/
void Print(const IntStack *s){
int i;
for(int i=0; i< s->ptr; i++){ //bottom -> top
printf("%d ", s->stk[i]);
}
printf("\n");
}
/*--- 스택 종료 ---*/
void Terminate(IntStack *s){
if(s->stk != NULL){
free(s->stk);
}
s->max = s->ptr = 0;
}
int main(void){
IntStack s;
if(Initialize(&s, 64) == -1){
puts("스택 생성에 실패했습니다.");
return 1;
}
while(1){
int menu, x;
printf("현재 데이터 수 : %d / %d \n", Size(&s), Capacity(&s));
printf("(1)푸시 (2)팝 (3)피크 (4)출력 (0)종료: ");
scanf("%d", &menu);
if(menu == 0)break;
switch(menu){
case 1:
printf("데이터 : ");
scanf("%d", &x);
if(Push(&s, x) == -1)
puts("오류 : 푸시에 실패했습니다.");
break;
case 2:
if(Pop(&s, &x) == -1){
puts("오류 : 팝에 실패했습니다.");
}else
printf("팝 데이터는 %d입니다.\n", x);
break;
case 3:
if(Peek(&s, &x) == -1){
puts("오류 : 피크에 실패했습니다.");
}else
printf("피크 데이터는 %d입니다.\n", x);
break;
case 4: //출력
Print(&s);
break;
}
}
Terminate(&s);
return 0;
return 0;
}
04스택과큐.pdf
16.07MB
https://www.acmicpc.net/problem/23305
23305번: 수강변경
$1$번 학생과 $5$번 학생이 수업을 교환하고, $2$번 학생과 $4$번 학생이 수업을 교환하면 $3$번 학생을 제외한 모든 학생이 원하는 수업을 수강할 수 있다.
www.acmicpc.net
https://www.acmicpc.net/problem/21313
21313번: 문어
문어에게 여덟개의 팔이 있다는 사실은 잘 알려져 있다. 하지만 문어들이 자신의 팔들을 1번, 2번, 3번, ..., 8번이라고 부른다는 말은 오늘 처음 들었을 것이다! 단, 시계방향으로 오름차순이라던
www.acmicpc.net
'스키마에듀 c언어 수업' 카테고리의 다른 글
스키마에듀_백준문제 0812 (1) | 2023.08.06 |
---|---|
스키마에듀 백준 0729 (0) | 2023.07.25 |
0715 스키마에듀 c언어 자료구조 수업 (0) | 2023.07.15 |
스키마에듀 수업 0713 백준 (0) | 2023.07.13 |
0708 스키마에듀 수업 (0) | 2023.07.07 |