关于C语言SqStack函数的信息

C语言板 数据结构 进栈 函数到底怎么写

看一个栈的简单实现,所有代码都写在一个头文件中,实际的话,最好把声明和实现分开。

成都创新互联公司是一家专业提供呼中企业网站建设,专注与网站设计制作、网站建设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)

这样的表示确实是有的,我来详细介绍一下.

其中,表示引用,而*表示指针.

我们来看一下,如果你的参数写成 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而有的是SqStack &S,有区别吗?

首先,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语言函数那一章。

数据结构 C语言 栈 Status Pop(SqStack &S,SElemType &e)

与它前面的类型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的值。

C语言函数调用(栈的实现)

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);


本文名称:关于C语言SqStack函数的信息
网页路径:http://scyanting.com/article/hgegjh.html