第一:概念
栈,也是一种特殊的线性表,是一种后进先出(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;
}
#铁心端部定点
}
}