顺序队列的出栈与入栈

作者在 2013-01-02 16:04:58 发布以下内容
#include<iostream>
#include<stdlib.h>
#include<malloc.h>


#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10


using namespace std;
struct sqstack
{
int *base;
int *top;
int stacksize;
};


int Initstack(sqstack &s)
{
s.base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));
if (!s.base) exit(-2);
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
return 0;
}


int GetTop(sqstack S,int e)
{
    if(S.base == S.top)
        return 0;
    e = *(S.top-1);                      //栈中元素从1开始进栈,所以-1
        return 1;
}


int Pushstack(sqstack &s,int e)
{
if (s.top-s.base >= s.stacksize)
{
s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
if(!s.base) exit(-2);
s.top = s.base + s.stacksize;
s.stacksize += STACKINCREMENT;
}
*s.top++ = e;
return 0;
}


int Popstack(sqstack &s,int &e)
{
if (s.top == s.base)
        return 0;
cout << "出栈元素为:";
int j = s.top - s.base;
for (int i=0; i<j; i++)
{
        e = *--s.top;
        cout << e << " ";
    }
    cout << endl;
    return 0;
}


int CreatStack(sqstack &S)          //建立栈
{
    int e, i, j = 0;
    cout << "请输入您想输入的元素个数:";
    cin >> i;
    cout << "请输入元素:";
    for(; j<i; j++)
    {
        cin >> e;
        Pushstack(S,e);
    }
    return 0;
}


int visit(int e)
{
    cout << e << " ";
    return 0;
}


int StackTraverse(sqstack s,int (*visit)(int))
//从栈底到栈顶依次对栈中每个元素调用函数visit().一旦visit()失败,则操作失败
{
if(s.top < s.base)
cout << "栈已空!";
    while (s.top > s.base)
        visit(*s.base++);
    cout << endl;
    return 0;
}


int main()
{
    int i, e;
    sqstack s;
Initstack(s);
    CreatStack(s);
do{
cout << "*****************" << endl;
cout << "1.进栈" << endl << "2.出栈" << endl << "3.退出程序" << endl;
cout << "*****************" << endl;
cout << "请选择:";
cin >> i;
switch(i)
{
            case 1:cout << "请输入进栈元素:";
                   cin >> e;
                   Pushstack(s,e);
                   cout << "插入后元素为:";
                   StackTraverse(s,visit);
                   cout << "进栈成功!" << endl;
                   break;
            case 2: Popstack(s,e);
                   StackTraverse(s,visit);
                   cout << "出栈成功!" << endl;
                   break;
            case 3:break;
            default:cout << "选择错误!" << endl;
                    break;
        }
}
while(i != 3);
}

默认分类 | 阅读 819 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论