C#实现顺序栈和链栈的代码实例
自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现:
注意以下类,接口都是在一个命名空间下
栈的接口:包括了常用的方法
namespace栈
{
interfaceIStackDS
{
intCount{get;}
intGetLength();
boolIsEmpty();
voidClear();
voidPush(Titem);
TPop();
TPeek();
}
}
顺序栈的实现,参照顺序表实现
namespace栈
{
classSeqStack:IStackDS
{
privateT[]data;//栈
privateinttop;//栈顶
//构造函数
publicSeqStack(intsize){
data=newT[size];
top=-1;
}
publicSeqStack():this(10)
{
data=newT[10];
top=-1;
}
//栈的元素个数属性
publicintCount
{
get
{
returntop+1;
}
}
//清空栈的方法
publicvoidClear()
{
top=-1;
}
//获取栈的长度的方法
publicintGetLength()
{
returnCount;
}
//查看栈顶元素是什么
publicTPeek()
{
if(top==-1)
{
Console.WriteLine("当前栈没有元素");
returndefault(T);
}
returndata[top];
}
//出栈(取出栈顶元素,并移除)
publicTPop()
{
Ttemp=data[top];
top--;
returntemp;
}
//入栈
publicvoidPush(Titem)
{
data[top+1]=item;
top++;
}
//栈中是否源元素
publicboolIsEmpty()
{
returnCount==0;
}
}
}
以上是顺序栈的实现
下面是链栈的实现,定义一个节点类
namespace栈
{
///
///链栈的节点
///
///
classNode
{
privateTdata;//数据
privateNodenext;//指向下一个的引用
//四个构造函数,不是都有用,,以及上面两个变量的属性,
publicNode()
{
data=default(T);
next=null;
}
publicNode(Tdata)
{
this.data=data;
next=null;
}
publicNode(Tdata,Nodeindex)
{
this.data=data;
this.next=index;
}
publicNode(Nodeindex)
{
data=default(T);
next=index;
}
publicTData
{
get{returndata;}
set{data=value;}
}
publicNodeNext
{
get{returnnext;}
set{next=value;}
}
}
}
链栈的实现:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespace栈
{
classLinkStark:IStackDS
{
privateNodetop;//栈顶元素节点
privateintcount=0;//栈里面的元素
publicintCount
{
get
{
returncount;
}
}
///
///清空栈中数据
///
publicvoidClear()
{
count=0;
top=null;
}
///
///栈的长度
///
///
publicintGetLength()
{
returnCount;
}
///
///栈中是否有数据
///
///
publicboolIsEmpty()
{
returncount==0;
}
publicTPeek()
{
returntop.Data;
}
///
///出栈取得栈顶元素然后删除
///
///
publicTPop()
{
Tdata=top.Data;
top=top.Next;
count--;
returndata;
}
///
///入栈
///
///
publicvoidPush(Titem)
{//把新添加的元素作为头结点,就是栈顶
NodenewNode=newNode(item);
newNode.Next=top;
top=newNode;
count++;
}
}
}
以上是链栈的实现
下面是测试:
- C#库中带的栈
- 自己的写的顺序栈
- 自己写的链栈
amespace栈
{
classProgram
{
staticvoidMain(string[]args)
{
//使用BCL中的栈
//Stackstack=newStack();
//使用自己的栈
//SeqStackstack=newSeqStack();
//使用自己的链栈
IStackDSstack=newLinkStark();
stack.Push('a');
stack.Push('b');
stack.Push('c');
Console.WriteLine("push后的数据个数"+stack.Count);
chartemp=stack.Pop();
Console.WriteLine("pop之后数据是:"+temp);
Console.WriteLine("pop之后数据个数"+stack.Count);
chartemp2=stack.Peek();
Console.WriteLine("Peek之后数据是:"+temp2);
Console.WriteLine("Peek之后数据个数"+stack.Count);
Console.ReadKey();
}
}
}
下篇队列的实现同理:https://www.nhooo.com/article/149555.htm
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。