注册 登录
编程论坛 C++教室

一个栈类的实现的问题,求教!

影x 发布于 2011-10-15 22:34, 1211 次点击
大家好,我有个问题想问一下,我想实现一个栈类,自己写了些代码(如下),现在有一个小问题:1);这个栈的数据类型都是int的,假如现在我在主函数中有两个对象,一个要用数据类型为int的,另一个要用char的,那么应该怎么办呢?  另外我这个代码没问题吧??在此先谢谢大家了!
stack.h
程序代码:

#ifndef _STACK_H
#define _STACK_H
#define STACK_INIT_SIZE    100

typedef struct tagSqStack{
    int *base;                                        // 栈底
    int *top;                                        // 栈顶
    int stacksize;
} SqStack;

class stack
{
private:
    SqStack S;
public:
int InitStack();                            // 创建栈
void Push(int);                            // 向栈中放入数据[压栈]
void Pop(int &);                            // 从栈中取数据[弹栈]
int  GetTop();                                // 查看栈顶数据
}
#endif


stack.cpp
程序代码:

#include"stack.h"
#include<iostream>
using namespace std;                                            
                        //???为了用new,是不是在这个cpp文件里写这个#include<iostream> using namespace std;
int InitStack()                            // 创建栈
{
    S.base = new int[STACK_INIT_SIZE];
    if (!S.base) return(-1);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return(1);
}

void Push(int e)                        // 向栈中放入数据[压栈]
{
    *S.top = e;
    S.top++;
}

void Pop(int &e)                        // 从栈中取数据[弹栈]
{
    if (S.top == S.base) return;
    S.top--;
    e = *S.top;
}

int GetTop()                                // 查看栈顶数据            
{
    if (S.top == S.base) return('E');
    return(*(S.top-1));
}


[ 本帖最后由 影x 于 2011-10-15 22:36 编辑 ]
5 回复
#2
nomify2011-10-15 22:37
代码没看。
用template呀。
#3
mengcan5552011-10-15 22:45
最好的办法是把栈类设计成模板类
#4
lucky5635912011-10-16 08:43
只要记住栈的规则就行了
#5
lqsh2011-10-16 09:24
程序代码:
#define STACK_INIT_SIZE    100
template <class T>
class stack
{
private:
         T*base;
         T *top;
         int stacksize;
public:
    stack()
    {
        InitStack();
    }
    ~stack()
    {
        if(base)
        {
            delete[]base;
        }
    }
int InitStack();                            // 创建栈
void Push(T);                            // 向栈中放入数据[压栈]
void Pop(T&);                            // 从栈中取数据[弹栈]
T  GetTop();                                // 查看栈顶数据
};

template <class T>
int stack<T>:: InitStack()                            // 创建栈
{
    base = new T[STACK_INIT_SIZE];
    if (!base) return(-1);
    top = base;
    stacksize = STACK_INIT_SIZE;
    return(1);
}

template <class T>
void stack<T>:: Push(T e)                        // 向栈中放入数据[压栈]
{
    *top = e;
    top++;
}
template <class T>
void stack<T>:: Pop(T&e)                        // 从栈中取数据[弹栈]
{
    if (top == base) return;
    top--;
    e = *top;
}
template <class T>
T stack<T>::GetTop()                                // 查看栈顶数据           
{
    if (top == base) return('E');
    return(*(top-1));
}
int main()
{
    stack<char>ints;
    ints.Push('1');
    ints.Push('2');
    cout<<ints.GetTop();


    return 0;
}
简单的给你改动一下,自己看看吧。
#6
文思旋风2012-06-13 20:00
用模板类实现
1