数据结构 栈的基础
代码写的十分详细,直接看代码
//数据结构 栈
#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;
//s.top++;
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)
{
push(s, n % p);
n /= p;
}
while (s.top != s.base)
{
pop(s, e);
cout << e << " ";
}
cout << endl;
}
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;
conversion(16, 2);
return 0;
}