데이터 구조 3.1 - 스 택 의 선형 표시
//stack.h
#pragma once
#ifndef _STACK
#define _STACK
//        
#define STACK_INIT_SIZE 100
//        
#define STACKINCREMENT 10
//     
#define TRUE 1
#define FALSE 0
typedef struct
{
    int *base;
    int *top;
    int nStackSize;
}sqStack;
//   
int initStack(sqStack &);
//   
int destroyStack(sqStack &);
//   
int clearStack(sqStack &);
//       
int isStackEmpty(sqStack);
//      
int getTop(sqStack, int &);
//   
int push(sqStack &, int);
//  
int pop(sqStack &, int &);
//      
int getStackLength(sqStack, int &);
#endif // !_STACK//stack.cpp
#include "stack.h"
#include <stdlib.h>
#include <string.h>
//   
int initStack(sqStack &S)
{
    //          
    S.base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
    if (!S.base)
        return FALSE;
    //         
    S.top = S.base;
    S.nStackSize = STACK_INIT_SIZE;
    return TRUE;
}
//   
int destroyStack(sqStack &S)
{
    memset(S.top, 0x00, S.nStackSize);
    S.top = NULL;
    S.base = NULL;
    S.nStackSize = 0;
    return TRUE;
}
//   
int clearStack(sqStack &S)
{
    memset(S.top, 0x00, S.nStackSize);
    S.base = S.top;
    S.nStackSize = 0;
    return TRUE;
}
//       
int isStackEmpty(sqStack S)
{
    //        
    if (S.top && S.top == S.base)
        return TRUE;
    return FALSE;
}
//      
int getTop(sqStack S, int &nElem)
{
    //     ,      ,   OK,    FALSE
    if (S.top == S.base)
        return FALSE;
    nElem = *(S.top - 1);
    return TRUE;
}
//  
int push(sqStack &S, int nElem)
{
    //    ,      
    if (S.top - S.base >= S.nStackSize)
    {
        S.base = (int *)realloc(S.base, (S.nStackSize + STACKINCREMENT) * sizeof(int));
        //    
        if (!S.base)
            return FALSE;
        S.top = S.base + S.nStackSize;
        S.nStackSize += STACKINCREMENT;
    }
    *S.top++ = nElem;
    return TRUE;
}
//  
int pop(sqStack &S, int &nElem)
{
    //   ,   S     
    if (S.top == S.base)
        return FALSE;
    nElem = *--S.top;
    return TRUE;
}
//      
int getStackLength(sqStack S, int &nLength)
{
    //       FALSE
    if (S.top == S.base)
        return FALSE;
    nLength = S.nStackSize;
    return TRUE;
}//main.cpp
//    
#include "stack.h"
#include <iostream>
using std::cout;
using std::endl;
typedef int BOOL;
int main()
{
    int nNum = 15;
    //    
    sqStack S;
    BOOL bRet = initStack(S);
    //      
    bRet = isStackEmpty(S);
    if (bRet)
        cout << "   !" << endl;
    else
        cout << "   !" << endl;
    //     
    for (int i = 0; i < nNum; ++i)
    {
        bRet = push(S, i);
        if (!bRet)
            break;
    }
    if (bRet)
    {
        //    
        for (int *p = S.base, i = 0; p < S.top; ++p, ++i)
            cout << "  " << i << ":" << *p << endl;
    }
    //      
    int nElem = 0;
    bRet = pop(S, nElem);
    //    
    if (bRet)
        cout << "       " << nElem << endl;
    //   
    bRet = clearStack(S);
    if (bRet)
        cout << "     " << endl;
    return 0;
        
}이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.