第一:概念

栈,也是一种特殊的线性表,是一种后进先出(LIFO),和在现实中有很多这样的例子。

例如:食堂里的一摞盘子,我们只能从上面拿一个。



二:存储结构

堆栈不像队列,需要两个指针来维护,而堆栈只需要一个指针,这是因为堆栈是一端受限的线性表。

相同的顺序结构用于存储堆栈,顶部指针指向堆栈的顶部,所有操作只能在顶部。





代码段:

复制代码代码如下所示:
该#区堆栈的数据结构
X
堆栈数据结构
X
seqstack公共类
{
公共数据;

X
更改堆栈指针
X
公共int顶部= 1;

公共seqstack(int的长度)
{
数据=新长度T { };
}
}
#铁心端部定点



三:共同操作

堆栈的操作如下:(1)初始化堆栈、堆栈、堆栈和堆栈顶部。

1:初始化堆栈

这还是比较简单的。当堆栈被初始化时,默认的top指针被设置为- 1,这在图中没有显示。

代码段:

复制代码代码如下所示:
该#区堆栈的初始化
X
只是堆栈的初始化
X
X
X
市民SeqStack SeqStackInit(int length)
{
seqstack seqstack =新seqstack(长度);

seqstack.top = - 1;

返回seqstack;
}
#铁心端部定点


2:栈

这个操作主要做两件事:(1)元素从栈顶被压,顶端指针增加。




代码段:

复制代码代码如下所示:
#区堆栈
X
只是栈
X
X
X
X
公共无效SeqStackPush(seqstack seqstack,T数据)
{
如果(SeqStackIsFull(seqstack))
抛出新的异常(对不起,堆栈溢出);

seqstack。数据{ + seqstack顶} =数据;
}
#铁心端部定点


3:出栈

与堆栈类似,您需要做两件事,(1)去掉top中的元素,并减少top指针。



代码段

复制代码代码如下所示:
#区堆栈
X
刚从烟囱里出来
X
X
X
X
公共seqstackpop(seqstack seqstack)
{
如果(SeqStackIsEmpty(seqstack))
抛出新的异常(哭泣,堆栈已空);

seqstack。数据{ seqstack。顶} =默认(T);

Return seqStack.data{--seqStack.top};
}
#铁心端部定点


4:获取堆栈的顶部元素

这很简单。与堆栈唯一的区别是它不会破坏堆栈的顶部,只是把它打开来查看它。

代码段

复制代码代码如下所示:
#区到堆栈的顶部
X
只要得到栈顶
X
X
X
X
公共seqstackpeek(seqstack seqstack)
{
如果(SeqStackIsEmpty(seqstack))
抛出新的异常(堆栈是空的);

返回seqstack。数据{ seqstack顶};
}
#铁心端部定点


整个运行代码如下所示

复制代码代码如下所示:
使用系统;
使用system.collections.generic;
使用LINQ系统;
使用系统文本;

命名空间seqstack
{
类节目
{
static void main(String { } args)
{
seqstackclass stackmanager =新SeqStackClass();

seqstack seqstack = stackmanager.seqstackinit(10);

console.writeline(********************出版社ID = 1,编号为2,编号为3 *********************** );
按id = 1 id = 2,id = 3元素
StackManager.SeqStackPush(seqstack,新学生(){ ID = 1,名称=线场农场
StackManager.SeqStackPush(seqstack,新学生(){ ID = 2,名为huangxincheng520
StackManager.SeqStackPush(seqstack,新学生(){ ID = 3,名为51cto

console.writeline(…记者走进成功,当前堆栈的元素有:+ stackmanager.seqstacklen(seqstack)+一);

console.writeline(******************视图顶部元******************** );

VaR结果= stackmanager.seqstackpeek(seqstack);

console.writeline(堆栈的顶部是:id =+ result.id +

console.writeline(********************易拉罐元*********************** );

StackManager.SeqStackPop(seqstack);

console.writeline(******************查看堆栈元素******************** );

为(int i = 0;i < stackmanager.seqstacklen(seqstack);i++)
{
console.writeline(堆栈的顶部是:id =+ seqstack。数据{我} ID +。
}

控制台;
}
}

#地区学生数据实体
X
公共学生数据实体
X
学生公共课
{
公共int id;get;set;}

公共字符串名称{;get;set;}

公共年龄;get;set;}
}
#铁心端部定点

该#区堆栈的数据结构
X
堆栈数据结构
X
seqstack公共类
{
公共数据;

X
更改堆栈指针
X
公共int顶部= 1;

公共seqstack(int的长度)
{
数据=新长度T { };
}
}
#铁心端部定点

seqstackclass公共类
{
该#区堆栈的初始化
X
只是堆栈的初始化
X
X
X
市民SeqStack SeqStackInit(int length)
{
seqstack seqstack =新seqstack(长度);

seqstack.top = - 1;

返回seqstack;
}
#铁心端部定点

#区域判断栈是否为空
X
只是为了确定堆栈是否是空的。
X
X
X
X
市民bool SeqStackIsEmpty(seqstack seqstack)
{
返回seqstack.top = = 1;
}
#铁心端部定点

#区空栈
X
只是空栈
X
X
X
公共无效seqstackclear(seqstack seqstack)
{
seqstack.top = - 1;
}
#铁心端部定点

是否#区栈满
X
堆栈是否满了
X
X
X
市民bool SeqStackIsFull(seqstack seqstack)
{
返回seqstack.top = = seqstack.data.length;
}
#铁心端部定点

#区堆栈
X
只是栈
X
X
X
X
公共无效SeqStackPush(seqstack seqstack,T数据)
{
如果(SeqStackIsFull(seqstack))
抛出新的异常(对不起,堆栈溢出);

seqstack。数据{ + seqstack顶} =数据;
}
#铁心端部定点

#区堆栈
X
刚从烟囱里出来
X
X
X
X
公共seqstackpop(seqstack seqstack)
{
如果(SeqStackIsEmpty(seqstack))
抛出新的异常(哭泣,堆栈已空);

seqstack。数据{ seqstack。顶} =默认(T);

返回seqstack。数据-- seqstack {顶};
}
#铁心端部定点

#区到堆栈的顶部
X
只要得到栈顶
X
X
X
X
公共seqstackpeek(seqstack seqstack)
{
如果(SeqStackIsEmpty(seqstack))
抛出新的异常(堆栈是空的);

返回seqstack。数据{ seqstack顶};
}
#铁心端部定点

#区到栈中元素的数量
X
获取堆栈中的元素数量正在更改。
X
X
X
X
市民int SeqStackLen(seqstack seqstack)
{
返回seqstack.top + 1;
}
#铁心端部定点
}
}