🎈1. 문제

🎆2. 소스코드 +주석
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char** list; /*이중 포인터*/
int size; /*스택 크기*/
int top; /*top*/
}MyStack;
void inint(MyStack** s, int size)
{
*s = (MyStack*)malloc(sizeof(MyStack)); /*단일 포인터로 스택 동적 할당*/
(*s)->top = -1; /*top를 1로 저장 */
(*s)->size = size; /*스택 크기 저장*/
(*s)->list = (char**)malloc(sizeof(char*) * size); /*이중포인터를 이용한 문자열 동적 배열 */
for (int i = 0; i < size; i++) {
((*s)->list[i]) = (char*)malloc(100); /*문자열의 크기를 정해진 크기만큼 동적 배열 */
}
}
/*스택이 공백일 경우 호출 함수 */
int is_empty(MyStack* s)
{
return(s->top == -1);
}
/*스택이 꽉 찼을때 호출 함수 */
int is_full(MyStack* s)
{
return(s->top == (s->size - 1));
}
/*삽입 함수 */
void push(MyStack* s, const char* word)
{
if (is_full(s)) {
printf("스택 포화 에러\n");
}
else {
strcpy((s->list)[s->top + 1], word);
s->top += 1;
}
}
/*삭제 함수*/
char* pop(MyStack* s)
{
if (is_empty(s)) {
printf("스택 공백 에러\n");
exit(1);
}
else {
return s->list[(s->top)--];
}
}
int main(int argc, char* argv[])
{
MyStack* s = NULL;
init(&s, 3);
push(s, "Good");
push(s, "World");
push(s, "Hello");
push(s, "Hi");
while (!is_empty(s)) {
printf("%s\n", pop(s));
}
pop(s);
free(s);
return 0;
}
🎇3. 실행 캡쳐 화면

✨4.느낌점
이번 스택퀴즈를 풀면서 예전에 숫자로 스택에 값을 push하고 pop하는 스택을 만들었는데 이번 퀴즈에는 문자열을 이용하여 해당하는 문자들을 push하고 pop하는 과정이 새로웠다. 그리고 이러한 문자열에도 주어진 크기의 동적할당을 해야되었고, 이를 구현하기위해서는 더블포인터 즉, 이중포인터를 통해서 스택이 아니라 문자열에 들어갈 크기를 동적 할당해야된다는 사실을 알게 되었다. 이렇게 스택 코드를 구현할 때 처음에는 이중포인터를 써야하는지에 대해 잘 몰랐었고, 기존의 포인터에 대한 개념과 원리를 완벽하게 습득하지 못하여 이중포인터를 쓰려고 해도 정말 막막하였다. 하지만 처음부터 포인터에 대한 이해와 습득을 바탕으로 포인터에 대해 알게 되었고, 이중포인터도 막대한 시간 투자를 통해 포인터에 대한 개념을 바탕으로 접근 할 수 있었다. 나는 이번 스택구현 퀴즈를 풀면서 기존의 숫자를 pop push 하는것과 다르게 문자열을 사용한다는 점이 정말 이번 퀴즈를 해 많은 것을 깨닫게 되었고, 이를 구현하기위한 이중포인터에 개념을 새롭게 배우게 되어서 좋은 경험이 된 것 같다고 생각한다.그리고 앞으로 C언어에 대한 복습을 바탕으로 내가 지금 어느부분이 부족한지를 깨닫고 조금씩 채워가야한다는 점도 깨닫게 되었다.