顺序栈

来源:互联网 发布:naca2412翼型数据库 编辑:程序博客网 时间:2024/06/14 05:15

fun.cpp

#include"top.h"
#include<cstdlib>
void InitStack(Sqstack&S)
{
int n;
S.base = (SElemType*)malloc((STACK_INIT_SIZE) * sizeof(SElemType));
if (S.base == NULL)
{
cout << "分配失败" << endl;
}
else 
{
S.top = S.base;
S.nowsize = STACK_INIT_SIZE;
cout << "输入栈中元素的个数" << endl;
cin >> n;
for (int i = 0; i<n; i++)
{
*S.top = i + 1;
S.top++;
}
}
Stacktreverse(S);
}
void push(Sqstack&S )
{
SElemType e;
cout << "输入要插入的数据" << endl;
cin >> e;
if (S.top - S.base >= S.nowsize)
{
S.base = (SElemType*)realloc(S.base, (S.nowsize + STACKINCREMENT) * sizeof(SElemType));
if (S.base == NULL)
{
cout << "分配失败" << endl;
}
else
{
S.top = S.base + S.nowsize;
S.nowsize += STACKINCREMENT;
}
}
*S.top = e;
S.top += 1;
Stacktreverse(S);
}
Status StackLength(Sqstack&S)
{
return S.top - S.base;
}
Status ClearStack(Sqstack&S)
{
if (S.base == NULL)
return error;
else
{
S.top = S.base;
return ok;
}
}
Status GetTop(Sqstack&S)
{
SElemType  e;
if (S.base == NULL)
return error;
else
return e = *(S.top - 1);
}
Status Pop(Sqstack&S)
{
SElemType  e;
if (S.base == NULL)
return error;
else
{
S.top = S.top - 1;
return e = *S.top;
}


}
Status StackEmpty(Sqstack&S)
{
if (S.base == NULL)
return error;
else
return ok;
}
Status DestroyStack(Sqstack&S)
{
if (S.base == NULL)
return error;
delete[]S.base;
S.base = S.top = NULL;
return ok;
//
//
//free(S.base);
}
void Stacktreverse(Sqstack&S)
{
SElemType*p;
cout << "开始输出元素" << endl;
for (p = S.top - 1; p >= S.base; p--)
{
cout << *p << endl;
}
}

mian.cpp

#include<iostream>
using namespace std;
#include"top.h"
int main()
{
Sqstack S;
InitStack(S);//建立空栈。
char a;
do {
cout << "①插入;②栈长;③清空;④取栈顶;⑤退出栈顶;⑥销毁栈;⑦遍历栈" << endl;
int b;
cin >> b;
switch (b)
{
case 1:push(S); break;//插入
case 2:cout << "length=" << StackLength(S); break;//栈长
case 3:if (ClearStack(S) != 0)cout << "完成" << endl; else cout << "失败" << endl; break;//清空栈
case 4:cout << "top=" << GetTop(S); break;//取栈顶
case 5:cout << "top=" << Pop(S); break;//退出栈顶
case 6:if (DestroyStack(S) != 0)cout << "完成" << endl; cout << "失败" << endl; break;//销毁栈
case 7:Stacktreverse(S); break;
}
cout << "是否继续,y为继续" << endl;
cin >> a;
} while (a == 'y');
return 0;


}


top.h

#include<iostream>
using namespace std;
#define  STACK_INIT_SIZE  100  
#define  STACKINCREMENT   10 
typedef  int  SElemType;
typedef int Status;
#define error 0
#define ok 1
typedef struct
{
SElemType *base;
SElemType *top;
int nowsize;
}Sqstack;
void InitStack(Sqstack&S);//空栈,初始化
void push(Sqstack&S);//插入
Status StackLength(Sqstack&S);//栈长
Status ClearStack(Sqstack&S);//清空栈
Status GetTop(Sqstack&S);//取栈顶
Status Pop(Sqstack&S);//退出栈顶
Status StackEmpty(Sqstack&S);//判断是否为空栈
Status DestroyStack(Sqstack&S);//销毁栈
void Stacktreverse(Sqstack&S);//遍历