栈
//定义栈的成员
base是栈的底部
top是栈的顶部
stacksize是栈的空间
typedef struct stack
{
int* base;
int* top;
int stacksize;
}sqstack;
//创建一个栈
给空间,并进行相应的赋值
int initsqstack(sqstack& s)
{
s.base = new int[100];
if (s.base == 0) exit(overflow);
s.top = s.base;
s.stacksize = 100;
return ok;
}
//压栈
所谓压栈就是往栈里面放元素
int push(sqstack& s, int e)
{
if (s.top - s.base >= s.stacksize - 1) return error;
*s.top++ = e;
return ok;
}
//弹栈
弹栈就是把栈里面的元素放出来,一定要注意,它是从后面出
int pop(sqstack& s, int& e)
{
if (s.top == s.base) return error;
e = *--s.top;
return ok;
}
//读栈顶
输出栈的顶部元素
int gettop(sqstack s, int& e)
{
if (s.top == s.base) return error;
e = *(s.top - 1);
return ok;
}
//读栈的长度
读取栈里面的元素个数
int len(sqstack s)
{
return s.top - s.base;
}
//数值转换把数十进制数n,转化为p进制的数
这是栈的一个基础应用
void conversion(int n, int p)
{
int e;
sqstack s;
initsqstack(s);
while (n)
{
if (n % p < 10) push(s, n % p);
if (n % p == 10) push(s, 'A');
if (n % p == 11) push(s, 'B');
if (n % p == 12) push(s, 'C');
if (n % p == 13) push(s, 'D');
if (n % p == 14) push(s, 'E');
if (n % p == 15) push(s, 'F');
n /= p;
}
while (s.top != s.base)
{
pop(s, e);
if (e < 10) cout << e;
else printf("%c", e);
}
cout << endl;
}
// 销毁
相当于把栈清空
int DestroyStack(sqstack& s)
{
if (s.base)
{
delete s.base;
s.stacksize = 0;
s.base = s.top = NULL;
}
return ok;
}
下面直接来完整的代码
//数据结构 栈
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define ok 1
#define error 0
#define overflow -2
//定义栈的成员
typedef struct stack
{
int* base;
int* top;
int stacksize;
}sqstack;
//创建一个栈
int initsqstack(sqstack& s)
{
s.base = new int[100];
if (s.base == 0) exit(overflow);
s.top = s.base;
s.stacksize = 100;
return ok;
}
//压栈
int push(sqstack& s, int e)
{
if (s.top - s.base >= s.stacksize - 1) return error;
*s.top++ = e;
return ok;
}
//弹栈
int pop(sqstack& s, int& e)
{
if (s.top == s.base) return error;
e = *--s.top;
return ok;
}
//读栈顶
int gettop(sqstack s, int& e)
{
if (s.top == s.base) return error;
e = *(s.top - 1);
return ok;
}
//读栈的长度
int len(sqstack s)
{
return s.top - s.base;
}
//数值转换把数十进制数n,转化为p进制的数
void conversion(int n, int p)
{
int e;
sqstack s;
initsqstack(s);
while (n)
{
if (n % p < 10) push(s, n % p);
if (n % p == 10) push(s, 'A');
if (n % p == 11) push(s, 'B');
if (n % p == 12) push(s, 'C');
if (n % p == 13) push(s, 'D');
if (n % p == 14) push(s, 'E');
if (n % p == 15) push(s, 'F');
n /= p;
}
while (s.top != s.base)
{
pop(s, e);
if (e < 10) cout << e;
else printf("%c", e);
}
cout << endl;
}
// 销毁
int DestroyStack(sqstack& s)
{
if (s.base)
{
delete s.base;
s.stacksize = 0;
s.base = s.top = NULL;
}
return ok;
}
int main()
{
sqstack s;
int e, n;
initsqstack(s);
cout << "请输入栈的元数个数n的值:" << endl;
cin >> n;
int r = n;
cout << "请输入栈 " << n << " 个元素的值:" << endl;
while (n--)
{
cin >> e;
push(s, e);
}
cout << "输出栈顶元素的值:" << endl;
gettop(s, e);
cout << e << endl;
cout << "输出栈的长度:" << endl;
int l = len(s);
cout << l << endl;
cout << "输出栈的 " << r << " 个元素的值为:" << endl;
while (s.top != s.base)
{
pop(s, e);
cout << e << " ";
}
cout << endl;
cout << "!!!进制转换!!!" << endl;
int p, q;
cout << "需转换的十进制数" << endl;
cin >> p;
cout << "需转换成的进制" << endl;
cin >> q;
cout << "十进制" << p << "转换为" << q << "进制后的数为:" << endl;
conversion(p, q);
DestroyStack(s);
return 0;
}
这些只是一些基础知识,栈还有更多的地方值得我们去学习