以下是我写的几个栈操作的例子,仅供参考,分别是数制转换(将十进制数转换为替他d进制数),括号匹配的检查,表达式求值等。

//头文件SqStack.h
   #include <stdio.h>
#include 
<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE true
#define FALSE false
//typedef int ElemType;    
typedef char ElemType;      //视情况选择
#define ERROR printf("Fail!\n")
#define SUCCESS printf("Success!\n")
#define DEBUG_

class SqStack
{
public:
    ElemType
* base;
    ElemType
* top;
    
int stackSize;
public:
    
bool InitStack();
    
bool Push(ElemType e);
    
bool Pop(ElemType& e);
    
bool IsEmpty()
    
{
        
return this->base == this->top;
    }

}
;

bool SqStack::InitStack()
{
    
this->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    
if(!this->base)
    
{
        printf(
"Error!");
        
return FALSE;
    }

    
this->top = this->base;
    
this->stackSize = STACK_INIT_SIZE;
    
return TRUE;
}


bool SqStack::Push(ElemType e)
{
    
if(this->top - this->base >= this->stackSize)
    
{
        
this->base = (ElemType*)malloc(
            (STACK_INIT_SIZE 
+ STACKINCREMENT) * sizeof(ElemType));
        
if(!this->base)return FALSE;
        
this->top = this->base + this->stackSize;
        
this->stackSize += STACKINCREMENT;
    }

    
*(this->top++= e;
    
return TRUE;
}

bool SqStack::Pop(ElemType& e)
{
    
if(this->top == this->base)return FALSE;
    e 
= *(--this->top);
    
return TRUE;
}
      1.数制转换 convert.cpp
   #include "SqStack.h"
void convert()
{
    unsigned 
int N;
    ElemType e;
    SqStack stack;
    stack.InitStack();
    printf(
"please input:");
    scanf(
"%d"&N);
    
while(N)
    
{
        stack.Push(N 
% 8);
        N 
= N / 8;
    }

    
while(stack.base != stack.top)
    
{
        stack.Pop(e);
        printf(
"%d", e);
    }

    printf(
"\n");
}

void main()
{
    convert();
}

      2.括号匹配检查 test.cpp

#include "SqStack.h"
   bool compatible(ElemType a, ElemType b)
{
    
return a == ')' && b == '(' || a == '(' && b == ')'
        
|| a == ']' && b == '[' || a == '[' && b == ']'
        
|| a == '}' && b == '{' || a == '{' && b == '}';
}


void test()
{
    ElemType e;
    
char* s = new char[STACK_INIT_SIZE];
    printf(
"Input the string to test with '(', ')', '[', ']':");
    gets(s);
    SqStack strStack;
    
if(!strStack.InitStack())
    
{
#ifdef DEBUG_
        printf(
"Stack initialize fail!\n");
#endif
        ERROR;
    }

    
while(*!= '\0')
    
{
        strStack.Push(
*s);
        s
++;
        
if(!compatible(*(strStack.top - 1), *(strStack.top - 2)))
        
{
            
if(*== '\0')return;
            strStack.Push(
*s);
            s
++;
        }

        
while(compatible(*(strStack.top - 1), *(strStack.top - 2)))
        
{
            strStack.Pop(e);
            strStack.Pop(e); 
        }

    }

    
if(strStack.IsEmpty())
    
{
        SUCCESS;
    }

    
else ERROR;

}


void main()
{
    test();
}
   说明:例如,({}[])是合法格式,而[](]为不正确的格式