顺序栈的实现(SqStack, C++版)[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 yangjq 的 blog

/* stack.h */
#ifndef __sqstack_h__
#define __sqstack_h__ 1

#include <iostream.h>

extern "c" { void exit(int); }

const int ndefaultstacksize = 50; //缺省stack元素个数

//以下为栈的顺序存储结构(顺序栈)的c++类定义
template <class t> //声明为模板类
class stack {
private:
    t   *stacklist; //存放栈元素的指针
    int stacksize;  //存放栈(数组)大小
    int top;        //指示栈顶元素的位置(数组下标)
public:
    //构造函数
    stack(int initsize = ndefaultstacksize) {
        if (initsize < 1) initsize = ndefaultstacksize;
        stacklist = new t[initsize]; //为stacklist分配存储空间
        if (!stacklist) {
            cerr << "为stack分配存储空间失败!程序将终止。"
                 << endl;
            exit(1);
        }
        stacksize = initsize; //初始化栈大小
        top = -1; //初始化栈顶位置
    }
    //析构函数
    ~stack() {
        if (stacklist) delete [] stacklist;
        stacksize = 0;
        top = -1;
    }
    //判断栈是否为空
    int stackempty() const {
        return top < 0; //top == -1;
    }
    //判断是否栈满
    int stackfull() const {
        return top == stacksize - 1;
    }
    //返回栈中元素个数
    int stacklength() const {
        return top + 1;
    }
    //压栈
    void push(const t& item) {
        if (top >= stacksize - 1) {
            cerr << "栈已满,无法继续压栈操作!" << endl;
            return;
        }
        top ++; //修改栈顶位置(下标)
        stacklist[top] = item; //类型t需支持=运算符
    }
    //出栈
    t pop() {
        t   temp;
        if (top >= 0) {
            temp = stacklist[top]; //转存栈顶元素取值
            top --; //修改栈顶位置
        }
        else
            cerr << "栈为空,无法继续出栈操作!" << endl;
        return temp;
    }
    //读取栈顶元素
    t peek() const {
        t   returnvalue;
        if (top >= 0)
            returnvalue = stacklist[top];
        else
            cerr << "栈为空,无法读取栈顶元素!" << endl;
        return returnvalue;
    }
    //清空栈
    void clearstack() {
        top = -1; //栈顶位置复位
    }
};

//将十进制数num转换成tosys(2--36)进制的值(以字符串形式存入destnum并返回)
char *decimalconversion(unsigned long num, unsigned char tosys, char destnum[])
{
    if (!destnum) return null;
    stack<int>  s(80);
    unsigned char   i = 0;
    int item;
    if (tosys<2 || tosys>36) { destnum[0] = '\0'; return destnum; }
    while (num) {
        s.push(num % tosys);
        num = num / tosys;
    }
    while (!s.stackempty()) {
        item = s.pop();
        destnum[i] = (unsigned char)(item) +

本文关键:顺序栈的实现(SqStack, C++版)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top