作者在 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);
}
#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);
}