[データ構造]スタック
11811 ワード
🌟 スタックスタック
コンセプト:
制限概念を持つ線形構造で、すべてのデータの挿入と削除は一端でのみ行われます.
機能:
後入先出
トップポインタトップポインタ
エラーが発生した条件:
あふれ飽和状態
底流-空白
スタックの実装📚
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 10
typedef int ELEMENT; //int 대신에 ELEMENT를 써서 스택 쓰기.
typedef struct Stack{
ELEMENT buf[STACK_SIZE];
int top;
}STACK; //구조체 만들기.
void createStack( STACK *s );
int isFull( STACK *s ); //오버일 때
int isEmpty( STACK *s ); //공백일 때
void Push( STACK *s, ELEMENT data ); //원소 삽입
ELEMENT Pop( STACK *s ); //반환
int main(){
int menu;
ELEMENT data ;
STACK stack;
createStack( &stack );
do{
printf("1:push, 2:pop, 0:exit : ");
scanf("%d", &menu);
switch( menu ){
case 1 :
printf("데이터 입력 : ");
scanf("%d", &data);
Push( &stack, data );
break;
case 2 :
data = Pop(&stack);
if( data )
printf("pop 데이터 : %d\n", data);
break;
case 0 :
break;
default :
printf("잘못된 입력 입니다. \n");
break;
}
}while( menu );
}
void createStack( STACK *s ){ // top 포인터를 -1로 초기화
s->top=-1;
}
int isFull( STACK *s ){ // 스택이 가득 차 있으면 true 리턴;
return s->top+1==STACK_SIZE;
}
int isEmpty( STACK *s ){ // 스택이 비어 있으면 true 리턴
return s->top==-1;
}
void Push( STACK *s, ELEMENT data ){ //스택이 가득 차 있으면 문구 출력 후 리턴, 아니면 push
if(isFull(s)){
printf("stack is full\n");
return;
}
s->buf[++(s->top)] = data;
}
int Pop( STACK *s ){ //스택이 비어 있으면 문구 출력 후 0 리턴, 아니면 맨 위 데이터 리턴
if(isEmpty(s)){
printf("stack is empty\n");
return 0;
}
return s->buf[(s->top)--];
}
私はあなたの時間を無駄にしません.I'll write something that won't waste your time.
Reference
この問題について([データ構造]スタック), 我々は、より多くの情報をここで見つけました https://velog.io/@yulim2/Data-Structure-스택-Stackテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol