스 택 의 정적 배열

여 기 는 정적 배열 을 사용 하여 스 택 의 기본 적 인 조작 을 실현 합 니 다. 스 택 의 지식 이 비교적 간단 하고 기본 적 인 조작 코드 가 대체적으로 제시 되 었 습 니 다. 여 기 는 Visual studio 를 사용 하여 시 뮬 레이 션 을 할 수 있 습 니 다. 싱글 칩 마이크로컴퓨터 로 옮 겨 사용 할 수 있 습 니 다.
//      :      
//author:  
//
#include "stdio.h"
//         
#define stack_type int
//     
#define stack_len 10
//     
#define stack_full 0
#define stack_no_full 1

#define stack_empty 0
#define stack_no_empty 1
//      
#define success 0
#define failed 1
//    
static stack_type stack_1[stack_len];
static int top_elemnt = -1;
//        
#define u8 unsigned char

//  
u8 Is_stack_empty(void)
{
    if (top_elemnt == -1)
        return stack_empty;
    else return stack_no_empty;
}
//  
u8 Is_stack_full(void)
{
    if (top_elemnt == stack_len - 1)
        return stack_full;
    else return stack_no_full;
}
//  
u8 push(stack_type data)
{
    if (Is_stack_full() == stack_full)
        return failed;
    else
        top_elemnt += 1;
    stack_1[top_elemnt] = data;
    return success;
}
//  
u8 pop(stack_type *data)
{
    if (Is_stack_empty() == stack_empty)
        return failed;
    else
        *data = stack_1[top_elemnt];
    top_elemnt -= 1;
    return success;
}
//                 
u8 top(stack_type *data)
{
    if (Is_stack_empty() == stack_empty)
        return failed;
    else
        *data = stack_1[top_elemnt];
    return success;
}

int main(void)
{
    u8 cnt = 0;
    stack_type data[1] = {0};
    printf("stack app running..\r
"
); for (cnt = 0; cnt < stack_len + 10; cnt++) { if (push(cnt) == failed) printf(" \r
"
); else printf(" \r
"
); } // , , for (cnt = 0; cnt < stack_len ; cnt++) { printf("stack_1[%d]=%d\r
"
,cnt,stack_1[cnt]); } printf("top_element = %d\r
"
,top_elemnt); for (cnt = 0; cnt < stack_len + 10; cnt++) { if (pop(data) == failed) printf(" \r
"
); else printf(" %d\r
"
, *data); } printf("top_element = %d\r
"
, top_elemnt); while (1); return 0; }

좋은 웹페이지 즐겨찾기