扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
看一个栈的简单实现,所有代码都写在一个头文件中,实际的话,最好把声明和实现分开。
成都创新互联公司是一家专业提供呼中企业网站建设,专注与网站设计制作、网站建设、H5响应式网站、小程序制作等业务。10年已为呼中众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
#ifndef STACK_H
#define STACK_H
class Stack
{
public:
Stack();
Stack(const Stack copy);
Stack operator= (const Stack copy);
~Stack();
int getHeight() const;
bool isEmpty();
bool push(const int e);
bool pop(int e);
bool top(int e) const;
private:
int count;
int element[MAX_SIZE];
};
Stack::Stack()
{
count = 0;
}
Stack::Stack(const Stack copy)
{
this-count = copy.count;
for(int i = 0; i copy.count; i++)
{
element[i] = copy.element[i];
}
}
Stack Stack::operator =(const Stack copy)
{
if(copy != this)
{
this-count = copy.count;
for (int i = 0; i copy.count; i++)
{
element[i] = copy.element[i];
}
}
return *this;
}
Stack::~Stack()
{
count = 0;
}
int Stack::getHeight() const
{
return count;
}
bool Stack::isEmpty()
{
return count == 0;
}
bool Stack::push(const int e)
{
if (getHeight() == MAX_SIZE)
{
return false;
}
element[count++] = e;
return true;
}
bool Stack::pop(int e)
{
if (isEmpty() )
{
return false;
}
e = element[count--];
return true;
}
bool Stack::top(int e) const
{
e = element[count - 1];
return true;
}
#endif
这样的表示确实是有的,我来详细介绍一下.
其中,表示引用,而*表示指针.
我们来看一下,如果你的参数写成 void initstack(sqstack *s)
这是什么意思呢,想必都知道,就是把main()函数中的一个定义的指针赋值给指针s,这就说到了对于函数参数传递的问题,函数的参数传递分为引用和非引用
那么它们的区别是什么呢?举个例子
#includeiostream
using namespace std;
void initstack1(int *s){ *s=8 ;}
void initstack2(int *s){ *s=8;}
//这两个函数分为函数1和函数2来表示,另外sqstack是数据结构中的类C语言,在编译中是会报错的,我们换一个数据类型
int main(){
int a=1,b=1;
int *p1=a,*p2=b;//不好意思第一次搞错了
initstack1(p1);
cout*p1; //结果是输出1
initstack2(p2);
cout*p2; //结果是输出8
}
引用(加)和非引用(不加)为什么结果不一样呢,都是赋值的函数呀
这就是函数作用域和生命期的原因
不加引用是把实参复制一份给形参,形参的变化不影响实参,
而非引用是直接对实参进行操作,也就是赋予了函数2异地操作数据的能力
这就是输出结果不同的原因,另外这个函数是一个顺序栈,数据结构中的数据
类型是用类C语言描述的,和编程语言是不一样的,它的目的就是为了说明算法
当然,我们理解了算法,才能更好的进行编程.
QQ:547758555
首先,SqStack是顺序栈的含义,S表示的是形参,而S表示的是实参,S是S的引用。这与函数有关,例如:
void OutList(SqStack S)
{ // 输出栈元素
S.top = S.base;
for(int i=0;ilength;i++)
{
printf("%d\t",*(S.top)++);
}
printf("\n"); //这是定义函数
请参考C语言函数那一章。
与它前面的类型SElemType一起把变量e定义为一种引用类型的变量,引用类型是C++相较于C语言新增加的语言特性,具有与指针类似的作用。把一个变量定义为引用类型的方法与定义为指针类型的方法也类似,把*改成就行了。比如:
//全局变量
int n=1;
void f1(int n)
{
n=2;
}
void f2(int *n)
{
*n=3;
}
void f3(int n)
{
n=4;
}
f1(n);
f2(n);
//调用参数为引用类型的函数时,直接传递实参名作参数就行了
f3(n);
函数f2和函数f3的调用都会改变全局变量n的值。
Status StackTraverse(SqStack S, Status (*pFun)(ElemType))
{
while(S.bottom != S.top)
{
pFun(*--S.top);
}
return OK;
}
//visit函数
Status Visit(ElemType e)
{
printf("%d\n", e);
return OK;
}
//调用
StackTraverse(S, Visit);
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流