데이터 구조 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에 따라 라이센스가 부여됩니다.