C언어 스택알고리즘/자료구조2023. 8. 24. 17:04
Table of Contents
Source Code
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef int element; // 스택 원소(element)의 자료형을 int로 정의
typedef struct stack
{
element stack[STACK_SIZE]; // 1차원 배열 스택 선언
int top; // top 초기화
}StackType;
// 스택이 공백 상태인지 확인하는 연산
int isEmpty(StackType* s)
{
if (s->top == -1) //이게 스택이 공백인 조건
//1부터 시작하는 스택이면 top이==0일때 공백
return 1;
else
return 0;
}
// 스택이 포화 상태인지 확인하는 연산
int isFull(StackType* s) //100개 되면 포화
{
if (s->top == STACK_SIZE - 1)
return 1;
else
return 0;
}
// 스택의 top에 원소를 삽입하는 연산
void push(StackType* s, element item) //element==int
{
if (isFull(s))
{ // 스택이 포화 상태인 경우
printf("\n\n Stack is FULL! \n");
return;
}
else
s->top++; //(1)top=top+1
s->stack[s->top] = item; // (2) top자리에 원소를 넣는다 top을 증가시킨 후 현재 top에 원소 삽입
}
//증가시키고 삽입 , 삭제한후 감소
// 스택의 top에서 원소를 삭제하는 연산
element pop(StackType* s)
{
element item;
if (isEmpty(s))
{ // 스택이 공백 상태인 경우
printf("\n\n Stack is Empty!!\n");
return 0;
}
else
{
item = s->stack[s->top];
s->top--;
return item;
}
// 현재 top의 원소를 삭제한 후 top 감소
}
//탑을 아래로 내리는 것이 원소를 삭제하는 것이다. 삭제하면서 원래 있는 원소에 덮어씀 다음번에 그자리에 덮어쓸것
// 스택의 top 원소를 검색하는 연산
element peek(StackType* s)
{
if (isEmpty(s))
{ // 스택이 공백 상태인 경우
printf("\n\n Stack is Empty !\n");
exit(1);
}
else
return s->stack[s->top]; // 현재 top의 원소 확인 그냥 보기만함 삭제하지않음
}
// 스택의 원소를 출력하는 연산
void printStack(StackType* s)
{
int i;
printf("\n STACK [ ");
for (i = 0; i <= s->top; i++)
printf("%d ", s->stack[i]);
printf("] ");
}
StackType* initStack(StackType* s)
{
s = (StackType*)malloc(sizeof(StackType)); //s 할당
s->top = -1; // s.top->1로 초기화해야함
return s;
}
void main(void)
{
element item;
StackType* s = NULL;
s = initStack(s); // 스택을 초기화 한다
printf("\n** 순차 스택 연산 **\n");
printStack(s);
push(s, 1); printStack(s); // 1 삽입
push(s, 2); printStack(s); // 2 삽입
push(s, 3); printStack(s); // 3 삽입
item = peek(s); printStack(s); // 현재 top의 원소 출력
printf("peek => %d", item);
item = pop(s); printStack(s); // 삭제
printf("\t pop => %d", item);
item = pop(s); printStack(s); // 삭제
printf("\t pop => %d", item);
item = pop(s); printStack(s); // 삭제
printf("\t pop => %d", item);
free(s);
getchar();
}
실행 결과
'알고리즘 > 자료구조' 카테고리의 다른 글
C언어 트리 (0) | 2023.08.24 |
---|---|
C언어 이중 연결 리스트 (0) | 2023.08.24 |
C언어 연결리스트 -요일 삽입 (0) | 2023.08.24 |
C언어 연결리스트 (0) | 2023.08.24 |
C언어 단순 연결 리스트 (0) | 2023.08.24 |