못정함
4장. 스택 본문
#include <stdio.h>
#include <stdlib.h>
#define STACK_MAX 100
////하나의 프로그램에서 여러 개의 스택 다루기....
typedef struct {
int number; //선수번호
char name[30]; //이름
} player;
typedef struct {
player player[STACK_MAX];
int top;
} Stack;
//////////필요한 함수/////////////
void initStack(Stack* s); ///stack의 주소로 전달
int isFull(Stack* s);
int isEmpty(Stack* s);
void push(Stack* s, player p);
player pop(Stack* s);
player peek(Stack* s); //가장 위의 값을 알려줌. pop과 비슷한데 return만함. 삭제는 안됨
//////////////////////////////////
int main()
{
Stack stack; //스택 선언
initStack(&stack); //주소를 넘겨줘야함. 스택 초기화
//선수 데이터
player p1 = {10, "Hong"};
player p2 = {20, "Lee"};
player p3 = {30, "Kim"};
//스택에 선수 추가
push(&stack, p1);
push(&stack, p2);
push(&stack, p3);
//스택의 최상단 선수 확인
peek(&stack);
//스택에서 선수 제거
pop(&stack); //top이 제거됨. 결과: p3 (제거된 애를 보여줌)
//스택에서 다시 최상단 선수 확인
peek(&stack);
return 0;
}
/////////////////////////////
///stack의 주소로 전달
void initStack(Stack* s)
{
s -> top = -1; // 포인터를 top을 가리키게 하고 -1로 설정
}
int isFull(Stack* s)
{
return s -> top == STACK_MAX -1;
}
int isEmpty(Stack* s)
{
return s -> top == -1;
// 멤버변수에 접근하는 것. 포인터이름 -> 멤버변수이름
}
void push(Stack* s, player p)
{
if(isFull(s))
{
printf("stack is full \n");
return;
}
else {
s -> player[++(s->top)] = p;
printf("your data is pushed: player.num: %d, player.name:%s\n", p.number, p.name);
/*주소에 데이터 추가 시
포인터이름 -> 멤버변수이름 = 값; */
}
}
player pop(Stack* s)
{
player p = {0, ""};
if(isEmpty(s))
{
printf("Stack is empty\n");
//return;
}
else{
p = s-> player[(s->top)--];
printf("popped) num: %d, name: %s\n", p.number, p.name);
}
}
//가장 위의 값을 알려줌. pop과 비슷한데 return만함. 삭제는 안됨
player peek(Stack* s)
{
player p = {0, ""};
if(isEmpty(s))
{
printf("stack is empty\n");
return p;
}
else
{
p = s-> player[s->top];
printf("PEEK is...num: %d, name %s \n", p.number, p.name);
}
}
'자료구조' 카테고리의 다른 글
9장. 트리의 탐색) 순회, 탐색 (0) | 2024.11.26 |
---|---|
6장. 연결리스트 - 단순 연결리스트: 메모리 동적관리하려고 (0) | 2024.10.16 |
4장. 큐 (0) | 2024.10.16 |
5. 스택의응용2: 후위표기식 (0) | 2024.10.09 |
5. 스택의 응용1 (0) | 2024.10.09 |